2012-12-18 2 views
1

가능한 중복 8086 조립 오류 :
ASM x86 integer overflow분할 에뮤

나는 나누기 오류 - 오버 플로우를 얻을 이유를 모르겠습니다. 다음은 오류를 재현 전체 코드입니다

include emu8086.inc 

org 100h 

     mov ax, 2 
     mov bx, 10 
     div bx 

     mov ax, 2 
     mov bx, 2 
     div bx 
     ret 
+2

2의 거듭 제곱의 경우, 일반적으로 쉬프트가 사용됩니다. SHR AX, 1을 사용하는 것이 훨씬 간단합니다. 추가 레지스터를 사용할 필요가 없습니다. –

답변

5

에 한번 각 div 전에 xor dx, dx를 추가하고 그 도움이되지 않는 경우를 참조하십시오.

16 비트 대상을 지정 했으므로 divdx:ax을 해당 대상으로 나눕니다. dx이 큰 숫자 (더 정확하게는 아주 작은 숫자)를 포함하기 시작하면 결과가 오버 플로우됩니다. 오버플로가 발생하지 않더라도 결과는 분명히 의도 한대로 ax/bx이 아닙니다.

+0

빠른 응답과 설명에 감사드립니다. 완벽하게 일했다. –