NASM,我的DIV剩余部分在哪里?

时间:2013-11-07 13:52:19

标签: nasm

我已经尝试使用谷歌搜索找到其余部分在NASM的div中。对于8位除法,看起来商是在al中,而余数在al中。但我也看到人们说它会在dl中。在这一点上,我很困惑。在我下面的代码中,我试图打印出商和剩余部分,以便在我继续之前检查我的工作。我似乎无法正确得到其余部分。 (基数是除数)

asciiout: db "%c %c", 10, 0

....
xor eax, eax
xor ebx, ebx
xor edx, edx
mov al, [Num]
mov bl, [Base]
div bl

add al, '0'
mov [Quotient], al
add ah, '0'
mov [Remainder], ah

push edx
push eax
push asciiout
call printf
add esp, 12

如果您跳过上面的段落,我的剩余部分将在哪里?我是否必须单独进行mod划分?

1 个答案:

答案 0 :(得分:1)

引自Intel's manual

  

DIV r/m8 Unsigned divide AX by r/m8, with result stored in AL ←Quotient, AH ← Remainder.

TL; DR:在你的情况下余数进入AH

请注意,被除数为AX(16位),因此如果您只使用8位红利,则应在除法前清除AH (您已经使用xor eax,eax

执行此操作