我正在尝试在汇编中划分两个数字 . 我正在为Irvine组装英特尔计算机书工作,我无法为我的生活做分工 .
这是我的代码
.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崩溃(程序确实会编译) .
3 回答
在进行除法之前,您需要对EDX寄存器进行零扩展:
;set edx to zero
是MASM中的评论 . 如果你在C中使用内联汇编,我不会_94944_工作,所以如果你是:)请不要复制它是的,您需要将
edx
设置为零 .最简单的方法是:
我认为上面提到的原因是正确的,因为当你用ebx划分eax时,两者都是32位数,但是被除数需要是64位除数是32位所以它认为edx是msb ...你可以使edx 0或者代替使用3bx只使用bx ..就这样,你将32位数除以16位数