Программирование в машинных кодах 1993 г.

Набор Системы Команд - Команды И Данные; Группы Команд.


5. НАБОР СИСТЕМЫ КОМАНД 5.1. КОМАНДЫ И ДАННЫЕ

Команды поделены на 18 групп, каждая из которых состоит из тех команд, которые сильно похожи друг на друга. Рассмотрим 6 классов данных, которые могут следовать за командой.

1. Однобайтовая константа +DD, то есть число A в диапазоне 00-FF 16-ное, 0-255 10-ное. Те команды, которые требуют за собой однобайтовую константу, имеют мнемоническую приставку '+DD'. Например: LD A,+DD.

2. Двухбайтовая константа +DDDD, то есть число A в диапазоне 0000-FFFF 16-ричное и 0-65535 10-ное. Те команды, которые требуют за собой двухбайтовую константу, имеют мнемоническую приставку '+DDDD'. Например: LD HL,+DDDD.

3. Двухбайтовый адрес, т.е. число A в диапазоне 0000-FFFF 16-ричное, 0-65535 10-ное, т.е.число, которое используется как адрес памяти. Те команды, которые требуют за собой двухбайтовый адрес, имеют приставку 'ADDV'. Например: JP ADDV.

4. Однобайтовая константа смещения E, т.е. число A в диапазоне 00-FF 16-ричное -128 - +127 10-ное. Число всегда представлено в дополнительной арифметике. Те команды, которые требуют за собой однобайтовую константу, имеют мнемоническую приставку 'Е'. Например: JR E.

5. Однобайтовая индексирующая константа смещения +D. Т.е. число A в диапазоне 00-FF 16-ричное, -128 -+127 10-ное. Число представлено в дополнительной арифметике. Те команды, которые требуют за собой однобайтовую индексирующую константу смещения, имеют мнемоническую приставку '+D'. Например: LD A,(IX+D).

6. Однобайтовая индексирующая константа смещения и однобайтовая константа +D, +DD, т.е. два числа в диапазоне 00-FF 16-ричное, первое из которых рассматривается как 10-ное -128-+127, а второе как десятичное 0-255. Команды, требующие за собой 2 байта данных, сопровождаются мнемониками '+D' и '+DD'. Например: LD (IX+D),+DD.

5.2. ГРУППЫ КОМАНД

Существует много путей для разделения на группы сотен различных машинных команд. Однако метод, выбранный здесь, разделяет команды на 18 функциональных групп.

После изучения команд по группам читатель выполнит программы Бейсик из следующей главы, которые иллюстрируют эти команды.

Группа 1

Команда: нет операции. Мнемоника 16-ный код

NOP 00

Выполнение команды требует 1,14 мкс. Ни один из регистров или флагов не изменяется. Команда NOP используется программистом для организации задержек, но чаще для удаления ненужных команд из программы. Программа Бейсика, демонстрирующая эту команду, приведена на странице 56.

Группа 2

Al PRINT

Команда загрузки регистра константами.

Мнемоника LD A,+DD LD H,+DD LD L,+DD LD B,+DD LD C,+DD LD D,+DD

16-ный код

LD E,+DD 1E DD

Каждая строка этих команд требует 2-х байтов памяти: один для кода операции, второй для константы. Команды записывают в регистр соответствующие значения. Старые значения регистра пропадают. Следующие команды включают загрузку пары регистров двухбайтовыми константами. Мнемоника 16-ный код

LD HL,+DDDD 21 DD DD

01 DD DD 11 DD DD DD 21 DD DD FD 21 DD DD 31 DD DD

Строка команды требует 3 или 4 байта в памяти. Код операции занимает 1 или 2 байта и 2 байта занимает константа. Первый байт константы загружается в младший регистр регистровой: пары, т.е. D,C,E,X,Y,P, во второй

LD BC,+DDDD LD DE,+DDDD LD IX,+DDDD LD IY,+DDDD LD SP,+DDDD

_Набор системы команд_

байт - старший регистр, т.е. H,D,B,I,S. Эти команды записывают в регистровые пары данные значения- Эти значения часто рассматриваются программистом как 2-х байтовый адрес, но могут быть также и двухбайтовым числовым значением и 2-я отдельными 1-байтовыми числовыми значениями.

Команды этой группы не изменяют флагов. Программа Бейсик для демонстрации этих команд приведена на странице 57.

Группа 3

Команды копирования регистров и обмена. Существует 59 команд, которые выполняют копирование регистров и регистровых пар. Эти команды лучше делить на 4 подгруппы. Подгруппа А. Команды копирования регистр - регистр

Следующая таблица дает коды операций команд, выполняющих копирование содержимого одного регистра в другой. _

Регистр

LD A,R

LD H,R

LD L,R

LD B,R

LD C,R

LD D,R

LD E,R

А

7F

67

6F

47

4F

57

5F

Н

64

44

54

L

7D

65

6D

45

4D

55

5D

В

78

60

68

40

48

50

58

С

79

61

69

41

49

51

59

D

62

42

52

Е

63

43

53

Ни одна из команд, приведенных в таблице, не изменяет флаги. Существует, кроме того, 4 команды для I и R регистров.

Мнемоника 16-ный код

LD A,I ED 57

LD A,R ED 5F

LD I,A ED 47

LD R,A ED 4F

Эти последние команды влияют на флаг переполнения четности. Подгруппа Б. Команды копирования регистровая пара - регистровая пара

Существует только 3 команды этой подгруппы. И они копируют значения в указатель стека.

Мнемоника 16-ный код

LD SP,HL F9

LD SP,IX DD F9

LD SP,IY FD F9

Эти команды не изменяют содержимое флага. Если содержимое регистровой пары надо копировать в другую регистровую пару, и эти команды не подходят, необходимо выполнить 2 команды копирования регистр - регистр. Например, нет команды LD HL,DE и её заменяют, используя LD H,D и LD L,E. Или содержимое 1-ой регистровой пары может быть сохранено в стеке и впоследствии переписано во 2-ю регистровую пару (см. команды стека на странице 46).

Подгруппа В. Команды EX DE,HL

Существует только одна команда, которая позволяет обменивать содержимое регистров. В пределах основного набора регистров.

Мнемоника 16-ный код

EX DE,HL ЕВ

Эта очень полезная команда позволяет обменивать значения в паре DE с содержимым пары HL. Значение флагов не изменяется. Команда используется, когда необходимо, чтобы адрес или 2-х байтовая числовая константа из пары DE была записана в пару HL, но содержимое последней не было потеряно.

Подгруппа Г. Команды альтернативного набора регистров В этой группе 2 команды.

Мнемоника 16-ный код

EXX D9

EX AF,A'F' 0 8

Команда ЕХХ вызывает переключение регистров H,L,B,C,D,E на регистры H',L',B',C',D',E'. Команды EX AF.A'F', как следует из мнемоники, переключает регистр A и F на A' и F'. Альтернативные регистры часто используются для хранения адресов и данных. Помещенные в альтернативные регистры, эти значения сохраняются от искажения и могут быть легко и просто восстановлены.

