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

上記の段落をスキップした場合、私の残りはどこに行くのですか? 別の mod 分割を行う必要がありますか?

4

1 に答える 1

1

Intelのマニュアルからの引用:

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

TL;DR: 残りはAHあなたのケースに入ります。

被除数はAX(16 ビット) であるため、AH8 ビットの被除数のみを使用する場合は、除算の前にクリアする必要があります。(すでに でこれを行っていますxor eax,eax

于 2013-11-07T14:02:01.640 に答える