- •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
- •Задания.
- •Контрольные вопросы.
2.2. Примеры использования команд передачи данных.
Ниже Вам предложены типовые фрагменты программ на языке ассемблера микроконтроллера MC68HC705K1. Они позволят Вам приобрести начальные навыки по использованию команд передачи данных. Исследуйте выполнение этих фрагментов, используя программу полноэкранного симулятора ICS05K. Для этого установите значение PC=200h и в режиме ASM введите последовательность команд фрагмента. Затем, если это необходимо, запишите данные в ячейки памяти (команда MM симулятора). Далее выполните программу в пошаговом режиме (команда STEP симулятора).
Пример 6.
;Программа производит запись двух констант 44h и 31h в ячейки ОЗУ с адресами 0F0h и 0E0h ;соответственно
LDA #44h ;Занести в А 44h
STA 0F0h ;Переслать содержимое А в ОЗУ по адресу 0F0h
LDA #31h ;Занести в А 31h
STA 0E0h ;Переслать содержимое А в ОЗУ по адресу 0Е0h
Пример 7.
;Программа производит действия, аналогичные примеру 6 , демонстрирует использование
;косвенной адресации.
LDX #0F0h ;Занести в X 0F0h
LDA #44h ; Занести в А 44h
STA ,X ;Переслать содержимое А в ОЗУ по адресу, хранящемуся в X
Incx ;Увеличить на 1 содержимое X
LDA #31h ; Занести в А 44h
STA ,X ; Переслать содержимое А в ОЗУ по адресу, хранящемуся в X
Пример 8.
;Программа производит выбор из таблицы констант в ПЗУ (начальный адрес таблицы 300)
;элемента с порядковым номером k (k содержится в ячейке ОЗУ с адресом 0E0h).
LDX 0E1h
LDA 300h,X
Заполните область ПЗУ, начиная с адреса 300h, произвольными числами. Запишите в ячейку ОЗУ с адресом 0E1h произвольный порядковый номер в пределах числа элементов введенной таблицы. Выполните программу и убедитесь, что происходит считывание указанного элемента.
Пример 9.
;Программа пересылает данные из трех ячеек памяти с адресами 305h,306h,307h в ОЗУ по
; адресам 0E0h, 0E1h, 0E2h
LDX #0E0h ;Загрузить в X число 0E0h
LDA 225h,X ;Загрузить в А данные из ячейки памяти с адресом
; 225h+0E0h=305h
STA ,X ;Записать данные по адресу 0E0h
LDX #0E1h ;
LDA 225h,X ;
STA ,X ;
LDX #0E2h ;
LDA 225h,X ;
STA ,X ;
Пример 10.
;Программа производит те же действия, что и в примере 9, но с использованием косвенной ;адресации.
LDX #0E0h ; Загрузить в X число 0E0h
LDA 225h,X ; Загрузить в А данные из ячейки памяти с адресом
; 225h+0E0h=305h
STA ,X ;
Incx ; Увеличить содержимое X на 1
LDA 225h,X ;
STA ,X ;
INCX ;
LDA 225h,X ;
STA ,X ;
В примере 11 впервые использована команда условного перехода и впервые организована конструкция цикла. Индексный регистр Xв каждом цикле уменьшается на 1 и формирует признак отрицательного результатаN. КомандаBPL (перейти, если число положительное или равно 0) анализирует признакN и производит переход по меткеLOOP, если признак равен 0.
При вводе текста программы в режиме ASMне вводите метку (LOOP:), а в командеBPLвместо символьного обозначения метки вычислите численное значение смещения.
Пример 11.
;Программа производит те же действия, что и в примере 9 и 10, но с использованием
;конструкции цикла.
LDX #02h ; Загрузить в X число 02h
LOOP: LDA 305h,X ; Загрузить в А данные из ячейки памяти с адресом
; 305h+02h=307h
STA 0E0h,X ;Записать в ОЗУ по адресу 0E0h+2=0E2h
DECX ;Уменьшить X на 1
BPL LOOP ;Перейти по метке, если X не отрицательный.
Ниже в примере 12 приведена программа, которая должна выполнять те же действия, что и в примере 11. Эта программа использует другую команду условного перехода. Объясните сразу или исследуйте, в чем допущена ошибка.
Пример 12.
;Программа производит те же действия, что и в примере 11, но в тексте
;допущена ошибка.
LDX #02h ; Загрузить в X число 02h
LOOP: LDA 305h,X ; Загрузить в А данные из ячейки памяти с адресом
; 305h+02h=307h
STA 0E0h,X ;Записать в ОЗУ по адресу 0E0h+2=0E2h
DECX ;Уменьшить X на 1
BNE LOOP ;Перейти по метке, если X не отрицательный.