Основной для петли в 68 тыс.
Вопрос
Я пытаюсь написать программу, которая требует использования для петли, среди прочего. У меня ужасное время, пытаясь найти примеры базового кода, такого как это на других сайтах.
Если кто-то мог, пожалуйста, предоставьте мне простым для цикла, или даже инструкции, которые я должен смотреть на, я буду обладать значительным. И, пожалуйста, если вы знаете хорошего ресурса для 68K начинающих учебников, комментарий ниже!
Спасибо!
Решение
Видеть здесь Для ответа на ваш запрос (3-й результат в Google Search '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
/редактировать
Другие советы
Как указано в Heash68k Help, синтаксис для цикла для цикла в 68К следующий:
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. Дел в конце первой строки сделки с размером форвардной ветви для использования Отказ Это также необязательно, но бросает предупреждение в Easy68k. Следовательно, приведенная ниже цикла также будет работать, если вам не нужно устанавливать состояние ветвления.
for d1 = #1 to #26
move.b (a1)+, (a2)+
endf
Относительно учебного пособия, я рекомендую http://mrjester.hapisan.com/04_mc68/ Отказ Он не имеет дело с некоторыми более продвинутыми командами и темами, но предлагает хорошее понимание того, что происходит на базовом / промежуточном уровне.