【发布时间】:2011-11-22 18:31:52
【问题描述】:
我正在学习汇编语言中的除法。根据我正在学习的书,idiv操作的结果放在eax中,其余的放在edx中。
书中的一个练习是在汇编中实现number = result % divisor。
我原以为这相当于正常的除法运算,但结果是 edx。
但这不起作用,edx 似乎返回了垃圾。
为什么?上面的伪代码你是如何在汇编中实现的?
【问题讨论】:
-
我会编写一个很小的 C 函数,然后查看生成的程序集(例如使用
gcc -O -fverbose-asm -S tiny.c) -
您的问题类似于stackoverflow.com/questions/8021772/… 如果您遇到特定问题,请显示您的实际代码(很可能您没有清除 rdx:rax、edx:eax 或 dx 的上半部分:斧头)。
-
不看代码就很难猜到,但一个常见的失误是忘记在 idiv 之前将 edx 归零。