Программа Бейсик, демонстрирующая эти команды, находится на странице 58.

Группа 4. Команды загрузки регистров из памяти

В систему Z80 входит много команд, позволяющих находить данные в памяти и затем загружать их в основной регистр. Все эти команды требуют, чтобы программист указал адрес или пару адресов байтов, откуда данные должны быть скопированы в регистр получателей данных.

Команды этой группы лучше рассматривать как команды трех подгрупп в соответствии с методом адресации.

Виды адресации:

¦S косвенная - 2-х байтовый адрес уже размещен в адресной регистровой паре. ¦S непосредственная - действительный адрес указан в двух байтах за кодом операции.

S индексная - адрес данных должен быть высчитан путём сложения значения совмещения D с основным адресом, уже содержащимся в регистровой паре IX или IY.

Подгруппа А. Команды, использующие непосредственную адресацию

Мнемоника LD A,(ADDR) LD HL,(ADDR)

BC,(ADDR) DE,(ADDR)

D,(IX+D)

E,(IX+D)

LD LD LD LD

16-ный код 3A ADDR

2A ADDR - обычная форма ED 6B ADDR - необычная форма ED 4B ADDR ED 5B ADDR DD 56 D DD 5E D

Для команд, использующих пару IY, надо изменить IX на IY и DD на FD. Ни одна из команд этой группы не меняет флаги. Программа Бейсик этих команд приведена на странице 58.

Группа 5. Команды записи в память содержимого регистров или константы

Обычно команды этой группы выполняют операции, противоположные тем, которые делают команды группы 4.

Команды позволяют содержимое регистров переписывать в память или записывать туда константы. Эти команды лучше рассмотреть по трем группам.

Подгруппа А. Команды непосредственной адресации

Мнемоника

16-ный код

LD

(ADDR)

,A

32

ADDR

LD

(ADDR)

,HL

22

ADDR - <

ED

63 ADDR

LD

(ADDR)

, ВС

ED

4 3 ADDR

LD

(ADDR)

,DE

ED

53 ADDR

LD

(ADDR)

,IX

ED

22 ADDR

LD

(ADDR)

,IY

ED

22 ADDR

LD

(ADDR)

,SP

ED

7 3 ADDR

необычная форма

Приведенные команды приводят только непосредственную адресацию и важно заметить, что нет команд для записи в память констант. Если это необходимо, константа должна быть загружена в регистр A или каким-либо другим путем. Затем команды типа LD (ADDR),HL - фактически двойные команды: LD (ADDR),L и LD (ADDR+1),Н. Команды подгруппы часто используются для сохранения адресов и значений в памяти, когда эти значения рассматриваются как переменные, например, часто используется LD (RAMTOP),HL, где RAMTOP метка пары последних адресов памяти, используемой для хранения текущего значения верхней границы памяти. Выборка текущего значения может быть позднее выполнена командой 4 группы, например, LD HL,(RAMTOP).

Подгруппа Б. Команды косвенной адресации

Команды этой подгруппы позволяют копировать содержимое регистров в память, адрес которой содержится в регистровой паре HL, BC или DE.

Существует также команда записи однобайтовой константы по адресу, указанному в паре HL.

Мнемоника 16-ный код

LD (HL),A 77

LD (ВС),A LD (DE),A LD (HL),H LD (HL),L LD (HL),B LD (HL),C LD (HL),D 72

LD (HL),E 73

LD (HL),+DD 36 DD

Подгруппа В. Команды индексной адресации

Мнемоника

LD (IX+D),A

LD (IX+D),H

LD (IX+D),L

LD (IX+D),B

LD (IX+D),C

LD (IX+D),E

LD (IX+D),+DD

A PRINT

16-ный код DD 77 D DD 74 D DD 75 D DD 70 D DD 71 D DD 73 D DD 36 D DD

Для команд, использующих IY регистровую пару, надо изменить IX на IY и DD на FD. Программа иллюстрирует эти команды на странице 60.

Группа 6. Команды сложения

Эта группа команд выполняет арифметические действия. Команды сложения позволяют программисту прибавить (в абсолютной 2-й арифметике) заданное число к регистровой паре, регистру или индексному адресу памяти.

Команды этой группы могут быть поделены на 3 группы, каждая из которых содержит собственное имя.

S команды ADD;

S команды INC. Специальный случай сложения, когда к числу прибавляется 1;

S команда ADC. ЗНАЧЕНИЕ флага переноса прибавляется к результату.

Флаг переноса - это один из битов регистра. Флагов и используется для сигнализации о том, было ли при выполнении последней арифметической операции 2-ное переполнение регистра или байта памяти. Команды ADD и ADC меняют флаг переноса, а INC - не меняет.

Подгруппа А. Команда ADD.

Мнемоника ADD A,+DD ADD A,A ADD A,H ADD A,L ADD A,B ADD A,C ADD A,D ADD A,E ADD HL,HL ADD HL,BC ADD HL,DE ADD HL,SP ADD IX,IX ADD IX,BC ADD IX,DE ADD A,(HL) ADD A,(IX+D) ADD IX,SP

Для команд, использующих IX регистр, надо, поменять IX на IY и DD на FD. Команды ADD, приведенные выше, очень просты. Команда устанавливает или сбрасывает флаг переноса в зависимости от того было или нет 2-ное переполнение регистра. Или пары регистров.

Это показано на следующих примерах:

1. Регистр A=60 16-ных, B=90. Выполняется ADD A,B. A=F0 B=90. Флаг переноса сброшен.

2. A=A8, B=7E. Выполняется ADD A,B. A=26 B=7Е. Флаг переноса установлен. Подгруппа Б. Команда INC

Команды этой группы позволяют прибавить 1 к 8-ми битовому регистру, ячейке памяти или 16-ной паре регистров. Во всех случаях флаг переноса игнорируется, он не изменяется. Мнемоника 16-ный код

16-ный

С6

INC A 3C

INC H INC L INC В INC С INC D INC E INC (HL)

INC (IX+D) DD 34 D

INC HL 23

INC ВС 03

INC DE 13

INC SP 33

INC IX DD 23

INC IY FD 23 Подгруппа В. Команда ADC

Мнемоника 16-ный код

ADC A,+DD СЕ DD

ADC A,A 8F

ADC А,Н 8С

ADC A,L 8D

ADC A,B 8 8

J PRINT

ADC A,C

89

ADC A,D

8A

ADC A,E

8B

ADC A,(HL)

8E

ADC A,(IX+D)

DD

8E D

ADC A,(IY+D)

FD

8E D

ADC HL,HL

ED

6A

ADC HL,BC

ED

4A

ADC HL,DE

ED

5A

ADC HL,SP

ED

7A

Команды этой группы

позволяют

команды этой группы меняют флаг переноса. Он сбрасывается, если операция ADC не дает 2-ного переполнения и устанавливается, если даёт. Примеры показывают это:

1. регистр A=F0

регистр A=60 16-ной ADC A,B регистр B=90 флаг=0

2. регистр A=27

регистр A=A8 флаг=1 ADC A,B регистр B=7E флаг=1 Программа иллюстрирует эти команды на странице 61.

