16-ти разрядный регистр
|
Младший разряд
|
Старший разряд
|
X
|
R26
|
R27
|
Y
|
R28
|
R29
|
Z
|
R30
|
R31
|
|
РОН
|
·
Перед
использованием команды LD
адрес ячейки ОЗУ должен быть предварительно записан в соответствующий регистр,
который используется в команде.
·
Для
прямой адресации данных из РОНов в ОЗУ используем команду STS
n, Rr
, где n – адрес ячейки ОЗУ.
·
Для
косвенной адресации данных из РОНов в ОЗУ используем команду
ST
X, Rr ;
ST
Y, Rr ;
ST
Z, Rr
.
·
Адрес
ячейки ОЗУ должен быть предварительно записан в один из регистров X,
Y, или Z.
·
Для
выполнения операции сложения используем команду ADD
Ra, Rb
, где a, b
– номера регистров, где хранятся операнды (a=0…31,
b=0…31). Результат будет записан в
регистр Ra.
·
Для
уменьшения содержимого регистра на единицу используем команду DEC
Rr .
·
Для
выполнения требуемой в задании операции сравнения используем команду CPSE
Ra, Rb
.
·
Команда
сравнивает содержимое регистров Ra,
Rb, и в случае равенства пропускает
следующую команду.
·
Для
вызова подпрограммы используем команду CALL
.
·
Для
выхода из подпрограммы и возврата в программу используем команду RET
.
·
В
подпрограмме для сохранения содержимого регистра Rr
в стеке используем команду PUSH
Rr .
·
Для
извлечения из стека в регистр Rr
используем команду POP
Rr.
·
При
этом учитываем то, что данные должны извлекаться из стека в порядке, обратном
загрузке – «последний вошел – первый вышел».
·
Для
«зацикливания» программы используем команду RJMP.
Текст программы.
Инициализация
указателя стека:
Адрес
стека 10F1, для его задания в
регистр SPL помещаем младший байт
; F6, в регистр SPH
– старший 10.
·
LDI
R20, $F1
; загрузка регистра R20 младшим
байтом адреса начала стека
·
OUT
SPL, R20
; загрузка младшего байта указателя стека из регистра
·
LDI
R20, $10 ; загрузка регистра R20
старшим байтом адреса начала стека
·
OUT
SPH, R20
; загрузка старшего байта указателя стека из регистра
Выполнение
сложения чисел 17, 5 и 67:
·
LDI
R17, $17 ; загрузка регистра R16
числом 17
·
LDI
R18, $5 ; загрузка регистра R17
числом 5
·
LDI
R19, $67 ; загрузка регистра R18
числом 67
·
ADD
R17, R18;
суммирование содержимого регистров R17,
R18
·
ADD
R17, R19
; суммирование содержимого регистров R17,
R19
·
DEC
R17 ; уменьшение на единицу
содержимого регистра R17
·
LDI
R30, $41 ;
·
LDI
R31, $00 ;
·
ST
Z , R17
; загрузка ячейки ОЗУс адресом 0075 значением из регистра R17
Загрузка
ячеек ОЗУ 0043 и 0044 числами 76 и 65 соответственно:
·
LDI
R20, $76 ; загрузка регистра R19
числом 76
·
LDI
R21, $65 ; загрузка регистра R20
числом 65
Загрузка в регистровую
пару X адреса ячейки ОЗУ
0043:
·
LDI
R26, $43
·
LDI
R27, $00
Загрузка
в регистровую пару Y адреса ячейки
ОЗУ 0044:
·
LDI
R28, $44
·
LDI
R29, $00
·
ST
X, R20
; загрузка ячейки ОЗУ с адресом 0043 значением из регистра R20
·
ST
Y, R21
; загрузка ячейки ОЗУ с адресом 0064 значением из регистра R21
·
LDI
R16, $12 ; загрузка регистра R16
числом 12
·
CALL
ROUT ; вызов подпрограммы ROUT
Зацикливание
программы:
·
LOOP:
·
RJMP
LOOP
ПОДПРОГРАММА:
·
ROUT:
Сохранение
указателя X в стеке:
·
PUSH
R26
Cохранение
указателя Y в стеке:
·
PUSH
R28
·
PUSH
R29
·
LDS
R16, $0045 ; загрузка регистра R16
содержимым ячейки ОЗУ с адресом 0045
·
LDS
R17, $0043 ; загрузка регистра R17
содержимым ячейки ОЗУ с адресом 0043
Загрузка
в регистровую пару X адреса ячейки
ОЗУ 0065:
·
CPSE
R16, R17
; пропустить следующую команду, если значения регистров R16
и R17 равны
·
INC
R16 ; увеличить содержимое регистра R16
на единицу
Извлечение
сохраненных данных из стека и замена содержимого указательных регистров:
Извлечение
сохраненного содержимого Y
в X:
·
POP
R27
·
POP
R26
Извлечение
сохраненного содержимого X
в Y:
·
POP
R29
·
POP
R28
·
RET ; возврат из
подпрограммы.
Литература
1.
Яманов
Д.Н., Жаворонков С.С. Микропроцессорные устройства РЭО. Пособие по изучению
дисциплины и выполнению контрольных работ. – М.: МГТУ ГА, 2008. – 24 с.
2.
Калабеков
Б.А. Микропроцессоры и их применение в системах передачи и обработки сигналов:
Учебное пособие для вузов. – М.: Радио и связь, 1988. – 368 с.