2012-02-09 4 views
-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 

このプログラムは正しいですか?もしそうでなければ、その中の訂正を教えてください。

+0

複数の数値を重ね合わせて結果を確認しようとすると、プログラムの信頼性が向上します。特に、数値が「0」、「1」、「2」、「3」、 2の累乗より大きいか1未満の数、およびオーバーフローを強制する入力が含まれます。 – sarnold

答えて

0

問題は、2つの8ビット数を掛け合わせると16ビットの結果が得られることです。あなたは8ビットの結果しか出せません。

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

+0

どうすればいいですか? –

0

加算ループでオーバーフローを検出する必要があります。純粋な方法は、加算後に結果が減少するかどうかをチェックすることです。例を20 * 13とします。 20 * 12はレジスタに240を与えますが、20を加えれば260になりますが、4(260%256)になります。

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

関連する問題