ГЛАВА 26
ИСПОЛЬЗОВАНИЕ МАШИННЫХ КОДОВ
Краткое содержание: USR с числовым аргументом.
Эта глава описывает применение машинных команд микропроцессора
Z80.
Программы в машинных кодах пишут обычно на Ассемблере с последу-
ющей трансляцией (перечень мнемокодов команд микропроцессора Z80
приведён в приложении А). Транслятор с Ассемблера встроен в компьютер
ZX Spectrum.
Приведём пример программы:
ID ВС,99
RET
которая загружает в ,'ВС' регистр число 99. Эта программа будет
транслироваться в 4-х байтный машинный код:
байты 1,99,0 для ID ВС, 99 и
201 для RET.
Следующим шагом является загрузка программы в компьютер. Для этого
используется дополнительная память, получаемая между BASIC-областью и
областью определяемых пользователем символов. Допустим Вы имели сле-
дующее распределение последней части ОЗУ:
Для загрузки программы в машинных кодах Вы можете выполнить следу-
ющую BASIC-программу:
10 LET а=32500
20 READ п. РОКЕ а,п
30 LET а=а+1: GO ТО 20
40 DATA 1,99,0,201
(программа может завершиться с сообщенем "Е Out of DATA ... ", если
переполняются отведённые Вами 4 байта).
Для выполнения загруженных машинных кодов используется функция
USR, но с числовым аргументом, определяющим начальный адрес.
Если Вы выполните:
PRINT USR 32500
то получите ответ: 99.
Возврат в BASIC-программу осуществляется обычным образом по ко-
манде микропроцессора RtT. В машинной программе Вы не должны исполь-
зовать регистры IV и I.
Вы можете записать Вашу программу на ленту:
SAVE "name" CODE 32500,4
Можно записать эту программу и так, что она будет автоматически вы-
полняться после загрузки:
10 LOAD "" CODE 32500,4
20 PRINT USR 32500
для чего надо сделать:
SAVE "name" LINE 10
а затем:
SAVE "name 1" CODE 32500,4
LOAD "name"
Это приведёт к тому, что вначале будет загружена и автоматически вы-
полнена BASIC-программа, которая, в свою очередь, загрузит и выполнит
программу в машинных кодах.
Книга «Искусство схемотехники» П. Хорвиц, У* Хилл.
Мир, 1986, том 2, стр. 579-580.
Далее приводятся 78 команд микропроцессора 8085, совместимых с
микропроцессором Z80.
Мнемоника |
Действие |
* КОП |
ЦИКЛЫ |
1 |
2 |
3 |
4 |
ПЕРЕСЫЛКА, ЗАГРУЗКА, ЗАПИСЬ |
MOV R.R |
Переслать регистр в регистр |
01RRRRRR |
4|71 |
MVI R,D |
Переслать непосредственно в регистр |
OORRRHO |
7|101 |
LXI RP,DD |
Загрузить непосредственно в два регистра |
00РР0001 |
10 |
STAXB |
Запомнить А косвенно по ВС |
0000 0010 |
7 |
STAXD |
Запомнить А косвенно по DE |
0001 0010 |
7 |
LDAXB |
Загрузить А косвенно по ВС |
0000 1010 |
7, |
LDAXD |
Загрузить А косвенно по DE |
0001 1010 |
7 |
STADD |
Запомнить А по адресу DD |
0011 0010 |
13 |
LDA DD |
Загрузить А по адресу DD |
ООП 1010 |
13 |
SHLD DD |
Запомнить H,L по адресу DD |
0010 0010 |
16 |
LHLDDD |
Загрузить H,L по адресу DD |
0010 1010 |
16 |
XCHG |
Обменять DE и HL |
1110 1011 |
4 |
ПРИРАЩЕНИЕ И УМЕНЬШЕНИЕ |
INRRR |
Приращение регистра |
00RR RI00 |
4(111 |
DCRR |
Уменьшение регистра |
00RR R101 |
4Ц11 |
INX RP |
Приращение пары регистров |
00РР0011 |
6 |
DCX RP |
Уменьшение пары регистров |
ООРРЮ11 |
6 |
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ |
ADDR |
Прибавить регистр к А |
1000 0RRR |
4(71 |
ADC R |
Прибавить регистр к А с переносом |
1000 1RRR |
4(7] |
SUB R |
Вычесть регистр из А |
1001 0RRR |
4171 |
SBBR |
Вычесть с заемом |
1001 1RRR |
4(7] |
ANAR |
. Регистр 4&4 А |
1010 0RRR |
4(7] |
XRAR |
Искл. 4или4 регистра и А |
1010 1RRR |
4(71 |
1 |
2 |
3 |
4 |
ORAR |
Регистр It A |
1011 0RRR |
4|71 |
CMAR |
Сравнить регистр и A |
1011 1RRR |
4[7] |
ADID |
Прибавить непоср. данные к А |
11000110 |
7 |
ACID |
Прибавить непоср. с переносом |
1100 1110 |
7 |
SUID |
Вычесть непоср. из А |
11010110 |
7 |
SBID |
Вычесть непоср. с заемом |
1101 1110 |
7 |
ANID |
Непоср. 4&4 А |
11100110 |
7 |
XRID |
Искл. 'или* непоср. с А |
11101110 |
7 |
ORID |
Непоср. и А |
11110110 |
7 |
CRID |
Сравнить непоср. и А |
11111110 |
7 |
DAD RP |
Прибавить пару регистров к HL |
00PP 1001 |
И |
ОПЕРАЦИИ С НАКОПИТЕЛЯМИ И ФЛАГАМИ |
RLC |
Сдвинуть А влево |
0000 0111 |
4 |
RRC |
Сдвинуть А вправо |
00001111 |
4 |
RAL |
Сдвинуть А влево чер. разр. пер. |
0001 0111 |
4 |
RAR |
Сдвинуть А вправо чер. разр. пер. |
0001 1111 |
4 |
DAA |
Десятичн. коррекция накопителя |
00100111 |
4 |
СМА |
Дополнение к накопителю |
00101111 |
4 |
STC |
-Установить бит переноса |
000111 0111 |
4 |
CMC |
Обратить бит переноса |
ООН 1111 |
4 |
I/O, УПРАВЛЕНИЕ И ОПЕРАЦИИ СО СТЕКОМ |
IND |
Ввод из порта D |
1101 1011 |
10 |
OUT D |
Вывод в порт D |
11010011 |
11 |
EI |
Разрешение прерывания |
1111 1011 |
4 |
DI |
Запрещение прерывания |
11110011 |
4 |
NOP |
Нет операции |
0000 0000 |
4 |
HLT |
Останов |
01110101 |
4 |
PUSH RP |
Занести пару регистров в стек |
1IPP0101 |
И |
POP RP |
Взять пару регистров из стека |
11РР0001 |
10 |
1 |
2 |
3 |
4 |
XIHL |
Обменять HL с вершиной стека |
11100011 |
19 |
SPHL |
Переслать HL в SP |
1111 1001 |
6 |
ПЕРЕДАЧИ УПРАВЛЕНИЯ |
JMP DD |
Безусловный переход |
1100 ООП |
10 |
JCC DD |
Перейти по условию СС |
11СС СОЮ |
10 |
CALL DD |
Безусловный вызов |
1100 1101 |
17 |
ССС DD |
Вызов по условию СС |
11СС сооо |
П[10] |
RET |
Возврат после вызова |
1100 1001 |
10 |
RCC |
Возврат по условию СС |
I1CC сооо |
П [51 |
RSTN |
Возобновление в ячейке 8*N |
11NN N111 |
11 |
PCHL |
Переслать HL в PC |
1110 1001 |
4 |
Обозначения:
1. Поля данных.
D — один байт непоср. данных (длина команды 2 байта).
DD — двухбайтовый адрес (длина команды 3 байта).
Все остальные команды имеют длину 1 байт.
2. Циклы.
N — число тактов, нужное для выполнения команды.
!N] — число тактов, когда R= М (доступ в память).
N) — число тактов, если условие не выполнено.
3. Поля регистров.
"R" |
RRR |
В |
000 |
с |
001 |
D |
010 |
Б |
011 |
Н |
100 |
L |
101 |
М |
110 |
А |
111 |
["MMHL)]
f,RP" |
РР |
ВС |
00 |
DE |
01 |
HL |
10 |
PS |
11 |
PSW |
11 |
4. Коды условий..
"СС" |
ССС |
Условие |
NZ |
ООО |
не ноль |
Z |
001 |
ноль |
NC |
010 |
нет переноса |
С |
011 |
перенос |
РО |
100 |
нечетный паритет |
РЕ |
101 |
четный паритет |
Р |
110 |
положительное |
М |
111 |
отрицательное |