|
Глава 26 - использование машинных кодов.
|
Глава 26
Использование машинных кодов
Краткое содержание: USR с числовым аргументом
Эта глава описывает применение машинных команд микропроцессо-
ра Z80 (U880 (ГДР), 1810BM80 (СССР)).
Программы в машинных кодах пишут обычно на асемблере с после
дующей трансляцией, (перечень мнемокодов команд микропроцессора
Z80 приведен в приложении A). Транслятор с асемблера
встроен в компьютер ZX SPEKTRUM.
Приведем пример программы:
ID BC,99
RET
которая загружает в "BC" регистр число 99, эта программа будет
транслироваться в 4-х байтный машинный код:
байты 1,99,0 для ID BC,99 и 201 для RET
Следующим шагом является загрузка программы в компьютер, для
этого используется дополнительная память между бейсик-областью и об-
ластью определяемых пользователем символов.
Допустим вы имели следующее распределение последней части ОЗУ:
- -- ------------В--------------------------В- -- -- -
? определяемые ?
? пользователем символы ?
- -- ------------Е--------------------------Е- -- -- -
RAMTOP=32599 UDG=32600 PRAMT=32767
Если вы теперь выполните:
CLEAR 23499,
то получите 100 байтов памяти, начиная с адреса 32600
- Е--------Е----------Е-------------------------Е-- - -
? 100 ? ? определяемые ?
? байтов ? ? пользователем символы ?
- Е--------Е----------Е-------------------------Е-- - -
32500 UDC=32600 FRAMT=32767
RAMTOP=32499
Для загрузки программы в машинных кодах вы можете выполнить
следующую бейсик-программу:
10 LET A=32500
20 READ N :POKE A,N
30 LET A=A+1: GOTO 20
40 DATA 1,99,0,201
(программа может завершиться сообщением 'E 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 "XXXX" CODE 32500,4
LOAD "NAME"
Это приведет к тому, что вначале будет загружена и автомати-
чески выполнена бейсик-программа, которая, в свою очередь, загру-
зит и выполнит программу в машинных кодах.
Книга "Искусство схемотехники" П. Хоровиц, У. Хилл
Мир. 1986. том 2. стр 579-580
Далее приводятся 78 команд микропроцессора 8085 совместимых с
микропроцессором Z80 (158 команд), (U880-ГДР, K1810BM-СССР)
Ъ-----------В-----------------------------В-----------В---------ї
? Мнемоника ? Действие ? КОП ? Цикл ?
Г-----------Е-----------------------------Е-----------Е---------?
? 1 ? 2 ? 3 ? 4 ?
Г-----------Б-----------------------------Б-----------Б---------?
? Пересылка, загрузка, запись ?
Г-----------В-----------------------------В-----------В---------?
? MOV R,R ? переслать регистр в регистр ? 01RR RRRR ? 4L ?
? MVI R,D ? переслать непоср. в регистр ? 00RR R110 ? 7L ?
? LXI RP,DD ? загрузить непоср. в два рег.? 00рр 0001 ? 10 ?
? STAX B ? запомнить A косвенно по BC ? 0000 0010 ? 7 ?
? STAX D ? запомнить A косвенно по DE ? 0001 0010 ? 7 ?
? LDAX B ? загрузить A косвенно пO BC ? 0000 1010 ? 7 ?
? LDAX D ? загрузить A косвенно по DE ? 0001 1010 ? 7 ?
? STA DD ? запомнить A по адресу DD ? 0011 0010 ? 13 ?
? LDA DD ? загрузить A по адресу DD ? 0011 1010 ? 13 ?
? SHLD DD ? запомнить H,L по адресу DD ? 0010 0010 ? 16 ?
? SHLD DD ? загрузить H,L по адресу DD ? 0010 1010 ? 16 ?
? XCBG ? обменять DE и HL ? 1110 1011 ? 4 ?
Г-----------Б-----------------------------Б-----------Б---------?
? Приращение и уменьшение ?
Г-----------В-----------------------------В-----------В---------?
? INR R ? приращение регистра ? 00рр р100 ? 4L ?
? CCR R ? уменьшение регистра ? 00RR R101 ? 4L ?
? IKX RP ? приращение пары регистров ? 00рр 0011 ? 6 ?
? OCX RP ? уменьшение пары регистров ? 00пп 1011 ? 6 ?
А-----------Б-----------------------------Б-----------Б---------Щ
Ъ-----------В-----------------------------В-----------В---------ї
? 1 ? 2 ? 3 ? 4 ?
Г-----------Б-----------------------------Б-----------Б---------?
? Арифметические и логические ?
Г-----------В-----------------------------В-----------В---------?
? ADD R ? прибавить регистр к A ? 1000 0RRR ? 4L ?
? ADC R ? прибавить рег. A с переносом? 1000 1RRR ? 4L ?
? SUB R ? вычесть регистр из A ? 1001 0RRR ? 4L ?
? SBB R ? вычесть с заемом ? 1001 1RRR ? 4(7) ?
? ANA R ? регистр & A ? 1010 0RRR ? 4(7) ?
? XRA R ? искл. или регистра и A ? 1010 1RRR ? 4(7) ?
? ORA R ? регистр ? A ? 1011 0RRR ? 4(7) ?
? OMA R ? сравнить регистр и A ? 1011 1RRR ? 4(7) ?
? ADI D ? прибавить непоср. данные и A? 1100 0110 ? 7 ?
? ACI D ? прибавить непоср. с перенос.? 1100 1110 ? 7 ?
? SUI D ? вычесть непоср. из A ? 1101 0110 ? 7 ?
? SBI D ? вычесть непоср. с заемом ? 1101 1110 ? 7 ?
? ANI D ? непоср. & A ? 1110 0110 ? 7 ?
? XRI D ? искл. непоср. и A ? 1110 1110 ? 7 ?
? ORI D ? непоср. ? A ? 1111 0110 ? 7 ?
? OPI D ? сравнить непоср. с A ? 1111 1110 ? 7 ?
? DAD RP ? сдвинуть A влево ? 00рр 1001 ? 11 ?
Г-----------Б-----------------------------Б-----------Б---------?
? Операции с накопителями и флагами ?
Г-----------В-----------------------------В-----------В---------?
? RLC ? сдвинуть A влево ? 0000 0111 ? 4 ?
? RRC ? сдвинуть ? 0000 1111 ? 4 ?
? RAL ? сдвинуть A влево чр.разр.пер? 0001 0111 ? 4 ?
? RAR ? сдв. A вправо чр. разр. пер.? 0001 1111 ? 4 ?
? DAA ? десятичн. коррекция накопит ? 0010 0111 ? 4 ?
? CMA ? дополнение к накопителю ? 0010 1111 ? 4 ?
? STC ? установить бит переноса ? 0011 0111 ? 4 ?
? CMC ? обратить бит переноса ? 0011 1111 ? 4 ?
А-----------Б-----------------------------Б-----------Б---------Щ
Ъ-----------В-----------------------------В-----------В---------ї
? 1 ? 2 ? 3 ? 4 ?
Г-----------Б-----------------------------Б-----------Б---------?
? I/O управление и операции со стеком ?
Г-----------В-----------------------------В-----------В---------?
? IN D ? ввод из порта D ? 1101 1011 ? 10 ?
? OUT D ? вывод в порт D ? 1101 0011 ? 11 ?
? EI ? разрешение прерывания ? 1111 1011 ? 4 ?
? DI ? запрещение прерывания ? 1111 0011 ? 4 ?
? NOP ? нет операции ? 0000 0000 ? 4 ?
? HLT ? останов ? 0111 0110 ? 4 ?
? POSH RP ? занести пару регистр. в стек? 11рр 0101 ? 11 ?
? POP RP ? взять пару регистр. из стека? 11рр 0001 ? 10 ?
? XTHL ? обменять HL с верхом стека ? 1110 0011 ? 19 ?
? SPHL ? переслать HL в SP ? 1111 1001 ? 6 ?
Г-----------Б-----------------------------Б-----------Б---------?
? Передачи управления ?
Г-----------В-----------------------------В-----------В---------?
? JMP DD ? безусловный переход ? 1100 0011 ? 10 ?
? JCC DD ? перейти по условию CC ? 11CC C010 ? 10 ?
? CALL DD ? безусловный вызов ? 1100 1101 ? 17 ?
? CCC DD ? вызов по условию CC ? 11CC C100 ? 17(10)?
? RET ? возврат после вызова ? 1100 1001 ? 10 ?
? RCC ? возврат по условию CC ? 11CC C000 ? 11(5) ?
? RST N ? возвращение к ячейке 8*N ? 11NN N111 ? 11 ?
? PCHL ? переслать HL в PC ? 1110 1001 ? 4 ?
А-----------Б-----------------------------Б-----------Б---------Щ
1. Поля данных.
----------------
D - один байт непосредственных данных ( длина команды 2 байта)
DD - двубайтовый адрес ( длина команды 3 байта)
все остальные команды имеют длину 1 байт
2. Циклы.
-----------
N - число тактов нужное для выполнения команды.
(N) - число тактов, когда R=M ( доступ в память.
(N) - число тактов, если условие не выполнено.
3. Поля регистров.
--------------------
ХНННННСНННННё ХННННННСННННННё
? "R" ? RRR ? ? "RP" ? PP ?
ЖНННННШНННННч ЖННННННШННННННч
? B ? 000 ? ? BC ? 00 ?
? C ? 001 ? ? DE ? 01 ?
? D ? 010 ? ? HL ? 10 ?
? E ? 011 ? ? PS ? 11 ?
? H ? 100 ? ? PSW ? 11 ?
? L ? 101 ? А------Б------Щ
? M ? 110 ? ( "R"=(HL))
? A ? 111 ?
А-----Б-----Щ
4. Коды условий.
----------------
ХННННННСНННННСНННННННННННННННННННННННё
? "CC" ? CCC ? условие ?
ЖННННННШНННННШНННННННННННННННННННННННч
? NZ ? 000 ? не нуль ?
? Z ? 001 ? нуль ?
? NC ? 010 ? нет переноса ?
? C ? 011 ? перенос ?
? Pо ? 100 ? нечетный паритет ?
? PE ? 101 ? четный паритет ?
? P ? 110 ? положительное ?
? M ? 111 ? отрицательное ?
А------Б-----Б-----------------------Щ
|
|