Как обновить адресный реестр? - PullRequest
1 голос
/ 19 ноября 2010

Я использую Easy68k для создания простой программы, которая включает цикл while.

Предположим, что регистр A0 указывает на мои данные, которые являются словами.Почему это не работает?

 MOVE.W (A0) ,  D3  
 MOVE.W (A0)+, (A0) 
 MOVE.W (A0) ,  D3

Если A0 изначально указывает на число 2, а после этого на число 4, я хочу получить результат: после первого хода 2 сохраняется, после увеличения и третьего хода 4 сохраняется,Однако последний ход не имеет никакого эффекта.

Ответы [ 3 ]

2 голосов
/ 19 ноября 2010

Я не уверен, понял ли я то, что вы хотите, но если я прав, ваша инструкция по секрету должна быть

  ADDI.L #2,A0

или

  LEA (A0)+,A0
0 голосов
/ 19 ноября 2010

Я нашел ответ, и моя инструкция была неверной.

Как правило, (A0) + увеличивает адресный регистр ПОСЛЕ того, как он завершает любую инструкцию, частью которой он является.

Я думал, что сначала он будет увеличиваться, а затем присваиваться (что также было логической ошибкой).

Так что все, что мне нужно сделать, это:

move (A0)+,D3;

это добавит значение в A0 к D3 и затем увеличит A0 в следующий раз.

0 голосов
/ 19 ноября 2010

Я ни в коем случае не джокер 68k, но я посмотрел режимы адресации, и я запутался в этой строке:

MOVE.W  (A0)+,(A0) 

Если я читаю это право, оно копирует содержимое адреса, где A0 указывает на A0, а затем увеличивает A0 на 2, верно? Это просто инструкция приращения A0?

Или оно принимает значение в A0, увеличивает A0 на 2 и записывает это значение в новый адрес? если это так, кажется, что это было бы путем копирования «2» в последовательные ячейки памяти на каждой итерации цикла, что объясняет, почему D3 продолжает получать 2.

...