Базовый цикл for в сборке 68k? - PullRequest
1 голос
/ 18 ноября 2010

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

Если бы кто-то мог предоставить мне простой цикл for или даже инструкции, на которые я должен смотреть, я быпризнательна.И, пожалуйста, если вы знаете хороший ресурс для учебников по 68k для начинающих, прокомментируйте ниже!

Спасибо!

Ответы [ 2 ]

5 голосов
/ 18 ноября 2010

См. здесь для ответа на ваш запрос (3-й результат в поиске Google '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]

0 голосов
/ 18 января 2014

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

...