【发布时间】:2018-04-21 14:15:53
【问题描述】:
我正在尝试对 DX:AX 中的 dword 进行有符号除法,假设 1234567 带有单词 [b]=10。
a dd 1234567
b dw 10
mov ax,[a]
mov dx,[a+2]
idiv word [b]
商应该是 123456,但它太大了,所以它不适合 ax。我应该怎么做才能解决这个问题?
【问题讨论】:
-
使用 64 位除法(如果可用)。否则,请自行实施。
-
所以我应该将 dword 转换为 qword 并将 word 转换为 dword 并进行有符号除法?
-
是的,就是这样。
-
@Jester 所以我这样做了:mov ax,[b];顺时针;移动 [e],ax;移动斧头,[a];移动 dx,[a+2]; cdq; idiv 双字 [e] 。但这只会将 eax 除以 [e] ,因为考虑到 edx=0。
-
mov eax, [a]/cdq/mov ecx, 10/idiv ecx。如果您有可用的 32 位操作数大小,则将所有a放入eax中,就像您通常对任何其他 32 位操作一样。然后使用 64b / 32b => 32b 除法,上半部分被除数 = 0。(cdq符号将eax扩展为edx:eax。要设置div而不是idiv,请使用@987654334 @)
标签: assembly x86 nasm division extended-precision