- •1. Теоретическая часть.
- •1.1.Форматы команд.
- •1.2.Способы адресации.
- •Неявная адресация.
- •Непосредственная адресация.
- •Прямая адресация.
- •Прямая расширенная адресация.
- •Косвенная адресация.
- •Пример выполнения команды с косвенной адресацией:
- •Индексная адресация со смещением 1 байт.
- •Пример выполнения команды с индексной адресацией со смещением 1 байт:
- •Индексная адресация со смещением 2 байта.
- •Пример выполнения команды с индексной адресацией со смещением 2 байта:
- •Относительная адресация.
- •1.3. Группа команд передачи данных.
- •200 Lda #44h ; Загрузить в a число 44h
- •Программа с ветвлением
- •2. Практическая часть.
- •2.1. Исследование отдельных команд.
- •Команды загрузки регистров а и х данными из памяти.
- •Команды модификации памяти.
- •Команды межрегистровой пересылки.
- •Команды передачи управления.
- •2.2. Примеры использования команд передачи данных.
- •Incx ;Увеличить на 1 содержимое X
- •Incx ; Увеличить содержимое X на 1
- •Задания.
- •Контрольные вопросы.
Пример выполнения команды с индексной адресацией со смещением 1 байт:
До операции:
A = 95h
X = 09h ; В ячейке памяти с адресом 89h записан код 0A8h.
После операции:
A = 0A8h
X = 09h ; В ячейке памяти с адресом 89h записан код 0A8h.
Индексная адресация со смещением 2 байта.
Команды с данным типом адресации имеют длину 3 байта. Первый байт содержит код операции, а второй и третий байты - двухбайтовую беззнаковую численную константу (двухбайтовый базовый адрес). В определении адреса операнда участвует индексный регистр Х, который содержит однобайтовый код смещения адреса (индекс смещения). Центральный процессор вычисляет адрес операнда путем беззнакового сложения двухбайтового базового адреса с однобайтовым индексом смещения. После сложения адрес операнда представляется в двухбайтовом формате. Диапазон возможных адресов операнда при этом способе адресации 0000h ¸0FFFh. Условное обозначение адреса в мнемонике команды совпадает с аналогичным для команд с индексной адресацией со смещением в 1 байт: LDA opr, X.
Например:
LDA 0200h, X ; Переслать в А содержимое ячейки памяти,
; адрес которой вычисляется по правилу: ADR=0200h+(X).
; A <---- (M)
Пример 3.
Пример выполнения команды с индексной адресацией со смещением 2 байта:
До операции
A = 0A0h
X = 0Bh ; В ячейке памяти с адресом 020Bh записан код 3Ah
После операции
В А пересылаются данные из ячейки памяти с адресом 0200h + 0Bh = 020Bh.
A = 3Ah
X = 0Bh ; В ячейке памяти с адресом 020Bh записан код 3Ah.
Мнемонические обозначения команд с индексной адресацией со смещениями 1 и 2 байта совпадают. Однако не следует беспокоиться об этом при написании программы. При трансляции программа Ассемблер самостоятельно подставит код необходимой операции, проанализировав численное значение адреса opr.
Относительная адресация.
Относительная адресация используется только в командах условных переходов, которые используются для организации ветвления программ. Команды условных переходов имеют двухбайтовый формат. Первый байт содержит код операции, а второй - смещение адреса следующей команды относительно адреса текущей команды в целочисленном формате со знаком. Диапазон возможных кодов смещения: от -128 до +128.
Если условие, заданное типом используемой команды условного перехода выполняется, то адрес следующей команды центральный процессор вычисляет путем сложения текущего адреса с кодом смещения. Если условие не выполняется, то микроконтроллер переходит к выполнению следующей команды.
При написании программ нет необходимости вычислять абсолютные коды смещения для команд условного перехода. Достаточно указать лишь метку, численное значение кода смещения вычислит программа Ассемблер.
1.3. Группа команд передачи данных.
Команды передачи данных осуществляют перемещение байтов данных между ячейками памяти, аккумулятором Aи индексным регистром X. Типы инструкций данной группы приведены в табл 1.
Таблица 1. Команды передачи данных.
Мнемокод |
Выполняемое действие |
Полное название |
LDA |
Переслать в А содержимое ячейки памяти |
Load Accumulator with Memory Byte |
LDX |
Переслать в регистр Х содержимое ячейки памяти |
Load Index Register with Memory Byte |
STA |
Запомнить содержимое аккумулятора А в ячейке памяти |
Store Accumulator in Memory |
STX |
Запомнить содержимое индексного регистра в ячейке памяти |
Store Index Register in Memory |
TAX |
Переслать содержимое А в индексный регистр |
Transfer Accumulator to Index Register |
TXA |
Переслать содержимое индексного регистра в А |
Transfer Index Register to Accumulator |
Каждая из первых четырех команд может использовать 6 способов адресации. Поскольку на данном занятии Вам необходимо свободно освоить формы записи команд с различными способами адресации, то в табл. 2 приведен полный список инструкций передачи данных.
Таблица 2. Полный список инструкций передачиданных.
Мнемокод |
Выполняемое действие |
Способ |
Флаги | ||
|
|
адресации |
C |
Z |
N |
LDA #opr LDA opr LDA opr
LDA ,x
LDA opr,x
LDA opr,x
|
Загрузить в А число opr. Загрузить в А число из ячейки памяти с адресом opr. Загрузить в А число из ячейки памяти с адресом opr.
Загрузить в А число из ячейки памяти, адрес которой хранится в регистре X.. Загрузить в А число из ячейки памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. Загрузить в А число из ячейки памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. |
непосредственная прямая прямая расширенная косвенная
индексная с базой 8 бит индексная с базой 16 бит |
- - -
-
-
- |
|
|
LDX #opr LDX opr LDX opr
LDX ,x
LDX opr,x
LDX opr,x
|
Загрузить в X число opr. Загрузить в X число из ячейки памяти с адресом opr. Загрузить в X число из ячейки памяти с адресом opr.
Загрузить в X число из ячейки памяти, адрес которой хранится в регистре X.. Загрузить в X число из ячейки памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. Загрузить в X число из ячейки памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. |
непосредственная прямая прямая расширенная косвенная
индексная с базой 8 бит индексная с базой 16 бит |
- - -
-
-
- |
|
|
STA opr
STA opr
STA ,x
STA opr,x
STA opr,x
|
Запомнить содержимое А в ячейке памяти с адресом opr. Запомнить содержимое А в ячейке памяти с адресом opr. Запомнить содержимое А в ячейке памяти, адрес которой хранится в регистре X.. Запомнить содержимое А в ячейке памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. Запомнить содержимое А в ячейке памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. |
прямая
прямая расширенная косвенная
индексная с базой 8 бит индексная с базой 16 бит |
-
-
-
-
- |
|
|
STX opr
STX opr
STX ,x
STX opr,x
STX opr,x
|
Запомнить содержимое X в ячейке памяти с адресом opr. Запомнить содержимое X в ячейке памяти с адресом opr. Запомнить содержимое X в ячейке памяти, адрес которой хранится в регистре X.. Запомнить содержимое X в ячейке памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. Запомнить содержимое X в ячейке памяти, адрес которой вычисляется по правилу: ADR= opr+ X.. |
прямая
прямая расширенная косвенная
индексная с базой 8 бит индексная с базой 16 бит |
-
-
-
-
- |
|
|
TAX |
Переслать содержимое А в индексный регистр X |
Непосредственная |
- |
- |
- |
TXA |
Переслать содержимое индексного регистра Xв А |
Непосредственная |
- |
- |
- |
Следует отметить, что первые 4 команды модифицируют флаг нулевого результата и флаг отрицательного результата. Последние 2 команды не влияют на признаки.
Бит N в CCR устанавливается, если установлен старший бит аккумулятора B7, в противном случае сбрасывается. Бит Z в CCR установлен, если в аккумуляторе $00, иначе сброшен.
Ниже приведена короткая программа, которая загружает числа 44h и 31h в ячейки ОЗУ с адресами 0F0h и 0E0h соответственно.
Пример 4.