我正在嘗試編寫一個程序,它需要使用for-loop等。 我有一個可怕的時間試圖找到這樣的基本代碼的例子在其他網站上。68k大會的基本for循環?
如果有人可以請爲我提供一個簡單的for循環,甚至我應該看的指示,我會很大。如果你知道一個很好的資源爲68K初學者教程,請評論下面!
謝謝!
我正在嘗試編寫一個程序,它需要使用for-loop等。 我有一個可怕的時間試圖找到這樣的基本代碼的例子在其他網站上。68k大會的基本for循環?
如果有人可以請爲我提供一個簡單的for循環,甚至我應該看的指示,我會很大。如果你知道一個很好的資源爲68K初學者教程,請評論下面!
謝謝!
的答案,你的查詢(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
[/編輯]
我已經閱讀過整個頁面(實際上我早就發現了它,就像我說過的,我已經做了一些研究),你能指出我具體指明瞭哪一部分?謝謝。 – Blackbinary 2010-11-18 18:01:33
在68000基礎知識中,循環:部分是'for'循環。他們跳過集D2寄存器,但DBRA是減支不等於0,所以這將減小D2,直到它等於0 – KevinDTimm 2010-11-18 18:13:07
謝謝,現在弄明白了。 – Blackbinary 2010-11-18 18:23:02
如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/。它不涉及一些更高級的命令和主題,但它提供了對基本/中間級別發生的事情的良好理解。
你有一個68000處理器和一個編譯器(任何語言)嗎? – 2010-11-18 17:52:49
我使用Easy68k(模擬器和編譯器)。 – Blackbinary 2010-11-18 17:54:20