- •1.1. Цель работы
- •1.2. Методы адресации
- •1.3. Команды пересылки данных
- •1.4. Контрольные вопросы
- •1.5. Задания
- •2.1. Цель работы
- •2.2. Арифметические команды
- •3.1. Цель работы
- •2.3. Контрольные вопросы
- •2.4. Задания
- •3.2. Логические команды
- •3.3. Команды работы с битовыми полями
- •3.4. Команды сдвигов
- •3.5. Контрольные вопросы
- •3.6. Задания
- •4.1. Цель работы
- •4.2. Команды передачи управления
- •4.3. Специальные команды
- •4.4. Контрольные вопросы
- •4.5. Задания
1.3. Команды пересылки данных
Простейшими командами являются команды пересылки данных. Список
этих команд приведен в табл. 1.2. Рассмотрим каждую из команд подробнее на
простых примерах.
Таблица 1.2
Команды пересылки данных
TSTA
CLRA
TAB
PSHA
TSTB
CLRB
ТВА
PULA
TST*
CLR*
TAP
PSHB
LDAA**
STAA***
ТРА
PULB
LDAB**
STAB***
TSX
PSHX
LDD**
STD***
TXS
PULX
LDX**
STX***
TSY
PSHY
LDY**
STY***
TYS
PULY
LDS**
STS***
XGDX
XGDY
Примечания:
* – команды, использующие расширенную и индексную адресацию;
** – команды, использующие непосредственную, прямую, расширенную и ин-
дексную адресацию;
*** – команды, использующие прямую, расширенную и индексную адресацию.
Команды TSTA, TSTB и TST служат для установки регистра статуса в со-
ответствии с содержимым регистра А, В или ячейки памяти соответственно.
Далее результат может быть использован в командах условного перехода. Зане-
16
сите в регистр А значение $00 и выполните в поша-
говом режиме команду TSTA. Теперь посмотрите на
содержимое регистра статуса: должен быть уста-
новлен флаг нуля (Z) и сброшены флаг
отрицательного результата (М), переноса (С) и
переполнения (V). Проведите подобный опыт при
других значениях регистра А, обращая внимание на
различное состояние регистра статуса.
Рассмотрим команды загрузки в регистр содер-
жимого ячейки памяти:
org $8000
ldab $56
;
загрузить в регистр В содержимое ячейки $56,
;
используя прямую адресацию
ldy $c800
;
загрузить в регистр Y данные, расположенные по адресу
;
$с800 (предыдущую команду)
ldx #$1f00
;
установить регистр X
ldaa $03,х
;
считать информацию
Работа команд очистки регистров А и В и ячейки
памяти может быть проиллюстрирована на примере
следующей простой программы:
org $8000
clrb
;
очистить регистр В
ldx #$1f00
;
установить регистр X
clr $04,х
;
очистить
Теперь рассмотрим работу команд модификации
ячеек памяти. Для этого введем следующую про-
грамму:
org $8000
ldd #$AA55
;
установить в регистре D значение $АА55
ldx #$1f00
;
установить регистр X
clr $04,x ;
очистить
staa $04,x ;
записать
stab $04,х ;
записать
ldaa $03,х ;
считать информацию
staa $04,х ;
записать
В результате выполнения команды TAB значение аккумулятора А будет
17
присвоено аккумулятору В. Команда ТВА имеет
противоположный эффект. Следует отметить, что
регистр статуса принимает состояние, подобное
выполнению команд STAA, STAB.
Команда
ТРА
осуществляет
перенос
содержимого регистра CCR в аккумулятор А. Это
удобно, если после выполнения какой-либо
подпрограммы необходимо сохранить состояние
регистра статуса (см. также ТАР).
Группа команд работы с регистром стека имеет одну особенность: при пе-
реносе числа из индексного регистра регистр стека получает на единицу мень-
шее значение, при обратной пересылке происходит увеличение индексного ре-
гистра. Рассмотрим эти команды подробнее:
org $8000
ldx #$220
;
занести в регистр X адрес $220
xgdx
; обмен содержимого регистров X и D
clrb
;
очистить младший байт регистра D
xgdx
; X = $200
txs
; SP = $1ff
tsy
; Y = $200
Обмен содержимого индексного регистра и регистра D, как правило, ис-
пользуется при арифметических операциях (так как арифметические команды
работы с регистром D более развиты) или в случае необходимости 8-разрядного
доступа к содержимому индексного регистра, что может быть полезно, напри-
мер, для организации кольцевого буфера.
Команда ТАР осуществляет перенос значения
регистра А в соответствующие биты регистра
статуса CCR. При этом содержимое регистра А
остается неизменным. Флаг X, служащий для
маскирования прерывания XIRQ, в результате
выполнения этой команды может быть сброшен, но он не может быть уста-
новлен, если до выполнения команды флаг был сброшен.
org $8000
ldaa #$47
;
занести в регистр А новое cодержимое регистра статуса
tap
; установить новое значение регистра статуса: заметьте,
;
что флаг X не будет установлен
Команды работы со стеком, как правило, используются в подпрограммах
для того, чтобы сохранить значение одного или более регистров.
18
Алгоритм работы команд PSH таков:
1) в ячейку памяти, на которую указывает регистр
SP, записывается младший байт регистра-операнда;
2) значение регистра SP уменьшается на 1, указы-
вая на следующую свободную ячейку в области сте-
ка;
3) в случае двухбайтного операнда последовательность (1–2) повторяется со
старшим байтом операнда.
Команды группы PUL выполняют данную последовательность в обратном
порядке, увеличивая значение регистра SP.
Следующая программа демонстрирует, каким образом можно сохранить
неизменными все внутренние регистры ОЭВМ (рекомендуется также обратить
внимание на содержимое стека):
org $8000
psha
; последовательно сохраняем регистры в стеке: А, В, X, Y, CCR
pshb
pshx
pshy
tpa
psha
ldaa #$20 ; выполняем какие-либо действия, в результате которых изменяется
ldx $12 ; содержимое регистров
ldy $1f03
clrb
xgdy
pula
;
восстанавливаем регистры: CCR, Y, X, В, А
tap
puly
pulx
pulb
pula
Следует отметить, что из-за особенностей эмуляции при выполнении про-
граммы в пошаговом режиме содержимое ячеек памяти, расположенных ниже
указателя, не сохраняется.
