68k组装中的基本for循环?

时间:2010-11-18 17:48:54

标签: assembly for-loop 68000

我正在尝试编写一个需要使用for循环的程序。 我正在努力寻找其他网站上的基本代码示例。

如果有人可以请我提供一个简单的for循环,或者甚至是我应该看的说明我会很高兴。如果您知道68k初学者教程的良好资源,请在下面发表评论!

谢谢!

2 个答案:

答案 0 :(得分:5)

请参阅here以获取查询答案(谷歌搜索'68000汇编'中的第3个结果)

[edit]

从链接添加答案

68000具有罕见的(独特的?)特性,具有独立的地址和数据寄存器。有8个数据寄存器,D0-D7和8个地址寄存器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

[/编辑]

答案 1 :(得分: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

此循环从a1指向的地址移动26个字节到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/。它不涉及一些更高级的命令和主题,但它提供了对基本/中级水平发生情况的良好理解。