Программирование на Ассемблере
п 2.2). Того же результата можно добиться и с помощью команды MOVE: MOVE.L A0,A1
ADD.L D0,A1
ADDQ.L #1,A1, только в этом случае мы имеем на две команды больше. Как Вы можете видеть,
команда LEA дает весьма интересные возможности.
Аналогичные возможности дает и команда PEA, которая записывает адрес своего
операнда в стек. При этом действуют те же ограничения на методы адресации,
что и в случае LEA. Команды LINK и UNLK служат для упрощения организации локального стека в
пользовательских функциях. Часто локальные (временные) параметры хранят в
стеке, используя некоторый адресный регистр как указатель на начало области
параметров (эта область называется фреймом (frame)). При помощи команды
LINK можно выделить фрейм для локальных переменных в стеке. Пусть,
например, начальное значение SP равно $1000, а A0=$12345678. Тогда по
команде LINK A0,#-4 произойдет следующее: содержимое A0 запишется в стек,
в A0 запишется содержимое SP, а сам SP уменьшится на 4. В результате стек
будет выглядеть так: SP --> $0FFC (B): ???
$0FFE (A): ???
A0 --> $1000 : $12345678 SP, как обычно, указывает на последнее слово стека, а в A0 хранится прежнее
содержимое SP. Доступ к переменным в этом случае может осуществляться
через регистр A0. Например, для копирования значения A в B используется
команда MOVE -2(A0),-4(А0). Для освобождения фрейма используется команда UNLK, которая работает так:
сначала в SP копируется содержимое A0, а затем из стека восстанавливается
прежнее содержимое A0. Команда MOVEM используется в основном для сохранения (восстановления)
некоторого набора регистров в стеке (из стека). Например, команда MOVEM.L D0-D7/A0-A6,-(SP) записывает содержимое всех регистров (кроме A7) в стек, а команда MOVE.L (SP)+,D0-D7/A0-A6 восстанавливает значения регистров из стека. В общем случае операнд Regs
задает список регистров для пересылки: отдельные регистры записываются
через разделитель \'/\', а диапазоны регистров - через \'-\' (например, запись
D0/D2-D4/A0-A3 эквивалентна D0/D2/D3/D4/A0/A1/A2/A3). Команда MOVEM может иметь размер .W или .L.
|