Вопрос

Я использую 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.

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