我正在尝试DX:AX
用单词 [b]=10 对 1234567 中的 dword 进行有符号除法。
a dd 1234567
b dw 10
mov ax,[a]
mov dx,[a+2]
idiv word [b]
商应该是 123456,但它太大了,所以它不适合 ax。我应该怎么做才能解决这个问题?
我正在尝试DX:AX
用单词 [b]=10 对 1234567 中的 dword 进行有符号除法。
a dd 1234567
b dw 10
mov ax,[a]
mov dx,[a+2]
idiv word [b]
商应该是 123456,但它太大了,所以它不适合 ax。我应该怎么做才能解决这个问题?
您显然有可用的 32 位操作数大小,所以不仅仅使用它idiv dword [b]
(它在 16 位之外读取b
,因此不可能是正确的)。
mov eax, [a]
cdq
mov ecx, 10 ; or movsx ecx, word [b] to load with sign-extension
idiv ecx
您将所有内容都a
像eax
通常用于任何其他 32 位操作一样。然后你使用 64b / 32b => 32b 除法和一个微不足道的上半部分(符号或零扩展)。
cdq
符号延伸eax
到edx:eax
. 要设置为div
而不是idiv
,请使用xor edx,edx
将上半部分归零。