Режимы адресации 68k ASM - PullRequest
1 голос
/ 25 марта 2019

Я изучил 68k / Coldfire в Uni, и мне было трудно понять более сложные режимы адресации (с числами в скобках разыменования).

Я думаю, что здесь лучший пример:

A) lea:
A1) lea $5(a1,a2.l), a0
A2) lea -1(a1,a2), a0

B) move:
B1) move.b 1(a1),d0
B2) move.b -2(a1),d0

Может ли кто-нибудь объяснить, простыми словами, что происходит в каждой инструкции?

Пожалуйста, уточните больше, если необходимо (до / после увеличения и т. Д.).

Спасибо !! ;)

1 Ответ

6 голосов
/ 25 марта 2019

Инструкция по применению:

  • A1) A0 будет установлен на A1 + A2 + 5
  • A2) A0 сделает ставку на A1 + A2-1

Как следует из названия инструкций по выводу, оно используется для загрузки адреса в регистр адресов. Это не будет перемещать данные из косвенной адресации. Я не проверял, действительны ли эти инструкции, и мои 68k навыки теперь довольно ржавые, поэтому я предполагаю, что это так. Отсутствие указания ширины регистра индекса в A2 приводит к неоднозначности. Сверху я не могу вспомнить, была ли ширина по умолчанию для регистров по умолчанию здесь .W или .L, так что указание этого может быть хорошей идеей.

Инструкции по перемещению объявления:

  • B1) D0 будет установлен на байт, который следует сразу за адресом, сохраненным в A1. Например. если для A1 задано значение $ 1000, то считывается байт по адресу $ 1001.
  • B2) Как и в B1, но содержимое будет прочитано с 2 байтов перед адресом A1. Снова предполагая, что A1 будет предварительно загружен с $ 1000, будет прочитан байт в местоположении $ FFE.

Для полноты, режимы адресации:

  • A1) Регистрация косвенного с указателем и смещением
  • A2) dito
  • B1) Регистрация косвенного смещения
  • B2) Дито
...