2

これは私の印刷機能で、3桁の結果を出力するはずです。結果をdwであるRESに保存します。プッシュアンドポップは、印刷に関する問題を解決しましたが、どこで問題が発生したのかわかりません。

XOR AX, AX
XOR BX, BX

    ;this divides my 3digit number by 100 giving me my, hundredth digit
MOV AX, RES
MOV BX, 100
DIV BX

    ;prints the hundredth digit
ADD AL, '0'
MOV DL, AL
PUSH AX ; save AX on the stack 
MOV AH, 02h
INT 21h
POP AX ; restore ax

    ;divides the remainder by 10 giving me my tens digit
MOV BX, 10
DIV BX

    ;prints my tens digit
ADD AL, '0'
MOV DL, AL
PUSH AX ; save AX on the stack
MOV AH, 02h
INT 21h
POP AX ; restore ax

    ;print my last remainder which is my ones
ADD AH, '0'
MOV DL, AH
MOV AH, 02h
INT 21h
4

3 に答える 3

2

「div bx」は、dx:ax を bx で除算します。それで、あなたのdxは何ですか?

于 2013-07-15T21:28:40.887 に答える
0

括弧または括弧が必要な値の代わりに「RES」のアドレスを取得していると思います。

于 2013-07-15T21:29:46.673 に答える
0

10 の段階では、残りは AX ではなく AH にあります。

また、「AX をスタックに保存する」や「AX を復元する」などのコメントは絶対に入れないでください。アセンブラに少しでも流暢な人なら誰でも (アセンブラで何かを書いてから 20 年が経ちますが、それには私も含まれます)、これらの命令が何をしているかを知っているでしょう。

コメントは、何をしているのかではなく、なぜそれをしているのかを説明する必要があります。

これ以上バグがないことを誓うつもりはないので、私はこれについて十分に錆びています。

于 2013-07-15T22:35:08.313 に答える