我正在尝试编写一个需要使用 for 循环等的程序。我很难在其他网站上找到诸如此类的基本代码示例。
如果有人可以为我提供一个简单的 for 循环,或者甚至是我应该查看的说明,我会非常感激。如果您知道 68k 初学者教程的好资源,请在下方评论!
谢谢!
请参阅此处以获取您查询的答案(谷歌搜索“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
[/编辑]
如 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/。它不处理一些更高级的命令和主题,但它提供了对基本/中级级别发生的事情的良好理解。