ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.08.2024
Просмотров: 43
Скачиваний: 0
Отладив эту программу, уберем верхние три строчки, оставив только процедуру, и применяем команду меню «Программа – Сохранить как ПЗУ». Полученный файл (он будет иметь расширение .rom) открываем в любом текстовом редакторе (например, в Блокноте) и добавляем в начало комментарий:
; Перестановка битов R0
; в обратном порядке
;-----------------------
2E10 PUSH R1
2E20 PUSH R2
01D2 MOV 10, R2
0010
0911 XOR R1, R1
9E00 RCL 1, R0
AE01 RCR 1, R1
03D2 SUB 1, R2
0001
4D0D JNZ 000A
FFF4
0110 MOV R1, R0
3E20 POP R2
3E10 POP R1
0D00 RET
Теперь остается добавить (также в текстовом редакторе) этот фрагмент в конец файла lampanel.rom. Новая процедура будет доступна при следующем запуске программы «ЛамПанель».
Приложение Справочник по языку ассемблера «ЛамПанель»
Регистры:
R0, R1, R2, R3 – регистры общего назначения;
PC – программный счетчик;
SP – указатель стека;
PS – регистр состояния:
бит 0 – знак (бит N, negative),
бит 1 – равенство нулю (бит Z, zero)
бит 2 – бит переноса (бит C, carry).
Обозначения при описании форматов команд:
n – число в шестнадцатеричной системе счисления
Rx – некоторый регистр общего назначения
Px – некоторый порт
Метки:
Метка – это последовательность символов, заканчивающаяся двоеточием. Кроме метки, в строке не должно быть других символов.
Основные команды:
NOP – нет операции
STOP – останов
MOV Ry,Rx – пересылка Rx:=Ry
MOV n,Rx – пересылка Rx:=n
ADD Ry,Rx – сложение Rx:=Rx+Ry
ADD n,Rx – сложение Rx:=Rx+n
SUB Ry,Rx – вычитание Rx:=Rx–Ry
SUB n,Rx – вычитание Rx:=Rx–n
CMP Ry,Rx – сравнение (установка флагов по разности Rx–Ry)
CMP n,Rx – сравнение (установка флагов по разности Rx–n)
MUL Ry,Rx – умножение Rx:=Rx*Ry
MUL n,Rx – умножение Rx:=Rx*n
DIV Ry,Rx – деление Rx:=Rx div Ry
DIV n,Rx – деление Rx:=Rx div n
Логические операции:
NOT Rx – логические «НЕ» (инверсия) Rx:=not Rx
AND Ry,Rx – логическое «И» (конъюнкция) Rx:=Rx and Ry
AND n,Rx – логическое «И» (конъюнкция) Rx:=Rx and n
OR Ry,Rx – логическое «ИЛИ» (дизъюнкция) Rx:=Rx or Ry
OR n,Rx – логическое «ИЛИ» (дизъюнкция) Rx:=Rx or n
XOR Ry,Rx – «исключающее ИЛИ» Rx:=Rx xor Ry
XOR n,Rx – «исключающее ИЛИ» Rx:=Rx xor n
Сдвиги:
SHL n,Rx – логический сдвиг влево Rx:=Rx shl n
SHR n,Rx – логический сдвиг вправо Rx:=Rx shr n
SAR n,Rx – арифметический сдвиг вправо Rx:=Rx sar n
ROL n,Rx – циклический сдвиг влево Rx:=Rx rol n
ROR n,Rx – циклический сдвиг вправо Rx:=Rx ror n
RCL n,Rx – циклический сдвиг влево через перенос Rx:=Rx rcl n
RCR n,Rx – циклический сдвиг вправо через перенос Rx:=Rx rcr n
Байтовые команды:
MOVB Ry,Rx – пересылка младшего байта Rx:=Ry
MOVB n,Rx – пересылка младшего байта Rx:=n
CMPB Ry,Rx – сравнение (установка флагов по разности байтов Rx–Ry)
CMPB n,Rx – сравнение (установка флагов по разности байтов Rx–n)
SHLB n,Rx – логический сдвиг байта влево Rx:=Rx shl n
SHRB n,Rx – логический сдвиг байта вправо Rx:=Rx shr n
SARB n,Rx – арифметический сдвиг байта вправо Rx:=Rx sar n
ROLB n,Rx – циклический сдвиг байта влево Rx:=Rx rol n
RORB n,Rx – циклический сдвиг байта вправо Rx:=Rx ror n
RCLB n,Rx – циклический сдвиг байта влево через перенос Rx:=Rx rcl n
RCRB n,Rx – циклический сдвиг байта вправо через перенос Rx:=Rx rcr n
SWAPB Rx – поменять местами байты в регистре Rx
Переходы:
JMP адрес или метка – безусловный переход
JGE адрес или метка – если больше или равно
JL адрес или метка – если меньше
JNZ адрес или метка – если не нуль
JZ адрес или метка – если нуль
JLE адрес или метка – если меньше или равно
JG адрес или метка – если больше
Процедуры:
CALL адрес или метка – вызов процедуры
SYSTEM номер – вызов процедуры из ПЗУ с заданным номером
RET – возврат из процедуры
Размещение данных:
DATA число – число записывается в память как слово
DATA "строка" – символьная строка записывается в память
Работа со стеком:
PUSH Rx – сохранить в стеке регистр Rx
POP Rx – восстановить из стека регистр Rx
Работа с портами, которые управляют лампочками:
Порты: P0, P1, P2, P3, P4, P5, P6, P7. Все порты доступны на чтение и запись.
IN Py,Rx – ввод из порта Py в регистр Rx
OUT Rx,Py – вывод из регистра Rx в порт Py
Относительная адресация:
MOV @метка,Rx – записать адрес метки в регистр Rx
(Rx) – операнд находится в ячейке, адрес которой записан в регистре Rx
(Rx)+ – то же самое, но после выполнения операции значение Rx увеличивается на 2 для команды, работающей со словом, и на 1 для байтовой команды
© К.Ю. Поляков, 2010 |
http://kpolyakov.narod.ru |