基本问题:
我写了以下代码块:
DATASEG
Result db ?
Modulo db ?
var3 db -9
var4 db 2
CODESEG
start:
mov ah, 0
mov al, [var3]
mov bl, [var4]
div bl
mov [Result], al
mov [Modulo], ah
我得错了-9/2的结果。 我得到的结果是“7B”,似乎它将“F7”视为247。
如何在将var3定义为databyte(db)的情况下正确完成此操作?
或者,还有其他方法吗?
感谢您的回答
答案 0 :(得分:3)
您必须使用idiv
执行已签名的部门。
div
无法正确处理 var3
mov al, [var3]
cbw
idiv byte ptr [var4]
根据您的评论,我发现您不喜欢cbw
指令,并且您不希望使用最短代码进行除法指令。您可以随时对其进行编码:
mov al, [var3]
mov ah, FFh ;Only if you 'know' var3 has a negative value!
mov bl, [var4]
idiv bl
mov [Result], al
mov [Modulo], ah
或者仍然避免cbw
:
movsx ax, byte ptr [var3]
mov bl, [var4]
idiv bl
mov [Result], al
mov [Modulo], ah