Вопрос

Я пытаюсь написать программу, которая требует использования для петли, среди прочего. У меня ужасное время, пытаясь найти примеры базового кода, такого как это на других сайтах.

Если кто-то мог, пожалуйста, предоставьте мне простым для цикла, или даже инструкции, которые я должен смотреть на, я буду обладать значительным. И, пожалуйста, если вы знаете хорошего ресурса для 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/ Отказ Он не имеет дело с некоторыми более продвинутыми командами и темами, но предлагает хорошее понимание того, что происходит на базовом / промежуточном уровне.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top