Вопрос
Я использую Easy68k, чтобы сделать простую программу, которая включает в себя цикл While.
Предположим, что регистр A0 указывает на мои данные, которые являются словами. Почему это не работает?
MOVE.W (A0) , D3
MOVE.W (A0)+, (A0)
MOVE.W (A0) , D3
Если A0 указывает на номер 2 изначально, и после этого номер 4, результатом я хочу, заключается в том, что после того, как первый ход 2 сохраняется, после приращения и третьего движения 4 сохраняется. Тем не менее, последний ход не имеет никакого эффекта.
Решение 3
Я нашел ответ, и моя инструкция была неверной.
По сути, (A0) + будет увеличиваться реестр адреса после того, как он завершит все, что он является частью.
Я думал, что это будет сначала приращение, а затем назначить (который был логической ошибкой).
Так что все, что мне нужно сделать, это сделать:
move (A0)+,D3;
Это добавит значение в A0 до D3, а затем увеличивает A0 в следующий раз.
Другие советы
Я не уверен, если я понимаю, что вы хотите, но если я правильно, ваша команда должна быть
ADDI.L #2,A0
или
LEA (A0)+,A0
Я никоим образом не нахожусь в 68 тысяч jock, но я посмотрел на режимы адресации, и я запутался этой линией:
MOVE.W (A0)+,(A0)
Если я читаю это правильно, это копирование содержимого адреса, в котором A0 указывает на точки A0, а затем увеличивают A0 на 2, верно? Это просто приращение A0 обучение?
Или он принимает значение на A0, увеличившись A0 на 2 и напишите это значение на новый адрес? Если это так, кажется, что это будет справиться бы «2» к последовательным местам памяти на каждой итерации петли, что объяснило бы, почему D3 продолжает получать 2.