Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何在汇编中不使用div查找余数_Assembly_X86 - Fatal编程技术网

Assembly 如何在汇编中不使用div查找余数

Assembly 如何在汇编中不使用div查找余数,assembly,x86,Assembly,X86,我想知道如果不能使用div操作数,如何找到整数的余数。例如: mov eax, 400 ; 400 / 4 shr eax, 2 ; Remainder : 0 mov eax, 397 ; 397 / 4 shr eax, 2 ; Remainder : 1 mov eax, 394 ; 394 / 4 shr eax, 2 ; Remainder : 2 移位会截断余数 因此,如果不使用div(它将余数存储在edx)我们可以做些什么

我想知道如果不能使用div操作数,如何找到整数的余数。例如:

mov eax, 400    ; 400 / 4 
shr eax, 2      ; Remainder : 0


mov eax, 397    ; 397 / 4
shr eax, 2      ; Remainder : 1


mov eax, 394    ; 394 / 4
shr eax, 2      ; Remainder : 2
移位会截断余数


因此,如果不使用
div
(它将余数存储在
edx
)我们可以做些什么来确定余数是什么

如果你只是想要余数除以2的幂,就像你的例子中那样,那么余数实际上就是你输入的低阶位(那些你移出的位)。因此,应用位屏蔽运算符,您可以立即检索余数,而无需任何进一步的算术运算

在microsoft x86汇编语言中,我相信您的第一个示例如下所示:

mov eax, 400    ; 400 / 4 
and eax, 3h     ; Masking with hex 3 (the lowest two bits) retrieves the remainder

二次方除法是简单的位操作(因此也适用于余数),但对于一般除法(如17)则不那么容易;然后乘以4,再从原来的数字中减去。这是你们的余数。谢谢你们,我走对了方向。只是没有完全达到目的。:)非常感谢@彼得·威尔逊如果你想把你的答复写在回信里,我会接受的。否则我就直接回答了。Kerrek SB感谢您的解释,您能详细说明位操作部分吗?对于一般情况(不仅仅是二的幂),请参见。@JerryCoffin谢谢,这是一本很好的读物。向上投票!