gpt4 book ai didi

assembly - 如何在汇编中实现 mod 运算符

转载 作者:行者123 更新时间:2023-12-04 13:14:38 25 4
gpt4 key购买 nike

我正在学习汇编语言中的除法。根据我学习的那本书,idiv运算的结果放在eax中,余数放在edx中。

书中的一个练习是实现number = result % divisor在组装中。

我原以为这相当于一个正常的除法运算,除了 edx 会是结果。

然而,这不起作用,edx 返回了看似垃圾。

为什么?你是如何在汇编中实现上述伪代码的?

最佳答案

整数模可以通过两种方式实现:

首先使用 DIVIDIV ,剩余部分将放入 EDX ,但你需要归零 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 的幂取模时使用的优​​化,在这种情况下,您 AND比二的幂小一,例如: eax = eax % 8变成 AND EAX,7 .

关于assembly - 如何在汇编中实现 mod 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com