-1

以下は、2、8ビットの数値を乗算するために私が書いたプログラムです。私の友人の一人は、プログラムが間違っていると言った。確認できなかったので、確認したかったのです。アセンブリプログラミングを学び始めたばかりです。次のプログラムは、多くのレジスタを使用します。

LDA C001H
MOV B,A
LDA C002H
MOV D,A
MOV C,0H
CMP C
JZ ZRESULT    // CHECKED FOR C002
MOV A,B
CMP C
JZ ZRESULT    // CHECKED FOR COO1

LOOP :  ADD A
        MOV E,A
        LDA 01H
        DEC D
        CMP D
        JZ ANSWER
        JNZ LOOP



 ZRESULT : LDA 0H
           STA 2500H
           OUT PORT1

 ANSWER :  MOV A,E
           STA 2500H
           OUT PORT1

このプログラムは正しいですか?そうでない場合は、その中の修正を教えてください。

4

2 に答える 2

0

加算ループでオーバーフローを検出する必要があります。単純な方法は、追加後に結果が減少するかどうかを確認することです。例として 20*13 を取り上げます。20*12 はレジスターに 240 を与えますが、それに 20 を加えても 260 にはならず、4 (260%256) になります。

より良い方法は、条件レジスタのキャリー フラグをチェックすることです。

于 2012-02-09T06:43:53.360 に答える
0

問題は、2 つの 8 ビット数を乗算すると 16 ビットの結果が得られることです。ただし、8ビットの結果しか得られません。

操作のキャリー結果で何かをする必要がありますADD A

于 2012-02-09T04:26:35.857 に答える