
- •Лабораторная работа n2.
- •1.1 Центральный процессор.
- •1.2. Карта памяти. Назначение регистров.
- •Регистр конфигурации (option).
- •Регистры данных портов (dRn) и установки направления передачи данных (ddRn).
- •Регистры управления (scr), состояния (ssr) и данных (sdr) порта последовательного интерфейса.
- •Регистры сброса (coprst) и управления сбросом (copcr).
- •1.3. Методы адресации.
- •1.4 Команды пересылки данных.
- •1.5. Команды передачи управления.
- •2. Практическая часть1.
- •2.1. Команды пересылки данных.
- •Команды загрузки регистров а и х данными из памяти.
- •Команды модификации памяти.
- •Команды межрегистровой пересылки.
- •Команды условного перехода.
- •Команды работы с подпрограммами.
- •Команда установки указателя стека в стандартное состояние.
- •Контрольные вопросы.
- •Задания.
2. Практическая часть1.
2.1. Команды пересылки данных.
В этом параграфе будут рассмотрены команды пересылки данных. Предлагаемая последовательность изучения:
·команды загрузки регистровАиХданными из памяти
·команды модификации памяти
·команды межрегистровой пересылки
·команды обнуления регистров и ячеек памяти
Также здесь будут приведены примеры различных типов адресации.
Команды загрузки регистров а и х данными из памяти.
1. Исследуем работу команды LDAна элементарном примере, начинающем практически все учебники по языку ассемблер:
0100 LDA #$01занести в аккумулятор значение$01:
непосредственная адресация
Занесите в регистр Азначение$EFкомандойRM. Выполните программу директивой терминалаT 1, предварительно установив в счетчике команд значение$0100. Убедитесь, что в регистрАзанесено значение$01. Заметьте, что флаговый регистр установлен в следующее состояние:
С=E8 111.I...
2. Проведем похожий эксперимент с командой LDX:
0100 LDX $50,Xзанести вXзначение ячейки
памяти $50+X(индексная адресация с8
битовым смещением)
Занесите в ячейки памяти $50-$55значения{$01, $45, $A3, $00, $56, $F6}. Выполните программу несколько раз, занося в регистрХзначения от$00до$05. Убедитесь в том, чтоХбудут присваиваться значения, соответствующие элементам последовательности. При этом флаговый регистр будет также изменяться в соответствии с таблицей:
-
$01
C=E8 111.I...
$45
C=E8 111.I...
$A3
C=EC 111.IN..
$00
C=EA 111.I.Z.
$56
C=E8 111.I...
$F6
C=EC 111.IN..
Команды модификации памяти.
1. Покажем, каким образом можно произвести запись в 5-йэлемент массива, расположенного начиная с адреса$80.
0100 STA $80,X в ячейку$80+Xзаносится содержимое
аккумулятора (индексная адресация с 8
битовым смещением)
В регистр Хзанесите$04, в регистрА-$87. Выполнив программу, убедитесь, что в5-омэлементе массива находится$87. Регистр флагов содержит$EC.
2. Чтобы убедиться в невозможности записи в ППЗУ, проиллюстрируем запись индексного регистра в ППЗУ:
0100 STX $0248попытка записи содержимого регистраХ
в ячейку $0248(ППЗУ) (использована
индексная адресация с 16-тибитовым
смещением)
Выполните программу. Убедитесь, что содержимое ячейки памяти не изменилось, но изменился флаговый регистр. Это приводит нас к выводу о том, что подобные команды можно использовать для выставления флагов.
Команды межрегистровой пересылки.
1. Покажем работу пересылки регистра Ав индексный регистр на примере:
0100 TAX пересылка регистраАв регистрХ
(неявная адресация)
Занесите в регистр Азначение$89. После выполнения программы убедитесь, что в регистреХпоявилось число$89, а регистр признаков не изменился.
2. Иллюстрацию команды TXAпроизведем на следующем примере:
0100 TXA А=Х
Измените число в регистре Хтаким образом, чтобы оно было отлично от числа в регистреА.Выполните программу. Убедитесь, что содержимое регистраАсоответствует введенному Вами числу, при этом заметьте, что флаговый регистр установлен в соответствии со значением регистраХ.
Команды обнуления регистров и ячеек памяти.
1. Продемонстрируем работу команды CLRAна простом примере:
0100 CLRA обнуление аккумулятора: неявная
адресация
Занесите в аккумулятор произвольное значение. Выполнив программу, убедитесь, что в аккумуляторе находится нуль, а в регистре Сустановлен флагZ.
2. Покажем, что аналогичным образом можно обнулить регистр Х:
0100 CLRX Х=$00
3. Иллюстрацию обнуления ячеек памяти проведем на примере:
0100 CLR $88обнуление ячейки$88: прямая адресация
Занесите в ячейку $88значение отличное от нуля. выполните программу. Посмотрите, что находится по адресу$88.
2.2. Команды передачи управления.
В этом параграфе мы ознакомимся с командами передачи управления. Команды передачи управления удобно разделить на два класса по способам адресации и на три группы по функциональным возможностям. Изучение проведем в следующей последовательности:
·отличие команд классаJUMPот команд классаBRANCH;
·команды условного перехода;
·команды работы с подпрограммами.
Отличие команд класса JUMP от команд класса BRANCH.
Покажем важное качественное отличие команд класса JUMP(на примере типичного представителя - команде безусловного переходаJMP) от команд класса BRANCH на следующих примерах:
0100 JMP $0500 команда классаJUMP: расширенная
адресация
Нетрудно заметить, что ассемблер принял эту команду без сообщения об ошибке (заметьте: длина кода - 3байта). Выполните программу. Убедитесь, что вРСнаходится$0500. Это означает, что произошел переход. Однако если Вы попытаетесь осуществить подобный переход командойBRANCH, Вам будет выдано сообщение об ошибке уже при вводе команды, т.к. будут нарушены пределы адресации. Попробуйте набрать:
0100 BRA $0500 команда классаBRANCH: относительная
адресация
и Вы убедитесь в справедливости сказанного. Кроме расширенной адресации команды класса JUMPмогут использовать прямую и все типы индексной:
0100 JMP $50 прямая адресация (2байта):PC=$50
0102 JMP ,X индексная адресация без смещения
(1байт):PC=(X)
0103 JMP $EE,X индексная адресация с8-мибитовым
смещением (2байта):PC=$EE+(X)
0105 JMP $3E95,X индексная адресация с16-тибитовым
смещением (3байта):PC=$3E95+(X)
Выполните каждую команду приведенной выше программы (по отдельности!). Посмотрите, куда происходит переход и, в последних трех случаях, как это связано с содержимым индексного регистра.