Группа 7. Команды вычитания

Позволяют вычесть заданное число из одинарного регистра, пары регистров или индексного адреса памяти. Команды этой группы полезно разделить на 3 подгруппы, каждая из которых имеет свою мнемонику. S команда SUB.

S команда DEC. Специальный случай вычитания, когда из числа вычитается 1.

S команда SBC. Значение флага переноса вычитается из результата. Все команды SUB и SBC изменяют флаг переноса в зависимости от того, требовался ли 2-ный заём. Команда DEC оставляет флаг переноса без изменения. Подгруппа А. Команды SUB

Мнемоника

16-ный код

SUB +DD

D6 DD

SUB A

97

SUB H

94

SUB L

95

SUB В

90

SUB С

91

SUB D

92

SUB E

93

SUB (HL)

06

SUB (IX+D)

DD 96 D

SUB (IY+D)

FD 96 D

Замечание: мнемоника команд хотя и пишется, как указано выше, но SUB L подразумевается SUB A,L и т.д., поскольку все команды используют регистр А.

В Z80 команда SUB выполняет "истинное" абсолютное 2-ное вычитание, как показано в примерах. Флаг переноса сбрасывается, если первоначальное значение регистра A больше или равно вычитаемому, и устанавливается если меньше.

Регистр A=DC, B=2A SUB В - регистр A=B2 флаг=0 Регистр А=АА, B=DC SUB В регистр A=CE флаг^ Подгруппа Б. Команды DEC

Команды этой группы позволяют вычесть 1 из содержимого 8 битового регистра, ячейки памяти или 16-битной пары регистров.

Во всех этих случаях флаг переноса не изменяется.

Мнемоника

16-ный код

DEC

A

3D

DEC

H

25

DEC

L

2D

DEC

В

05

DEC

С

0D

DEC

D

15

DEC

E

1D

DEC

(HL)

35

DEC

(IX+D)

DD 35 D

DEC

(IY+D)

FD 35 D

DEC

HL

2B

DEC

ВС

0B

DEC

DE

1B

DEC

SP

3B

DEC

IX

DD

2B

DEC

IY

FD

2B

Подгруппа В. Команды SBC

Мнемоника

16-ный код

SBC

A,+DD

DE

DD

SBC

A,A

9F

SBC

A,H

9C

SBC

A,L

9D

SBC

A,B

98

SBC

A,C

99

SBC

A,D

9A

SBC

A,E

9B

SBC

A,(HL)

9E

SBC

HL,HL

ED

62

SBC

HL,BC

ED

42

SBC

HL,DE

ED

52

SBC

HL,SP

ED

72

SBC

A,(IY+D)

FD

93 D

Команда SBC выполняет "истинное'' вычитание, если флаг переноса сброшен, и "вычитание" с займом, если флаг переноса установлен. Это может быть полезно, если используются значения повышенной точности. Например, 4-х байтовое число содержащееся в регистрах H',L',H,L может быть вычтено из другого числа, хранящегося в регистрах D',E',D,E, следующим образом:

AND A сброс флага переноса

SBC HL,DE вычитание младшей части

ЕХХ переключение набора

SBC HL,DE вычитание старшей части

ЕХХ переключение набора

16-ный код FE DD BF

СР СР СР СР СР СР СР СР СР СР

И соответствующий заем между младшей и старшей частями учитывается. Программа, демонстрирующая команды этой группы, находится на странице 62.

Группа 8. Команды сравнения

Команды этой группы используются очень часто во всех программах. Они позволяют программисту сравнить значение, находящееся в регистре A, с константой, значением в регистре и области памяти. Команды выполняют операцию вычитания без переноса, без запоминания результата вычитания и только устанавливают флаги в регистре F. Первоначальное значение в регистре A не изменяется. Флаг переноса устанавливается, как и при операциях вычитания. Сравнение при больше или равно сбрасывает флаг переноса, а при меньше - устанавливает. Команды этой группы - команды одинарного сравнения, а блочное сравнение рассмотрено на странице 48. Команды: Мнемоника СР +DD A Н L В С D Е

(HL) (IX+D) (IY+D) Следующие примеры пок A=31 СР В ост

)

BE D BE D вают испо

1. Регистр A=31 СР В оставляет регис

B=30 и сбрасывает флаг переноса 31>00

2. Регистр A=30 СР В оставляет регистр без изменения

B=30 и устанавливается флаг нуля 30=30

3. Регистр A=01 CP B оставляет регистр без изменения

B=30 и устанавливает флаг переноса 01<30 Программа, демонстрирующая эти команды, находится на странице 63.

Группа 9. Команды логики

Это команды AND, OR, XOR. Они применяются к регистру A и другой заданной переменной. Операция выполняется побитно, и 8-битовый результат возвращается в регистре A. Подгруппа А. Команда AND

Логическая операция выполняется над двумя двоичными цифрами и рез.-1 только, если оба тестируемых бита установлены. В противном случае результирующий бит 0. Пример показывает, как команда выполняется над восемью

отдельными битами. Двоичн. 10101010 16-ный AA AND AND 11000000_C0

Результат 10000000 80

В этой подгруппе следующие команды:

Мнемоника

16-ный код

AND +DD

А6

AND A

A7

AND H

A4

AND L

A5

AND В

A0

AND С

A1

AND D

A2

AND E

A3

AND (HL)

A6

AND (IX+D)

DD A6 D

AND (IY+D)

FD A6 D

Командой AND удобно сбрасывать биты

позволяет проверять определенные биты байта данных. Следующий пример показывает, как это можно сделать. В системе SP биты 0-2 системной переменной ATTRP содержат информацию о постоянной цвета чернил. Когда цвет чернил изменяется, старый цвет удаляется использованием команды AND и новый цвет вводится по команде ADD, т. е.

LD A,(ATTRP) находится системная переменная AND +F1 демаскируется старый цвет

