用一个单词nasm划分一个双字

时间:2017-11-08 18:46:56

标签: assembly x86 nasm division extended-precision

我试图在DX:AX中对dword进行签名划分,让我们说1234567,单词[b] = 10。

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

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

1 个答案:

答案 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将上半部分归零。