2017-12-23 4 views
1

私はHLで最大数のアドレスを格納したいが、私は本当にする方法がわからないが、それ これは私がこれまでに 最大の数 - 8085マイクロプロセッサ

0000 LXI H,3000H  ;Load H-L pair with address 3000H 
    0001 
    0002 
    0003 MOV E,M  ;Move counter from memory to reg. E. 
    0004 INX H  ;Increment H-L pair 
    0005 MOV A,M  ;Move the 1st number from memory to reg. A. 
    0006 DCR E  ;Decrement counter. 
    0007 INX H  ;Increment H-L pair 
    0008 MOV D,M  ;Move the next number from memory to reg. D. 
    0009 CMP D  ;Compare D with A. 
    000A JNC 000EH ;Jump to address 000EH if there is no carry 
    000B 
    000C 
    000D MOV A,D  ;Move largest from reg. D to reg. A. 
    000E DCR E  ;Decrement counter. 
    000F JNZ 0007H ;Jump to address 0007H if counter is not zero. 
    0010 
    0011 
    0012 INX H  ;Increment H-L pair. 
    0013 MOV C,A  ;Move the result from reg. A to C 
    0014 HLT 


**MEMORY** 
3000H: 05 (counter) 
3001H: 2C 
3002H: 1E 
3003H: 58 
3004H: 46 
3005H: 53 

をやったものです

最大数を見つける部分でコードは正常に機能しますが、最終的にHLに最大数のアドレスを格納することです

+0

あなたのコードをコメントしてもらえますが、これを実行すると正確には何ができませんか? ([mcve]を参照)。また、書式を修正できますか? (二重スペースを削除して、すべてのコードを選択し、 '{}'アイコンをクリックしてコードブロックにします)。 –

+0

コードは機能しますが、最大値のアドレスを保存したいと思います。この場合、プログラムを実行した後、HLは最高値のアドレスであるため、3003Hのアドレスを格納します。 – user1678

+0

ニースの編集は、読みやすさが大幅に向上し、最後の段落が実際の質問になります。 –

答えて

1

私は8085をよく分かりません。どのレジスターマシンでも機能する一般的な答えです。 (またはCであれ何でもあれば、答えは「他の言語と同じです」という質問の1つです)

新しい最大値を見つけたら、のようにアドレスをとしてコピーしてください値。 (条件付きでジャンプするMOV A,Dの命令ブロックにあります)。それでも比較の価値は必要です。

8085に十分なレジスタがない場合は、メモリに格納します。あなたのループが完了したら、必要に応じてそこからHLをリロードすることができます。あなたの機能の結果としてメモリに値を残す。

開始値とアドレスの両方を最初の要素に合わせてください(最大値の場合)。値のみの検索とは異なり、maxの初期値として可能な最小値を使用することはできません。