ADD +NEWCOLOR добавляется новый цвет LD (AITR?^ сохраняется системная переменная Подгруппа Б. Команда OR

Логическая операция или выполняется над 2-мя двоичными цифрами, и результат =-1, если ни одна или обе цифры установлены. В противном случае бит результата сброшен. Пример показывает, как команда выполняет операцию над 8 отдельными битами: В 2-ной 10101010 16-ный AA OR OR

11000000_C0

11101010 ЕА

В подгруппе следующие команды:

Мнемоника

16-ный код

OR +DD

F6 DD

OR A

B7

OR H

B4

OR L

B5

OR В

В0

OR С

В1

OR D

B2

OR Е

В3

OR (HL)

B6

OR (IX+D)

DD B6 D

OR (IY+D)

FD B6 D

При работе команды OR будут установлены или проверены, что они установлены от 0 до 8 битов регистра А.

Пример показывает одно из использований команды OR. В SP биты 5,4,3 системной переменной ATTRP определяют постоянный цвет бумаги. Поэтому можно сделать цвет бумаги белым использованием команды OR +DD. LD A,(ATTRP) найти системную переменную OR +38 установить биты 5,4.3

LD (ATTRP),A сохранить системную переменную Подгруппа В. Команда XOR

При работе команды проверяются два разряда. Если хотя бы 1 из них, но не вместе, установлен в единицу, то результирующий бит устанавливается также в 1; иначе результирующий бит сбрасывается. Пример показывает, каким образом команда XOR выполняет восемь отдельных операций над битами. В 2-ной 10101010 16-ный AA XOR XOR

11000000_C0

01101010 6А

Команды в этой подгруппе: Мнемоника 16-ный код

XOR +DD ЕЕ DD

XOR

A

AF

XOR

H

АС

XOR

L

AD

XOR

В

А8

XOR

С

А9

XOR

D

АА

XOR

Е

АВ

XOR

(HL)

АЕ

XOR

(IX+D)

DD

АЕ

D

XOR

(IY+D)

FD

АЕ

D

При работе этой команды будут установлены или сброшены с 0 до 8 битов регистра A. Это, вероятно, вначале трудно понять, но рассмотрите пример, приведенный выше, ещё раз, а именно: AA XOR C0 дает CA.

В этом примере 2-ным операндом является байт C0, который является байтом только из битов 6 и 7. Поэтому эффект работы операции XOR заключается в переключении битов 6 и 7 первого операнда и изменении AA в CA. Использование команды XOR в программах машинного кода часто является сложным, но команда XOR A, однако, часто используется как альтернативная, для LD A,+00. Обе эти команды очищают регистр A, но XOR использует только один адрес, в то время как LD A,+00 использует два адреса. Все команды AND, OR, XOR сбрасывают флаг переноса, когда они используются. Программа, демонстрирующая эти команды, на странице 63.

Группа 10. Команды перехода

Имеется 17 команд, которые позволяют выполнять переходы внутри программы. Команды этой группы лучше всего рассматривать в 8 подгруппах.

4 из этих подгрупп содержат команды, которые условно зависят от состояния одного из основных флагов. И если требуется, флаги будут подробно рассмотрены.

Подгруппа А. Команды абсолютного перехода Мнемоника 16-ный код

JP ADDV C3 ADDV

Это команда перехода, при выполнении команды значение ADDV загружается в счётчик команд, и выполнение программы машинного кода продолжается с этого адреса.

Подгруппа Б. Команды переходов, которые используют косвенную адресацию

Мнемоника 16-ный код

JP (HL) E9

JP (IX) DD E9

JP (IY) FD E9

Эти команды приводят к тому, что 16-битная величина, хранящаяся в соответствующем регистре, загружается в счётчик команд. Команды этой группы часто используются, когда переход должен осуществляться на команду, адрес которой находится в таблице адресов.

Подгруппа В. Команда относительного перехода

Мнемоника 16-ный код

JR E 18 E

Команда позволяет сделать переход к адресам вперед на 128 байт и назад на 128 байт от текущего адреса. Заметьте, что текущий адрес фактически является адресом, идущим после E, поскольку счётчик команд уже выполнил приращение.

E всегда рассматривается как арифметическое дополнение до 2 и положительное E даёт число байт, на которое должен быть осуществлен переход, в то время как отрицательная вели на E показывает на сколько байт надо уменьшить счётчик команд.

Подгруппа Г. Команда перехода по флагу переноса Имеется 4 команды, позволяющие делать такой переход.

Флаг переноса. Этому флагу соответствует бит 0 регистра F, и он является флагом, который показывает, имело ли место или нет двоичное переполнение. Но этот флаг может при определенных условиях сбрасываться или устанавливаться.

Имеется много примеров, когда на флаг переноса не влияет выполнение команд. Кратко можно описать следующее правило:

1. Все команды ADD и ADC влияют на флаг переноса. Если нет переполнения, флаг сбрасывается, но если есть переполнение, то флаг устанавливается.

2. Все команды SUB, SBC, SP влияют на флаг переноса. Если был 2-ный заём, тогда флаг устанавливается; в противном случае сбрасывается.

3. Все команды AND, OR, XOR сбрасывают флаг переноса.

4. Команды сдвига влияют на флаг переноса (см. страницу 49) команды перехода по флагу являются:

Мнемоника 16-ный код

JP NC,ADDR D2 ADDR переход если

JR NC,E 30 E С флаг сброшен

JP C,ADDR DA ADDR переход если

JR С,Е 38 E С флаг установлен

В качестве примера этих команд рассмотрите следующую программу, которая распознает цифры в коде

ASCII.

..............................введите регистр A, хранящий код

СР +3 0 код для цифры 0

JP C,ERROR переход, если он находится

за границами диапазона СР +3A код для":"

JP NC,ERROR опять переход, если он находится

за пределами диапазона

..............................продолжение только с цифрами, т.е. диапазон 30-39

Подгруппа Д. Команды перехода по флагу 0

Имеется 4 команды, которые позволяют выполнить переход только в том случае, если флаг нуля будет таким же, как требуется командой.

Флаг 0. Этому флагу соответствует 6-й бит регистра F, и в большинстве случаев он устанавливается, если результат - 0, в противном случае он сбрасывается. Например: 6C ADD 5А даёт C6, и флаг нуля сбрасывается. 6D ADD 93 даёт 00, и флаг нуля устанавливается. Можно привести правило:

1. Все команды ADD, INC, ADC, SUB, DEC, SBC, CP, AND, OR, XOR, использующие одиночные регистры, и команды ADC, SBC использующие пару регистров, установят флаг 0, если результат равен 0.

2. Команды сдвига (страница 49), проверки битов, поиска блоков влияют на флаг.

3. Команды LD за исключением LD A,I и LD A,R не влияют на флаг нуля. Команды перехода:

Мнемоника 16-ный код

JP NZ,ADDR C2 ADDR переход только тогда,

JR NZ,E 2 0 Е когда сброшен флаг 0

JP Z,ADDR CA ADDR переход только когда,

JR Z,E 28 Е установлен флаг 0.

Команды этой группы обычно широко используются и пример показывает, как распознать символы ASCII.

..............................введите в регистр A код символа

СР +3B это символ";" ?

JR Z,S-COLON переход, если это так

СР +2С это символ"," ?

JR NZ,ELSE переход, если нет

..............................продолжение при ","

Подгруппа Е. Команды перехода по флагу знака

Имеется две команды, которые позволяют сделать переход только в том случае, если флаг знака будет таким же, как требуется командой.

Флаг знака. Этому знаку соответствует 7 бит регистра F, и в большинстве случаев он представляет собой копию старшего (левого) бита результата. Когда 8-битовое или 16-битовое двоичное число представлено в виде арифметического дополнения до 2, тогда левый бит (бит 7 или бит 15) принимает бит знака. Он сбрасывается для положительных чисел и устанавливается для отрицательных.

Поэтому флаг знака может сбрасываться с помощью положительных результатов и устанавливаться с помощью отрицательных.

Кратко опишем правило:

1. Все команды ADD, INC, ADC, SUB, DEC, SBC, CP, AND, OR, XOR, использующие 1 регистр, а команды ADC и SBC, использующие 2 регистра, будут влиять на флаг знака, как указано выше.

2. Команды поиска блока и большинство команд сдвига (стр. 49) также влияют на флаг знака.

3. Команды LD, за исключением LD A,I и LD A,R не влияют на флаг знака. Команды перехода по состоянию

флага:

JP P,ADDR F2 ADDR переход, если результат положителен

JP M,ADDR FA ADDR переход, если результат отрицателен

Команды в этой группе обычно не используются. Частично потому, что требуют абсолютного адреса и частично потому, что бит знака, может считываться некоторыми другими методами. Пример показывает использование этих команд.

..............................введите в регистр А код символа

AND А это влияет на флаг знака

JP P,ELSE коды 00 - 7F действуют отдельно

..............................продолжение только с графическими символами.

Подгруппа Ж. Команды перехода по флагу переполнение/чётности.

Имеются две команды, которые позволяют выполнить переход, если флаг переполнение/четности будет таким, как требуется.

Флаг переполнение/чётности. Этому флагу соответствует 2 бит регистра F и он является флагом двойного назначения. Некоторые команды используют флаг, чтобы указать на переполнение, в то время как другие команды используют его, чтобы хранить результат проверки на четность.

Понятие переполнение не относится к двоичному переполнению, а относится к арифметическому

_Набор системы команд_

дополнению до четного числа, как показано следующими примерами. Рассмотрите: 16-ный 0A ADD 5C даёт 66.

10-ный 10 ADD 92 даёт 102, которое правильно - нет переполнения. 16-ный 6А ADD 32 даёт 9С.

10-ный 206 ADD 50 даёт 256, которое неправильно - даёт переполнение. Переполнение может также возникнуть при вычитаниях, а именно: 16-ный 83 SUB 14 дает 6F.

10-ный 125 SUB 20 дает 105, которое неправильно, т.е. имеет переполнение.

Флаг переполнение/четность устанавливается, когда имеет место переполнение.

Понятие четности касается числа единичных битов в заданном байте. Это показано примером:

Байт 01010101 имеет чётное равенство, и флаг устанавливается.

Байт 00000001 имеет нечётное равенство, и флаг сбрасывается.

Кратко сформулируем правило:

1. Все команды AND, OR, XOR и большинство команд сдвига дают результат, который может быть проверен на четность.

2. Все команды ADD, ADC, SBC, CP, использующие одиночные регистры и команды ADC, SBC, использующие 2 регистра, дают результат, который может быть проверен на переполнение.

3. Команда INC установит флаг, если результат будет равен 16-ным 80, и команда DEC, если результат равен 16-ным 7F.

4. Различные другие команды, а именно LD A,I и LD A,R и многие из команд блока отработки также влияют на флаг переполнение/чётности.

Команды перехода этой группы:

JP PO,ADDR E2 ADDR переход, если равенство нечётное

или нет переполнения JP PE,ADDR EA ADDR переход, равенство чётное

или имеет место переполнение Команды этой подгруппы используются только в тех случаях, когда невозможно использование других

команд.

Программы, которые используют эти команды, представлены на странице 64.

Группа 11. Команды DJNZ

Одиночная команда в этой группе является одной из самых полезных и самой широко используемой в Z80. Работа этой команды может быть уподоблена циклу FOR-NEXT программы Бейсик следующего вида: FOR B=X ТО 0 STEP -1: NEXT B

В этом цикле переменной "В" присваивается значение X. Затем с каждым проходом цикла она уменьшается до тех пор, пока не достигнет значения 0. Команда DJNZ используется подобным же образом. Прежде всего, программист должен определить значение переменной цикла и занести её в регистр B. Затем идёт цикл. Наконец, используется команда DJNZ, но с большим вниманием, чтобы убедиться, что величина смещения подходит. Следующий пример показывает, как эта команда должна использоваться для печати алфавита. LD B,+1A 26 букв в алфавите, "А" - первая

LD A,+5B 16-я 5В-1А=41

SUB В печать символа (см. букву)

RST 0010 "сдвиньте" для "В", "С", и т.д.

DJ NZ,LOOP аналогично

16-м кодом для этого примера является: 06, lA, 3E, 5B, 90, 17, 10, FA, где байт "3E" является меткой цикла. Автор обнаружил, что лучшие методики для вычисления правильной величины "Е" в примерах коротких машинных кодов, подобных приведенному выше, заключаются в представлении байта "Е" величиной "FF", и затем считать в обратном направлении (в 16-ой форме) до тех пор, пока не будет достигнут байт цикла. В приведенном выше примере имеется 5 шагов назад и соответственная величина для "Е" равна FA.

Программа Бейсик, показывающая команду этой группы, представлена на странице 66.

Группа 12. Команды стека

В большинстве программ машинных кодов осуществляется активное использование машинного стека программистом в качестве места, где можно хранить данные и микропроцессором - для сохранения адресов возврата.

Команды, которые образуют эту группу, можно разделить на две подгруппы для пользователя и три подгруппы для микропроцессора.

Подгруппа A. PUSH и POP

Эти команды позволяют программисту по PUSH сохранить 2 байта данных в машинном стеке, а по POP копировать 2 байта из машинного стека. Данные должны копироваться в строго определенную пару регистров, но важно знать, что никакой записи не производится, которая указывала бы, к какому из двух регистров какой байт данных принадлежит.

Команды *** PUSH ***

PUSH AF F5

PUSH HL E5

PUSH ВС С5

PUSH DE D5

PUSH IX DDE5

PUSH IY FDE5

Команды *** POP *** POP AF F1

POP HL E1

POP ВС C1

POP DE D1

POP IX DD E1

POP IY FD E1

Нужно понимать работу этих команд, если в программе машинного кода собираются использовать машинный стек не в прямом смысле.

Когда выполняется команда PUSH, указатель стека предварительно уменьшается так, чтобы указать на свободный адрес. Затем указатель стека уменьшается вторично, и величина из младшего регистра стека копируется в стек.

Противоположные действия имеют место во время выполнения команды POP.

Важно помнить, что указатель стека после выполнения одной из этих команд указывает текущий адрес стека, использованный в "последний раз".

Команды этой подгруппы часто используются одновременно, и следующий пример подтверждает это:

PUSH AF сохранить AF

PUSH ВС сохранить ВС

.............................."другая работа"

POP ВС восстановить ВС

POP AF восстановить AF

В примере под словами "другая работа" подразумевается использование регистров A, F, В, С "без вреда", но она должна оставить указатель стека прежней величины, если вся программа должна выполняться, как требуется. Подгруппа Б. Команды обмена со стеком

Команды этой подгруппы не часто используются, но они могут оказаться полезными: Мнемоника 16-ный код

EX (SP),HL E3

EX (SP),IY DD E3

EX (SP),IX FD E3

Эти инструкции позволяют программисту обменивать текущую величину, имеющуюся в указанной паре регистров, с последним значением машинного стека. Значение указателя машинного стека не меняется.

Использование этих команд может привести к путанице, и лучше всего их использовать как альтернативные командам PUSH и POP в особых случаях. Например:

Величина "первая" находится в стеке, величина "вторая" в паре HL, и если программист намерен обменять их друг с другом, то имеется два способа:

Использовать команду EX (SP),HL. Тогда данные из стека по текущему значению указателя стека будут размещены в паре HL, а из HL передадутся в стек.

Использовать дополнительный RG для временного хранения "первого", т.е.:

POP ВС сохраните "первый"

PUSH HL "второй" передать в стек

PUSH ВС переведите "первый" в HL

POP HL ?

Кроме того, команды этой подгруппы могут использоваться для изменения адреса возврата (см. ниже). Подгруппа В. Команды CALL

Команды машинного кода CALL эквивалентны команде Бейсик "GO SUB". Команды включаются в эту группу, т.к. микропроцессор использует стек машины, т.е. область, в которой хранятся адреса "возврата".

Имеются 9 команд в этой группе, и они позволяют перейти на подпрограмму без условий или в зависимости от состояний 4-х флагов.

Командами в этой подгруппе являются:

CALL

ADDR

CD

ADDR

CALL

C,ADDR

DC

ADDR

CALL

NC,ADDR

D4

ADDR

CALL

Z,ADDR

CC

ADDR

CALL

NZ,ADDR

C4

ADDR

CALL

M,ADDR

FC

ADDR

CALL

P,ADDR

F4

ADDR

CALL

PE,ADDR

EC

ADDR

CALL

PO,ADDR

E4

ADDR

Действие команд CALL будут следующими:

Текущее значение счётчика команд, т.е. адрес первой ячейки после ADDR, сохраняется в стеке. Указатель стека изменяется как в случае команды PUSH. Старший байт счётчика команд сохраняется в стеке над младшим байтом.

Адрес затем записывается в счётчик команд, и выполнение программы продолжается. Подгруппа Г. Команды RET

Команды машинного кода RET эквивалентны команде Бейсик "RETURN". Имеются 9 команд в этой подгруппе, которые позволяют осуществить выход из подпрограммы без условий или в зависимости от состояния 4-х флагов. Командами в этой подгруппе являются:

LD D,+00 ADD А LD Е, А

LD HL,+TBL-BAS ADD HL,DE LD D,(HL) INC HL LD E,(HL) PUSH DE

RET

C9

RET

С

D8

RET

NC

D0

RET

Z

C8

RET

NZ

C0

RET

M

F8

RET

P

F0

RET

РЕ

Е8

RET

PO

E0

По команде RET адрес возврата из машинного стека побайтно восстанавливается в счётчике команд. При этом указатель стека дважды модифицируется в сторону увеличения.

Важно понимать, что восстановленный адрес возврата из машинного стека не обязательно тот, что был вначале помещен туда командой CALL.

Не совсем обычно при программировании на Бейсике модифицировать стек GO SUB, но при программировании в машинном коде это обычно имеет место.

Следующий пример показывает, как это делается. Адрес программы выбирается из таблицы адресов и на эту программу осуществляется переход.

..............................регистр А содержит входное значение

очистка регистра D дублирование входного значения и пересылка в регистр E HL указывает на таблицу указатель на точку входа получение старшего байта адреса

получение младшего байта адреса сохранение адреса в стеке

RET

возврат Подгруппа Д. Команды RST

Последняя подгруппа команд в этой группе содержит специальную команду RST или команду "повторный Эти команды являются аналогичными командам CALL, но не требуют, чтобы адрес определялся.

пуск"

Команды подгруппы:

RST 0000

С7

CALL

0000

RST 0008

CF

CALL

0008

RST 0010

D7

CALL

0010

RST 0018

DF

CALL

0018

RST 0020

E7

CALL

0020

RST 0028

EF

CALL

0028

RST 0030

F7

CALL

0030

RST 0038

FF

CALL

0038

В системе SPECTRUM восемь адресов "перезапуска" являются точками входа подпрограмм монитора, и они будут рассмотрены в главе 7.

Программа Бейсик, которая показывает команды этой, группы находится на странице 67.

Группа 13. Команды сдвига

Набор команд Z80 имеет большое число команд для сдвигов битов определенного байта. Эти команды очень часто полезны. Тем более что все они сдвигают, биты через флаг переноса, который затем может проверяться.

Сдвиг байта влево удваивает величину, записанную в этом байте (регистре), старшие биты при этом не теряются. Вовремя сдвига вправо величина делится пополам.

RCL

RL

SLA

ARC

RR

SRA

SRL

А

CB 07

CB 17

CB 27

CB 0F

CB 1F

CB 2F

CB 3F

Н

CB 04

CB 14

CB 24

CB 0E

CB 1C

CB 2C

CB 3C

L

CB 05

CB 15

CB 25

CB 0D

CB 1D

CB 2D

CB 3D

B

CB 00

CB 10

CB 20

CB 08

CB 18

CB 28

CB 38

C

CB 01

CB 11

CB 21

CB 09

CB 19

CB 29

CB 39

D

CB 02

CB 12

CB 22

CB 0A

CB 1A

CB 2A

CB 3A

Б

CB 03

CB 13

CB 23

CB 0B

CB 1B

CB 2B

CB 3B

(HL)

CB 06

CB 16

CB 26

CB 0E

CB 1E

CB 2B

CB 3E

IX+

DD CB

DD CB

DD CB

DD CB

DD CB

DD CB

DD CB

+D

D 06

D 16

D 26

D 0E

D 1E

D 2E

D 3E

IY+

FD CB

FD CB

FDCB

FD CB

FD CB

FD CB

FD CB

+D

D 06

D 16

D 26

D 0E

D 1E

D 2E

D 3E

Имеются также четыре однобайтовые команды для сдвига регистра A и две специальные команды, работающие с полубайтами.

Мнемоника 16-ный код

RLCA 07

RLA 17

RRCA 0F

RRA 1F

RRD ED 67

RLD ED 6F

Суммируя влияние этих команд на основные флаги, можно сделать следующие выводы: ¦S все команды, за исключением RLD и RRD, влияют на флаг переноса;

¦S все команды, за исключением четырех команд с одиночными байтами, влияют на флаги знака и переполнение четности.

Программа, которая иллюстрирует работу этих команд, представлена на странице 68.

Группа 14. Команды обработки битов

Набор команд Z80 имеет команды, которые позволяют определять, устанавливать и сбрасывать отдельные биты в пределах байта, помещенного в регистр или находящегося в памяти.

Подгруппа А. Команды бит

Они позволяют определять состояние определенного бита. При использовании одной из этих команд обычным является процесс проверки, например, путём использования команды JP Z.

Команды бит устанавливают флаг 0, если используемый бит сброшен, и наоборот.

Подгруппа Б. Команды SET

Эти команды позволяют устанавливать определенный бит, при этом ни один из флагов не изменяется.

На практике команды используются для установки битов, но во многих случаях их использование лучше описывать как подтверждение, что определенный бит установлен.

Команда SET, работающая с установленным битом, не будет иметь демонстрационного эффекта - ничего не изменит.

Подгруппа В. Команда RES

Данная команда сбрасывает определенный бит. Флаги не меняются. Команды этих трёх подгрупп приведены в таблице:

Ком

Биты

0

1

2

3

4

5

6

7

А

BIT

47

4F

57

5F

67

6F

77

7F

Рег.

RES

87

8F

97

9F

A7

AF

B7

BF

Св**

SET

C7

CF

D7

DF

E7

EF

F7

FF

Н

BIT

44

4C

54

5C

64

6C

74

7C

Реп

RES

84

-8C

94

9C

A4

AC

B4

BC

СВ**

SET

C4

CC

D4

DC

E4

EC

F4

FC

L

BIT

45

4D

55

5D

65

6D

75

7D

Рег.

RES

85

8D

95

9D

A5

AD

B5

BD

СВ**

SET

C5

CD

D5

DD

E5

ED

F5

FD

В

BIT

40

48

50

58

60

68

70

78

Per,

RES

80

88

90

98

A0

A8

B0

B8

СВ**

SET

C0

C8

D0

D8

E0

E8

F0

F8

С

BIT

41

49

51

59

61

69

71

79

Рег.

RES

81

89

91

99

A1

A9

B1

B9

СВ**

SET

C1

C9

D1

D9

E1

E9

F1

F9

D

BIT

42

4A

52

5A

62

6A

72

7A

Рег.

RES

82

8A

92

9A

A2

AA

B2

BA

CB**

SET

C2

CA

D2

DA

E2

EA

F2

FA

E

BIT

43

4B

53

5B

63

6B

73

7B

Рег.

RES

83

8B

93

9B

A3

AB

B3

BB

CB**

SET

C3

CB

D3

DB

E3

EB

F3

FB

(HL)

BIT

46

4E

56

5E

66

6E

76

7E

CB**

RES

86

8E

96

9E

A6

AE

B6

BE

/

Набор системы команд | | SET | C6 | CE I D6 | DE | E6 | EE | F6 | FE |

Программа, которая демонстрирует эти команды, показана на странице 70.

Группа 15. Команды обработки блоков

Имеется 8 команд обработки блоков. Эти команды очень интересны и очень полезны. Они позволяют перемещать блок данных из одной области памяти в другую или искать область памяти.

Чтобы перемещать блок данных, базовый адрес должен помещаться в пару регистров HL, адрес места назначения информации - в пару регистров DE, и число байтов в блоке - в пару регистров BC. Для того, чтобы искать область первого присутствия в памяти определенной величины, базовый адрес может опять быть в паре регистров BC, а регистр A должен содержать искомую величину.

Команды подгруппы:

Мнемоника

16-ный код

AUTOMATIC

LDIR

ED B0

LDDR

ED B8

CPIR

ED B1

CPDR

ED B9

NON-AUTOMATIC

LDI

ED A0

LDD

ED A8

CPI

ED A1

CPD

ED A9

Как можно увидеть из выше приведенной таблицы, имеются как автоматические, так и неавтоматические команды. Автоматические команды более просты и более полезны.

Автоматическая команда будет выполнять свою задачу без другой команды, составленной программистом. Когда команда LDIR выполняется МП, тогда блок данных перемещается. Отсюда следует, что выполнение автоматической команды может длиться разное время. Это время зависит от количества байтов, которые буду перемещаться.

Однако неавтоматическая команда передает только по одному байту, и требует, чтобы программист использовал команду поочередно, если блок данных перемещается или находится в стадии поиска.

Время неавтоматической команды, поэтому определено. Автоматическая команда представляет собой команду обработки блока, при выполнении которой адреса источника, места назначения информации и счётчика приращения - уменьшаются или увеличиваются МП. Каждая команда этой группы будет обсуждаться по очереди.

LDIR

Это самая распространенная команда из этой группы. Команда будет перемещать данные, адрес источника которых содержится в паре регистров HL, в область памяти с адресом, находящимся в паре регистров DE с числом байтов, определенных в паре регистров ВС. При работе одиночный байт перемещается из (HL) в (DE). Величина в паре регистров BC затем уменьшается, а величина в парах HL и DE увеличивается. Если счётчик в регистрах BC ещё не достиг 0, тогда будет пересылаться другой байт данных. Этот процесс продолжается, пока счётчик не достигнет 0, но заметьте, что в этот момент пары регистров HL и DE достигают значения адресов после блока. Флаг переполнения/чётности сбрасывается этой командой.

LDDR

Эта команда является такой же, как команда LDIR, за исключением того, что после пересылки каждого байта значения в парах регистров HL и DE уменьшаются. Поэтому команда требует, чтобы базовый адрес блока соответствовал последнему адресу блока. Место назначения информации также должно относиться к последнему адресу области памяти.

CPIR

Эта команда просматривает определенную область памяти для поиска первого наличия эталонной величины. Регистр HL должен содержать базовый адрес, а BC -число байтов для исследования, регистр A - эталонную величину. При работе байт из HL сравнивается с байтом (A). Если они не совпали, то BC уменьшается, а HL увеличивается и сравниваются следующие. Так до тех пор, пока не совпадут байты, либо BC не станет равным 0. Если совпали, тогда флаг нуля устанавливается, а флаг знака сбрасывается, а регистр HL указывает адрес выбранного байта. Величина в BC указывает, как далеко от конца блока определено совпадение. Если не совпали, то регистр BC=0, а флаги 0, знака и переполнение/чётности сбрасываются.

CPDR

Работа этой команды похожа на CPIR, но блок данных просматривается сверху вниз. Далее рассматриваются неавтоматические команды.

LDI

Выполнение этой команды даст перемещение одиночного байта данных из адреса в регистровой паре HL по адресу в регистровой паре DE. Величина в BC уменьшается. Флаг переполнение/чётности устанавливается до тех пор, пока регистровая пара BC не станет равной 0. Значения в парах HL и DE уменьшаются. Это сделано для программиста, который решает, перемещать или не перемещать байты данных. Программист, вероятно, проверит байт, который надо перемещать, и затем осуществит его перемещение.

LDD

Как LDI, за исключением того, величина в HL и DE уменьшаются.

CPI

Выполнение этой команды приведет к тому, что байт, определенный в паре HL, копируется в МП и сохраняется там до тех пор, пока величина в HL увеличивается, а в BC уменьшается. Сохраненный байт затем сравнивается с байтом в регистре A. Флаг 0 устанавливается, если они совпали, в противном случае - сбрасывается. Флаг знака сбрасывается, флаг переполнение/чётности сбрасывается до тех пор, пока BC не станет равным 0, при BC=0 он устанавливается.

CPD

Эта команда подобна CPI, за исключением того, что регистровая пара HL уменьшается.

Программа, демонстрирующая эту группу команд, приведена на странице 71.

Группа 16. Команды ввода/вывода

В Z80 имеется исчерпывающий набор команд, позволяющих программисту получать данные от внешнего источника (IN) или выдавать данные на периферию (OUT). Имеются простые, неавтоматические и автоматические команды в этой группе, хотя в SP используются только простые команды. Во всех случаях данные, которые передаются через IN и OUT, представляют форму 8-ми битовых данных. По команде IN Z80 принимает байты данных с шины данных и копирует их в определенный регистр. Во время выполнения команды IN контрольная линия IORQ активна, так же как и RD. По команде OUT МП передает данные с определенного регистра на шину данных, оттуда они поступают на периферийное устройство. Во время работы команды OUT линии IORQ и WR будут активны. В дополнение к состоянию RD, WR и IORQ периферийное устройство будет активизироваться с использованием адреса, помещенного на адресной шине во время выполнения либо IN, либо OUT команды (по требованию), этот адрес опознает адрес порта и в Z80 представляет собой 16-битный адрес. В МП Z80 используется только несколько из 65535 возможных адресов порта, позволяя периферийному устройству идентифицировать состояние определенной линии адреса. Принтер ZX выбирается линией A2, которая активна. Командами этой группы являются:

Рег. I/O Старший Младший

IN A,(+DD)

DB DD

A

A

DD

IN А, (С)

ED 78

A

В

С

IN H,(C)

ED 60

H

В

С

IN L,(C)

ED 68

L

В

С

IN В, (С)

ED 40

В

В

С

IN С, (С)

ED 48

C

В

С

IN D,(C)

ED 50

D

В

С

IN E,(C)

ED 58

E

В

С

IN (+DD),A

D3 DD

A

А

DD

IN (С),А

ED 79

A

B

С

IN (C),H

ED 61

H

B

С

IN (C),L

ED 69

L

B

С

IN (С),В

ED 41

В

B

С

IN (С),С

ED 49

С

B

С

IN (C),D

ED 51

D

B

С

IN (C),E

ED 59

E

B

С

неавтоматическое увеличение автоматическое увеличение неавтоматическое уменьшение автоматическое уменьшение неавтоматическое увеличение автоматическое увеличение неавтоматическое уменьшение автоматическое уменьшение

РI IT

Неавтоматические и автоматические команды;

INI

ED

А2

INIR

ED

B2

IND

ED

AA

INDR

ED

BA

OUT I

ED

A3

OTIR

ED

B3

OUTD

ED

AB

OUTR

ED

BB

Группа 17. Команды прерывания

Имеется 7 команд, которые позволяют прерывать систему выполнения команд Z80. Командами этой группы

являются:

EI

FB

_Набор системы команд_

DI F3

IM 0 ED 4 6

IM 1 ED 56

IM 2 ED 5E

RETI ED 5D

RETN ED 4 5

Каждая из команд будет рассмотрена поочередно.

EI

При включении Z80 система маскированного прерывания не может прервать выполнение команд. Эта ситуация существует до тех пор, пока прерывания не будут разрешены программистом по команде EI. В SP система маскирующих прерываний используется для отсчёта текущего времени и опроса клавиатуры, и эти прерывания передаются с синхронизирующей частотой 50 Гц.

DI

В любом месте программы программист может запретить прерывания по команде DI, которая не позволяет МП принимать сигналы с линии INT. В SP маскируемое прерывание невозможно во время выполнения команд SAVE, VERIFY, MERGE.

IM 0

Имеется три типа прерывания. Режим 0 выбирается автоматически МП при включении или по команде IM 0. Этот режим позволяет периферийным устройствам обмениваться информацией с МП, программа перезапуска которого должна следовать за приёмом маскированного прерывания на линии INT. Этот режим в SP не используется.

IM 1

Режим прерывания 1 выполняется по команде IM 1. При выполнении 16K монитора необходимо включить IM 1 в начало программы. В этом режиме перезапуск с адреса 0038 будет всегда выбираться при приёме сигнала на линии INT, длительность которого соответствует возможности обработки системы маскированного прерывания. В SP программа в кодах с 0038 корректирует данные, полученные в реальном времени, и опрашивает клавиатуру.

IM 2

Режим прерывания 2 не используется в SP, но является самым мощным из трёх режимов. В нем периферийное устройство может указать МП, какая из 128 подпрограмм должна обрабатывать маскированное прерывание. Содержимое регистра I и байта, который поступает на внешнее устройство, используются вместе, чтобы образовать 16-ричный адрес, который затем используется для выбора таблицы векторов, размещенной заранее в памяти.

RETI

Это специальная команда возврата для использования с программой маскированного прерывания. По этой команде происходит возврат с сохранением маскированного прерывания, принятого раньше.

RETN

Эта команда подобна RETI, но она применима в конце программы немаскированного прерывания.

Группа 18. Дополнительные команды

Имеется 6 команд, которые рассмотрены ниже, а именно:

1 AFRIN T

DAA 27

Каждая из этих команд будет рассмотрена по очереди.

CPL

Представляет собой простую команду, которая инвертирует регистр A, т. е. она устанавливает сброшенный бит и сбрасывает установленный. Это называется дополнением до 1. Основные флаги не изменяются.

NEG

Это команда дополнения до 2-х содержимого регистр A, т.е. инвертирование с увеличением. Эта команда влияет на основные флаги. Флаги знака и 0 зависят от результата. Флаг переноса будет установлен, если регистр A первоначально был 0, в противном случае - сброшен.

SCF

Установка флага переноса.

CCF

Сброс флага переноса.

HALT

Это специальная команда, заставляющая МП останавливать выполнение команд, пока не возникнет прерывание. В SP единственными прерываниями могут быть маскируемые прерывания. Следовательно, при поступлении прерываний команда HALT заканчивается следующим сигналом маскируемого прерывания. Команда "PAUSE" использует это, чтобы подсчитать 1/50 сек.

DAA

Это 10-ная переупаковка регистра A в 2-10-ной арифметике (BCD), 10-ные цифры от 0 до 9 представлены 2-ными тетрадами 0000-1001, а тетрады 1010- 1111 не используются. Поэтому:

Байт 0000 0000 представляет число 0

Байт 0011 1001 представляет число 9

Эта команда превращает байты в 2-10-ную систему (BCD). Флаги 0 и знака зависят от результата, и флаг переполнения/чётности устанавливается. Флаг переноса зависит от того, было ли переполнение или заём при операциях BCD.




СОДЕРЖАНИЕ:
  1. Принципы Работы Микрокомпьютерной Системы - Z80 - Микропроцессор; 16k Rom; Ula; Pal - Кодировщик; Rom Область; Карта Памяти Экранной Области; Область Атрибутов; Буфер Печати; Системные Переменные; Карты Микродрайвов; Область Информационных Каналов; Область Бейсик-Программы; Формат Строк Бп; Область Переменны; Область Редактора; Рабочая Область; Стек Вычислителя; Резервная Память; Машинный Стек; Go Sub - Стек; Графическая Область, Определенная Пользователем.


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

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



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

Похожие статьи:
Книга - Тайники ZX-Spectrum: Системные Процедуры.
Развитие SPECTRUM - Новый Spectrum от Синклера.
scene more - настоящие сценеры: Нету больше у нас нормальной прессы! Нету!
Вступление - о первом номере железячной газеты.
Фонд поддержки спектрума - Когда слышишь разговоры о сегодняшнем состоянии платформы Спектрума, то часто это довольно крайние мнения.

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