我正在尝试在汇编中划分两个数字。我正在为英特尔计算机书的欧文大会工作,我无法为我的生活做分工。
这是我的代码
.code
main PROC
call division
exit
main ENDP
division PROC
mov eax, 4
mov ebx, 2
div ebx
call WriteDec
ret
divison ENDP
END main
WriteDec应写入eax寄存器中的任何数字(应在除法调用后设置为商)。相反,每当我运行它时,visual studio崩溃(程序确实会编译)。
答案 0 :(得分:15)
在进行除法之前,您需要对EDX寄存器进行零扩展:
mov eax, 4
mov ebx, 2
xor edx, edx ;set edx to zero
div ebx
call WriteDec
;set edx to zero
是MASM中的评论。我不知道如果你在C中使用内联汇编它是否会起作用,所以如果你是这样的话,不要复制它:)
答案 1 :(得分:4)
是的,您需要将edx
设置为零。
最简单的方法是:
xor edx, edx
答案 2 :(得分:0)
我认为上面提到的原因是正确的,因为当你通过ebx划分eax时,两者都是32位数,但是除数需要是64位除数是32位,所以它认为edx是msb ...你可以使edx 0或代替使用3bx只使用bx ..就这样你将32位数除以16位数