2010-11-19 4 views
1

私はEasy68kを使って、whileループを含む簡単なプログラムを作っています。アドレスレジスタを更新するには?

レジスタA0が自分のデータを指しているとします。これがワードです。 これはなぜ機能しませんか?最初番号2にA0点が、その数4は、私が望む結果が第1移動後、2インクリメント及び第三の移動後、格納されていることであること後、4が格納されている場合

MOVE.W (A0) , D3 
MOVE.W (A0)+, (A0) 
MOVE.W (A0) , D3 

。 しかし、最後の移動は効果がありません。

答えて

0

私は答えを見つけました。

基本的に(A0)+は、それが含まれている命令を完了した後にアドレスレジスタをインクリメントします。

私はそれが最初にインクリメントされ、次に割り当てられると考えました(論理的なミスも同様です)。

は、だから私がする必要があるすべては、次のとおりです。

move (A0)+,D3; 

これはD3にA0に値を追加し、周りの次回のためにA0をインクリメントします。

0

私は決して68Kジョックですが、私はアドレッシングモードを調べなかったと私はこのラインで困惑している:私はその権利を読んでいる場合

MOVE.W (A0)+,(A0) 

、それはの内容をコピーしていますA0がA0を指すアドレスを指し、次にA0を2だけインクリメントします。それはちょうど増分A0命令ですか?

または、A0の値を取り、A0を2だけインクリメントして、その値を新しいアドレスに書き込みますか?もしそうなら、D3が2を続ける理由を説明する、各ループ反復の連続するメモリ位置に '2'を対処するように思えます。

+0

する必要があります私は命令を混乱させる確率がありました。それが私がここに投稿した理由です。私は達成しようとしていることをあなたはどうしますか?つまり、単にアドレスレジスタをインクリメントして、次のワードを指すようにします。あなたの2つの選択肢の中で、どちらが当てはまるのかわかりません。あなたの理論は説得力があるようです。 – Blackbinary

+0

私は助けに感謝し、それは正しい道に私を得た!下の私の答えを見てください。 – Blackbinary

+0

lea(A0)+、A0' –

2

ので、非常に高いが、theresの、私はちょうど初心者です、私は私はあなたが欲しいものをunderstodかどうかわからないけど、私は右だ場合、あなたのsecord命令は

ADDI.L #2,A0 

または

LEA (A0)+,A0 
関連する問題