我正在学习汇编语言的分工 . 根据我正在学习的书,idiv操作的结果放在eax中,其余部分放在edx中 .
本书中的练习是在汇编中实现 number = result % divisor .
number = result % divisor
我原以为这相当于正常的除法运算,除了edx就是结果 .
然而这并没有起作用,而edx似乎又回来了垃圾 .
为什么?你如何在汇编中实现上面的伪代码?
整数模数可以通过两种方式实现:
首先使用 DIV 或 IDIV ,其余部分将放入 EDX ,但您需要先将 EDX 归零,或引用intel:
DIV
IDIV
EDX
Operand Size -----------| Dividend | Divisor | Quotient | Remainder Quadword/doubleword | EDX:EAX | r/m32 | EAX | EDX.
例如:
eax = eax % 9
当无符号成为:
XOR EDX,EDX ;clear the destinations for outputs. this stops the garbage remainder MOV ECX,9 DIV ECX MOV EAX,EDX
签名时,它是:
MOV ECX,9 CDQ ;this will clear EDX due to the sign extension IDIV ECX MOV EAX,EDX
第二种方式是使用2的幂模数时使用的优化,在这种情况下,你比一个2的幂小一个,例如: eax = eax % 8 变为 AND EAX,7 .
eax = eax % 8
AND EAX,7
1 回答
整数模数可以通过两种方式实现:
首先使用
DIV
或IDIV
,其余部分将放入EDX
,但您需要先将EDX
归零,或引用intel:例如:
当无符号成为:
签名时,它是:
第二种方式是使用2的幂模数时使用的优化,在这种情况下,你比一个2的幂小一个,例如:
eax = eax % 8
变为AND EAX,7
.