我试图在DX:AX
中对dword进行签名划分,让我们说1234567,单词[b] = 10。
a dd 1234567
b dw 10
mov ax,[a]
mov dx,[a+2]
idiv word [b]
商应该是123456,但它太大,所以它不适合斧头。我该怎么做才能解决这个问题?
答案 0 :(得分:0)
你显然有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
将上半部分归零。