2010-11-18 40 views
1

我正在嘗試編寫一個程序,它需要使用for-loop等。 我有一個可怕的時間試圖找到這樣的基本代碼的例子在其他網站上。68k大會的基本for循環?

如果有人可以請爲我提供一個簡單的for循環,甚至我應該看的指示,我會很大。如果你知道一個很好的資源爲68K初學者教程,請評論下面!

謝謝!

+0

你有一個68000處理器和一個編譯器(任何語言)嗎? – 2010-11-18 17:52:49

+0

我使用Easy68k(模擬器和編譯器)。 – Blackbinary 2010-11-18 17:54:20

回答

5

的答案,你的查詢(3結果在谷歌搜索 '68000彙編')查看here

[編輯]從鏈接

附加答案

68000有罕見(獨特?)具有獨立的地址和數據寄存器。有八個數據寄存器D0-D7和八個地址寄存器A0-A7。 A7也是堆棧指針,SP。這意味着68000彙編語言更容易遵循,因爲您可以輕鬆分辨出哪些寄存器保存了數據,哪些寄存了地址。例如,這是68000彙編來計算字的一個陣列的總和:

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

[/編輯]

+0

我已經閱讀過整個頁面(實際上我早就發現了它,就像我說過的,我已經做了一些研究),你能指出我具體指明瞭哪一部分?謝謝。 – Blackbinary 2010-11-18 18:01:33

+1

在68000基礎知識中,循環:部分是'for'循環。他們跳過集D2寄存器,但DBRA是減支不等於0,所以這將減小D2,直到它等於0 – KevinDTimm 2010-11-18 18:13:07

+0

謝謝,現在弄明白了。 – Blackbinary 2010-11-18 18:23:02

0

如EASy68K幫助引,在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都是可選的。

實踐中的一個例子。
以下代碼假定以下變量 大寫指令dc.b「ABCDEFGHIJKLMNOPQRSTUVWXYZ」,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 

這個循環移動26個字節的地址所指向的A1,該地址所指向的A2。該計數器將存儲在d1中。循環將從1開始(#1表示以十進制形式的「原始數字」),每次增加並結束於26. 第一行末尾的do.s處理前向分支的大小使用。它也是可選的,但會在EASy68K中發出警告。因此,如果您不需要設置分支條件,則下面的for循環也可以工作。

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

關於教程,我建議http://mrjester.hapisan.com/04_MC68/。它不涉及一些更高級的命令和主題,但它提供了對基本/中間級別發生的事情的良好理解。