Глава 26
Использование машинных кодов
Краткое содержание: USR с числовым аргументом.
Эта глава описывает применение машинных команд микропроцессора
Z80 [ U880 ( ГДР), 18 10ВМ80 (СССР) ].
Программы в машинных кодах пишут обычно на ассемблере с после-
дующей трансляцией. (перечень мнемокодов команд микропроцессора
Z80 приведен в приложении а). транслятор с ассемблера встроен в
компьютер ZX SPECTRUM.
Приведем пример программы:
ID ВС,99
RET
которая загружает в "ВС" регистр число 99. Эта программа будет
транслироваться в 4-х байтный машинный код:
Байты 1, 99, О для ID ВС,99 и
201 для RET
Следующим шагом является загрузка программы в компьютер. Для
этого используется дополнительная память, получаемая между
бейсик-областью и областью определяемых пользователем символов.
Допустим, вы имели следующее распределение последней части ОЗУ:
RAMTOP»32599 UDG»32600 PRAMT«32767
если вы теперь выполните:
CLEAR 32499
то получите дополнительно 100 байтов памяти, начиная с адреса
32500. _____
RAMTOP»32599 UDG»32600 PRAMT«32767
если вы теперь выполните:
CLEAR 32499
то получите дополнительно 100 байтов памяти, начиная с адреса
32500. _____
Для загрузки программы в машинных кодах вы можете выполнить
следующую бейсик-программу:
Для загрузки программы в машинных кодах вы можете выполнить
следующую бейсик-программу:
10 LET А-32500
20 READ N: РОКЕ А, N
30 LET А-А+1: GOTO 20
40 DATA 1,99,0,201
(программа может завершиться с сообщением 'Е OUT OF DATA',
если переполняются отведенные вами 4 байта).
Для выполнения загруженных машинных кодов используется функция
USR, но с числовым аргументом, определяющим начальный адрес. Если
вы выполните:
PRINT USR 32500
то получите ответ: 99
Возврат в бейсик-программу осуществляется обычным образом по
команде микропроцессора RET. В машинной программе вы не должны
использовать регистры IY и I.
Вы можете записать вашу программу иа ленту:
SAVE "NAME" CODE 32500,4
Можно записать эту программу и так, что она будет автомати-
чески выполняться после загрузки:
10 LOAD " и CODE 32500,4
20 PRINT USR 32500
для чего надо сделать:
SAVE NAME LINE
а затем:
SAVE "ХХХХ" CODE 32500.4
LOAD "NAME"
Это приведет к тому, что вначале будет загружена и автомати-
чески выполнена бейсик-программа, которая, в свою очередь< загру-
зит и выполнит программу в машинных кодах. Книга "Искусство схе-
мотехники" П. Хоровиц, Y. Хилл Мир,1986, том 2, стр.579-58 0.
Далее приводятся 78 команд микропроцессора 8085, совместимых с
микропроцессором Z80 ( 158 команд). /и880-ГДР, К1810ВМ-СССР/
Мнемоника |
Действие |
К О |
П |
Циклы |
1 |
2 |
3 |
4 |
n |
e p |
ссылка, загрузка, |
з а п |
и, с ь |
MOV |
R , R |
|
ПЕРЕСЛАТЬ РЕГИСТР В РЕГИСТР |
01RR |
RRRR |
4 [7] |
MVI |
R, D |
|
ПЕРЕСЛАТЬ НЕПОСР.В РЕГИСТР |
00RR |
R1 10 |
7[10] |
LXI |
RP , DD |
ЗАГРУЗИТЬ 0ЕПОСР.В ДВА РЕГ. |
00PP |
0001 |
10 |
STAX |
В |
|
ЗАПОМНИТЬ А КОСВЕННО ПО ВС |
0000 |
0010 |
7 |
STAX |
D |
|
ЗАПОМНИТЬ А КОСВЕННО ПО DE |
0001 |
0010 |
7 |
LDAX |
В |
|
ЗАГРУЗИТЬ А КОСВЕННО ПО ВС |
0000 |
1010 |
7 |
LDAX |
D |
|
ЗАГРУЗИТЬ А КОСВЕННО ПО DE |
0001 |
1010 |
7 |
STA |
DD |
|
ЗАПОМНИТЬ А ПО АДРЕСУ DD |
001 1 |
0010 |
13 |
LDA |
DD |
|
ЗАГРУЗИТЬ А ПО АДРЕСУ DD |
001 1 |
1010 |
13 |
SHLD |
DD |
|
ЗАПОМНИТЬ H,L ПО АДРЕСУ DD |
0010 |
0010 |
16 |
LHLD |
DD |
|
ЗАГРУЗИТЬ H,L ПО АДРЕСУ DD |
0010 |
1010 |
16 |
XCHG |
|
|
ОБМЕНЯТЬ DE И HL |
1110 |
101 1 |
4 |
|
П |
P |
ИРАЩЕНИЕ И УМЕНЬШЕНИЕ |
|
INR |
R |
|
ПРИРАЩЕНИЕ РЕГИСТРА |
00RR |
R 1 00 |
4 [ 1 1 ] |
DCR |
R |
|
УМЕНЬШЕНИЕ РЕГИСТРА |
00RR |
R 1 0 1 |
4 С 1 1 ] |
I NX |
RP |
|
ПРИРАЩЕНИЕ ПАРЫ РЕГИСТРОВ |
ООРР |
001 1 |
6 |
DCX |
RP |
|
УМЕНЬШЕНИЕ ПАРЫ РЕГИСТРОВ |
ООРР |
1011 |
6 |
A |
P И |
Ф |
МЕТИЧЕСКИЕ И ЛОГИЧЕСКИ |
Б |
ADD |
R |
|
ПРИБАВИТЬ РЕГИСТР К А |
1000 |
0RRR |
4 [7] |
ADC |
R |
|
ПРИБАВИТЬ РЕГ К А С ПЕРЕНОСОМ |
1000 |
1RRR |
4 [7] |
SUB |
R |
|
ВЫЧЕСТЬ РЕГИСТР ИЗ А |
1001 |
0RRR |
4 [7] |
SBB |
R |
|
ВЫЧЕСТЬ С ЗАЕМОМ |
1001 |
1RRR |
4 [7] |
ANA |
R |
|
РЕГИСТР dr А |
1010 |
0RRR |
4 [7] |
XRA |
R |
|
ИСКЛ.ИЛИ РЕГИСТРА И А |
1010 |
1RRR |
4 [7] |
ORA |
R |
|
РЕГИСТР ! А |
1011 |
0RRR |
4 [7] |
CMA |
R |
|
СРАВНИТЬ РЕГИСТР И А |
1011 |
1RRR |
4 [7] |
ADI |
D |
|
ПРИБАВИТЬ НЕПОСР.ДАННЫЕ К А |
1 100 |
01 10 |
7 |
AC I |
D |
|
ПРИБАВИТЬ НЕПОСР.С ПЕРЕНОСОМ |
1 100 |
1110 |
7 |
SUI |
D |
|
ВЫЧЕСТЬ НЕПОСР. ИЗ А |
1101 |
0110 |
7 |
SBI |
D |
|
ВЫЧЕСТЬ НЕПОСР.С ЗАЕМОМ |
1101 |
1110 |
7 |
AN I |
D |
|
НЕПОСР. dr А |
1110 |
0110 |
7 |
XR I |
D |
|
ИСКЛ.ИЛИ НЕПОСР. И А |
1 110 |
1110 |
7 |
OR I |
D |
|
НЕПОСР. ! А |
1111 |
0110 |
7 |
CPI |
D |
|
СРАВНИТЬ НЕПОСР. С А |
1111 |
1110 |
7 |
DAD |
RP |
|
ПРИБАВИТЬ ПАРУ РЕГИСТРОВ К HL |
ООРР |
1001 |
1 1 |
О П |
E P |
A |
Ц.С НАКОПИТЕЛЯМИ |
И Ф |
Л А I |
- А М И |
RLC |
|
|
СДВИНУТЬ А ВЛЕВО |
oobo |
0111 |
4 |
RRC |
|
|
СДВИНУТЬ А ВПРАВО |
0000 |
1111 |
4 |
RAL |
|
|
СДВИНУТЬ А ВЛЕВО ЧЕР.РАЗР.ПЕР |
0001 |
0111 |
4 |
RAR |
|
|
СДВИНУТЬ А ВПРАВО ЧР.РАЗР.ПЕР |
0001 |
1111 |
4 |
DAA |
|
|
ДЕСЯТИЧ.КОРРЕКЦИЯ НАКОПИТЕЛЯ |
0010 |
0111 |
4 |
CMA |
|
|
ДОПОЛНЕНИЕ К НАКОПИТЕЛЮ |
0010 |
1111 |
4 |
STC |
|
|
УСТАНОВИТЬ БИТ ПЕРЕНОСА |
001 1 |
0111 |
4 |
CMC |
|
|
ОБРАТИТЬ БИТ ПЕРЕНОСА |
00 1 1 |
1111 |
4 |
1 1 1 |
1/оу |
ПРАВЛЕНИЕ И ОПЕРАЦ |
И |
И СО |
с т |
Е К 0 М |
IN |
D |
ВВОД ИЗ ПОРТА D |
|
1101 |
1011 |
10 |
OUT |
D |
ВЫВОД В ПОРТ D |
|
1101 |
ООН |
11 |
BI |
|
РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ |
|
1 11 1 |
101 1 |
4 |
DI |
|
ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЙ |
|
1111 |
001 1 |
4 |
NOP |
|
НЕТ ОПЕРАЦИИ |
|
0000 |
0000 |
4 |
HLT |
|
ОСТАНОВ |
|
01 1 1 |
01 10 |
4 |
PUSH |
RP |
ЗАНЕСТИ ПАРУ РЕГИСТРОВ В СТЕК |
1 1РР |
0101 |
1 1 |
POP |
RP |
ВЗЯТЬ ПАРУ РЕГИСТРОВ ИЗ СТЕКА |
1 1РР |
0001 |
10 |
XTHL |
|
ОБМЕНЯТЬ HL С ВЕРХОМ СТЕКА |
|
1110 |
ООН |
19 |
SPHL |
|
ПЕРЕСЛАТЬ HL В SP |
|
1111 |
1001 |
6 |
|
П E |
РЕДАЧИ УПРАВЛЕ |
Н |
и я |
|
|
JMP |
DD |
БЕЗУСЛОВНЫЙ ПЕРЕХОД |
|
1 100 |
001 1 |
10 |
JCC |
DD |
ПЕРЕЙТИ ПО УСЛОВИЮ СС |
|
1 1 СС |
сою |
10 |
CALL |
DD |
БЕЗУСЛОВНЫЙ ВЫЗОВ |
|
1 100 |
1101 |
17 |
CCC |
DD |
ВЫЗОВ ПО УСЛОВИЮ СС |
|
1 1СС |
С100 |
17(10) |
RET |
|
ВОЗВРАТ ПОСЛЕ ВЫЗОВА |
|
1 100 |
1001 |
10 |
RCC |
|
ВОЗВРАТ ПО УСЛОВИЮ СС |
|
1 led |
сооо |
11(15) |
RST |
N |
ВОЗОБНОВЛЕНИЕ В ЯЧЕЙКЕ 8*N |
|
1 INN |
N111 |
1 1 |
PCHL |
|
ПЕРЕСЛАТЬ HL В PC |
|
1110 |
1001 |
4 |
обозначения:
1 . П о л я данных.
D - один байт непоср. Данных (длина команды 2 байта)
DD - двухбайтовый адрес (длина команды 3 байта)
Все остальные команды имеют длину 1 байт.
2. Ц и к л ы.
N - число тактов, нужное для выполнения команды.
[N]- число тактов, когда R»M (доступ в память).
(N) - число тактов, если условие не выполнено.
З.Поля регистров.
"R" |
RRR |
В |
ООО |
С |
001 |
Р |
010 |
Е |
01 1 |
Н |
100 |
L |
101 |
М |
110 |
А |
1 1 1 |
["И"»(HL)]
["И"»(HL)]
"RP" |
РР |
ВС |
00 |
DE |
01 |
HL |
10 |
PS |
1 1 |
PSW |
1 1 |
4. Коды условий.
4. Коды условий.
исс" |
ссс |
Условие |
NZ |
ООО |
не нуль |
Z |
001 |
нуль |
NC |
010 |
нет переноса |
С |
011 |
перенос |
РО |
100 |
нечетный паритет |
РВ |
101 |
четный паритет |
р |
110 |
положительное |
и |
111 |
отрицательное |