Assembly 68k组件中环路的基本功能?

Assembly 68k组件中环路的基本功能?,assembly,for-loop,68000,Assembly,For Loop,68000,我正在尝试编写一个程序,其中需要使用for循环。 我在其他网站上寻找类似这样的基本代码的示例时,感觉很糟糕 如果有人能为我提供一个简单的for循环,或者甚至是我应该看的说明,我将非常感谢。如果您知道68k初学者教程的好资源,请在下面发表评论 谢谢 有关您的查询的答案,请参阅(谷歌搜索“68000汇编”中的第三个结果) [编辑] 从链接添加答案 68000具有罕见(独特?)的特点,即具有单独的地址和数据寄存器。有八个数据寄存器D0-D7和八个地址寄存器A0-A7。A7也是堆栈指针SP。这意味着68

我正在尝试编写一个程序,其中需要使用for循环。 我在其他网站上寻找类似这样的基本代码的示例时,感觉很糟糕

如果有人能为我提供一个简单的for循环,或者甚至是我应该看的说明,我将非常感谢。如果您知道68k初学者教程的好资源,请在下面发表评论

谢谢

有关您的查询的答案,请参阅(谷歌搜索“68000汇编”中的第三个结果)

[编辑]

从链接添加答案

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

[/edit]

如EASy68K帮助中所述,68K中for循环的语法如下:

FOR[.size] op1 = op2 TO 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
步长和.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

关于教程,我推荐。它不处理一些更高级的命令和主题,但它很好地理解了基础/中间级别正在发生的事情。

您有68000处理器和编译器(任何语言)吗?我使用的是Easy68k(模拟器和编译器)。我已经阅读了整个页面(事实上,正如我所说,我已经做了一些研究),你能具体告诉我你指的是哪一部分吗?谢谢。在68000基础中,循环:部分是一个“for”循环。他们跳过D2寄存器的集合,但DBRA是减量分支不等于0。因此这将减量D2直到它等于0。在这里有一个实际的答案以及或代替一个链接会很好。完成(请注意,D2的集合现在包括在内)@KevinDTimm nice one,+1表示现在的答案
for d1 = #1 to #26
    move.b  (a1)+, (a2)+
endf