Программирование на Ассемблере
В процессорах MC680x0 принят такой порядок, при
котором в младших адресах содержится старшая часть слова (длинного слова).
Это означает, например, что после выполнения команды MOVE.W #$1234,$1000 по
адресу $1000 будет размещен байт $12, а по адресу $1001 - байт $34. То же
самое относится и к \"длинным\" пересылкам: например, память после выполнения
MOVE.L #$12345678,$1000 будет выглядеть так: $1000: $12
$1001: $34
$1002: $56
$1003: $78 Вернемся к способам адресации. Все приведенные примеры эквивалентны
оператору BASIC\'а MARKER%=1, где символ % показывает, что переменная MARKER
- целочисленная.
Сделаем еще один шаг и переведем оператор MARKER%=VALUE% на ассемблер.
Результат очевиден: MOVE VALUE,MARKER ...
... MARKER: DC.W 1
VALUE: DC.W 1 В данном случае содержимое переменной VALUE копируется в переменную MARKER.
С помощью этих примеров Вы уже ознакомились с некоторыми методами адресации
(доступа) к памяти. Первый метод использует, так называемый, непосредственный
операнд (со знаком #), и называется прямым (непосредственным) методом
адресации. Как уже отмечалось, непосредственным может быть только операнд
источника.
Второй рассмотренный метод - это метод абсолютной адресации, который
использует для записи операндов их абсолютные адреса (в нашем примере это
MARKER и VALUE). Абсолютная адресация может использоваться как для
операндов источника, так и для операндов приемника.
На самом деле существуют две формы абсолютной адресации, разница между
которыми обычно не играет роли для программиста. В зависимости от значения
абсолютного адреса используются длинная или короткая форма абсолютной
адресации (если адрес меньше, чем $FFFF, то используется короткая форма).
Ассемблер сам выбирает нужную форму адресации. Четвертый метод адресации, который мы использовали, называется регистровым
(команда MOVE #1,D0 использует этот метод для задания регистра D0 в
качестве операнда приемника).
|