Как указано в справке EASy68K, синтаксис цикла for в 68K выглядит следующим образом:
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/.Он не имеет отношения к некоторым более сложным командам и темам, но предлагает хорошее понимание того, что происходит на базовом / промежуточном уровне.