Программирование на языке BASIC 1990 г.

Глава 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 ? отрицательное         ?
А------Б-----Б-----------------------Щ



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Программирование - как можно адаптировать на диск программы с подгружаемыми уровнями.
Об оболочке - журнал состоит из разделов, а разделы из статей.
Обо всём на свете - Потребительская оценка аудио-кассет.
Интернет - WWW или Всемирная паутина.
Юмор - Телефонный разговор.

В этот день...   24 апреля