【问题标题】:32 bit division in assembly language汇编语言中的 32 位除法
【发布时间】:2014-01-27 12:50:45
【问题描述】:

我正在大学课程中学习汇编语言编程(80386 编程)。目前,我正在学习使用 EDX 和 EAX 寄存器分别存储余数和商的 32 位除法的来龙去脉。我想知道,为什么我不包含时得不到正确的输出

mov edx, 00000000h

在我的程序中。程序要么不运行,要么输出错误。

相关源码:

mov edx, 00000000h
mov eax, 1234567Ah
div 11111111h ; now EDX=remainder, EAX=quotient

如果需要,我会发布完整的代码。

【问题讨论】:

    标签: assembly


    【解决方案1】:

    DIV与32位操作数一起使用时,它将EDX:EAX中的64位值(EDX中的高位DWORD,EAX中的低位DWORD)除以操作数并将商放入EAXEDX 中的其余部分。

    因此,如果要除以 32 位的值(仅适合 EAX),则应在除法之前清除 EDX。否则会导致结果不正确,或者如果商不适合EAX,则会导致除法溢出。

    【讨论】:

    • 哦,当然,除法会除法 EDX:EAX,我没想到!谢谢你的回答,我的问题已经回答了。
    【解决方案2】:

    32 位 div 实际上将 edx:eax 除以指定值。如果 edx 里面有随机垃圾,你会得到垃圾结果。没有选项可以将 JUST 与 eax 分开...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      相关资源
      最近更新 更多