2010-11-18 14 views
1

私はfor-loopの使用を必要とするプログラムを書こうとしています。 他のウェブサイトでこのような基本的なコードの例を見つけようと、ひどい時を過ごしています。68kアセンブリの基本for-loop?

誰かが私に簡単なループを提供してもらえればいいと思います。そして、68k初心者のチュートリアルのための優れたリソースを知っていれば、下記にコメントしてください!

ありがとうございます!

+0

68000プロセッサとそのコンパイラ(任意の言語)がありますか? –

+0

私はEasy68k(エミュレータとコンパイラ)を使用しています。 – Blackbinary

答えて

5

[編集]リンクから

追加答え

68000が持つクエリ(Google検索での第3回結果 '68000アセンブリ')への答えをhereを参照してください。別個のアドレスレジスタとデータレジスタを持つ珍しい(ユニーク?)特性。 8つのデータレジスタD0〜D7と8つのアドレスレジスタA0〜A7があります。 A7もスタックポインタSPです。これは、68000アセンブリ言語は、どのレジスタがデータを保持し、どのアドレスを保持しているかを容易に知ることができるため、従うのが容易になる傾向があることを意味します。例えば、これは、単語の配列の合計を計算するために68000アセンブリである:EASy68Kヘルプに引用されるように、以下のように

moveq #0, d0 
    moveq #0, d1 
    moveq #5, d2 
loop: 
    move.w (a0)+, d0 
    add.l d0, d1 
    dbra d2, loop 

[/編集]

+0

私はそのページ全体を読んだことがあります(私は先ほど述べたように、私はいくつかの研究をしました)、あなたが指している部分を具体的に指摘できますか?ありがとう。 – Blackbinary

+1

68000の基本では、loop:partは 'for'ループです。 D2レジスタのセットをスキップしますが、DBRAはデクリメントBRAnchが0ではないため、D2が0になるまでD2をデクリメントします。 – KevinDTimm

+0

ありがとうございます。 – Blackbinary

0

、68Kにおけるforループの構文は次のとおりです。

FOR[.size] op1 = op2 TO op3 [BY op4] DO[.extent] 
    code 
ENDF 

または他の言葉で

FOR[.size] op1 = op2 DOWNTO op3 [BY op4] DO[.extent] 
    code 
ENDF 

for.size counter_location = starting_condition to ending_condition step_size 
    operations to be executed each loop 
end of for loop 

step_sizeと.sizeは両方ともオプションです。

実際の例です。
次のコードは、0

lea uppercase, a1 ; points a1 at the start of the uppercase variable 
lea $002000, a2  ; points a2 at the start of the destination address 

for d1 = #1 to #26 do.s 
    move.b (a1)+, (a2)+ 
endf 

; Memory locations $002000 - $002019 now contain ABCDEFGHIJKLMNOPQRSTUVYWXYZ 

、次の変数 大文字dc.b「ABCDEFGHIJKLMNOPQRSTUVWXYZ」を前提とし、このループは、アドレスから26のバイトを移動させる、A1によって指されたアドレスにA2によって指さ。カウンタはd1に格納されます。ループは1で始まり(#1は10進形式の 'raw number'を示します)、毎回増加して26で終了します。 最初の行の最後にあるdo.sは、フォワードブランチのサイズつかいます。オプションでもありますが、EASy68Kでは警告が表示されます。したがって、以下のforループは、分岐条件を設定する必要がない場合にも機能します。

for d1 = #1 to #26 
    move.b (a1)+, (a2)+ 
endf 

チュートリアルについては、http://mrjester.hapisan.com/04_MC68/をおすすめします。より高度なコマンドやトピックを扱うのではなく、基本/中間レベルで何が起こっているかをよく理解しています。