Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
16.04.2013
Размер:
240.13 Кб
Скачать

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)

Выполните каждую команду приведенной выше программы (но поотдельности!). Посмотрите куда происходит переход и, в последних трех случаях, как это связано с содержимым индексного регистра.

Соседние файлы в папке Motorola - Описание лаб