2

我正在尝试编写一个需要使用 for 循环等的程序。我很难在其他网站上找到诸如此类的基本代码示例。

如果有人可以为我提供一个简单的 for 循环,或者甚至是我应该查看的说明,我会非常感激。如果您知道 68k 初学者教程的好资源,请在下方评论!

谢谢!

4

2 回答 2

6

请参阅此处以获取您查询的答案(谷歌搜索“68000 程序集”中的第三个结果)

[编辑]

从链接添加答案

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

[/编辑]

于 2010-11-18T17:53:34.860 回答
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/。它不处理一些更高级的命令和主题,但它提供了对基本/中级级别发生的事情的良好理解。

于 2014-01-18T14:20:36.587 回答