1

我试过用谷歌搜索找到剩余部分在 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

如果您跳过了上一段,我的剩余部分将去哪里?我必须做单独的模组划分吗?

4

1 回答 1

1

引用英特尔手册

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

TL; DR:其余的进入AH你的情况。

请注意,被除数是AX(16 位),因此您应该AH在除法之前清除,以防您只使用 8 位被除数。(您已经在使用xor eax,eax

于 2013-11-07T14:02:01.640 回答