0

我正在尝试DX:AX用单词 [b]=10 对 1234567 中的 dword 进行有符号除法。

a dd 1234567
b dw 10
mov ax,[a]
mov dx,[a+2]
idiv word [b]

商应该是 123456,但它太大了,所以它不适合 ax。我应该怎么做才能解决这个问题?

4

1 回答 1

1

您显然有可用的 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

您将所有内容都aeax通常用于任何其他 32 位操作一样。然后你使用 64b / 32b => 32b 除法和一个微不足道的上半部分(符号或零扩展)。

cdq符号延伸eaxedx:eax. 要设置为div而不是idiv,请使用xor edx,edx将上半部分归零。

于 2017-11-15T23:17:30.757 回答