首页 文章

masm师溢出

提问于
浏览
8

我正在尝试在汇编中划分两个数字 . 我正在为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 回答

  • 4

    在进行除法之前,您需要对EDX寄存器进行零扩展:

    mov eax, 4
    mov ebx, 2
    xor edx, edx          ;set edx to zero
    div ebx
    call WriteDec
    

    ;set edx to zero 是MASM中的评论 . 如果你在C中使用内联汇编,我不会_94944_工作,所以如果你是:)请不要复制它

  • 0

    是的,您需要将 edx 设置为零 .

    最简单的方法是:

    xor edx, edx
    
  • 14

    我认为上面提到的原因是正确的,因为当你用ebx划分eax时,两者都是32位数,但是被除数需要是64位除数是32位所以它认为edx是msb ...你可以使edx 0或者代替使用3bx只使用bx ..就这样,你将32位数除以16位数

相关问题