2017-11-27 4 views
0

방금 ​​어셈블리 학습을 시작했고 다른 플래그가 어떻게 작동하는지 이해하려고합니다. 어셈블리 x86 플래그 오버플로 플래그

mov ax, 0xBFE8h 
mov bx, 25DFh 
add ax, bx 

가 오버 플로우 플래그가 켜지지해야

: 의 나는 이렇게 가정 해 봅시다? 추가 값은 58,823 (기본 10)이며, 이는 32,767 (부호있는 16 비트 값) 이상입니다. 프로그램을 체크인했는데 플래그가 켜지지 않았습니다. 왜 이런거야?

도움 주셔서 감사합니다.

+0

http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt. 당신은 서명 된 OverFlow가 아닌 ​​캐리 플래그 (부호없는)를 찾고 있습니다. –

+0

부호가있는 수학 (값의 해석)에서 -16408 + 9695 = negative + positive 값은 원칙적으로 오버플로 할 수 없습니다. 결과는 원래 두 값 사이에서 반드시 동일합니다. OF는 부호와 관련된 수학이다. – Ped7g

답변

4

부호가 오버플로되면 오버플로 플래그가 켜집니다. 그러나 이것은 귀하의 코드에는 해당되지 않습니다. 0xbfe80x8000보다 크고 따라서 2의 보수가 음수이고 − 16408을 나타내면 − 6713이고 합이 − 32768 ~ +32767 범위를 벗어나지 않으므로 부호있는 오버플로가 발생하지 않고 오버플로 플래그가 삭제되었습니다.

+1

분명히이 질문은 무언가의 복제본입니다. 나는 찾고 있었지만 아직 좋은 답변으로 동일한 것을 찾지 못했습니다. –

+0

@PeterCordes 아마도 이것은 미래에 표준 복제본이 될 것입니다. – fuz

+0

마침내! 나는 이것을 잠시 동안 이해하려고 노력 해왔다. 고마워! – eitanmayer