Регистр 1 - регистр вектора прерываний, используется для размещения адресов устройств ввода-вывода. Однако BSPECTRUMe эта возможность не используется и 1- регистр используется для генерации TV - сигнала.
Регистр R- регенерации памяти. Он является простым счетчиком, который увеличивается каждый раз при выполнении цикла регенерации. 3начение в регистре циклически изменяется от 0 до 255.
Арифметико-логическое устройство (АЛУ).
В АЛУ выполняются арифметические и логические операции. Возможно выполнение сложения и вычитания, а также АЛУ способно выполнять большое количество битовых операций и устанавливать флаги, чтобы показать результат.
СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА Z-80.
Команды и данные.
Команды поделены на 18 групп, каждая из которых состоит из тех команд, которые сильно похожи друг на друга. Существует шесть классов данных, которые могут следовать за командой.
1.0днобайтовая константа (+DD).
Это число А в диапазоне 00-FFh,(0-65535d). Те команды, которые требуют за собой однобайтовую константу, имеют мнемоническую приставку +DD. Например: LD HL,+DDDD.
2. Двухбайтовая константа (+DDDD).
Это число А в диапазоне 0000-FFFFh (0-65535d).Те команды, которые требуют за собой двухбайтовую константу, имеют мнемоническую приставку +DDDD. Например: LD HL,+DEDD.
3. Двухбайтовый адрес (ADDV).
Это число А в диапазоне 0000-FFFFh (0-65535d),то есть число, которое используется как адрес памяти. Те команды, которые требуют за собой двухбайтовый адрес, имеют приставку ADDV, например: JP ADDV.
4. Однобайтовая константа смещения(e).
Это число А в диапазоне 00-FFh(-128+127d).Число вегда представлено в дополнительном коде.Те команды,которые требуют за собой однобайтовую константу,имеют мнемоническую приставку e.Наприме:JP e.
5. Однобайтовая индуксирующая константа смещения (+D).
Это число А в диапазоне 00-FFh, (-128 +127d) представлено дополнительной арифметике. Те команды, которые требуют за собой однобайтовую индексирующую константу смещения, имеют мнемоническую приставку +D. Например: LD A,(JX+D)
6 Однобайтовая индексирующая константа смещения и однобайтовая константа (+D,+DD).
Это два числа в диапазоне 00-FFh, первое из которых рассматривается как десятичное -128+127,а второе - как десятичное 0-255. Команды, требующие два байта данных, сопровождаются мнемониками D и +DD.Например:LD (JX+D),+DD.
ГРУППА КОМАНД.
Существует много путей для разделения на группы сотен различных команд. Метод ,выбранный, здесь, разделяет команды на 18 функциональных групп.
Группа 1. Команда “нет операции”
Мнемоника16-ный код
NOP 00
Выполнение команды требует 1,14 мкс. Ни один из регистров или флагов не изменяется. Команда NOP используется программистом для организации задержек, но чаше для удаления ненужных команд из программы.
Группа 2. Команды загрузки регистра константами.
Мнемоника16-ный код
LD A,+DD 3EDD
LD H,+DD 26DD
LD L,+DD 2EDD
LD B,+DD 06DD
LD C,+DD 0EDD
LD D,+DD 16DD
LD E,+DD lEDD
Каждя из этих команд требует два байта памяти: один для кода операции, второй для константы. Команды записывают в регистр ответствующие значения, старые значения регистра пропадают.
Сведущие команды выполняют загрузку пары регистров двухбайтовыми константами.
Мнемоника16-ный код
LD HL,+DDDD 21 DD DD
LD BC,+DDDD 01 DD DD
LD DE,+DDDD 11 DD DD
LD IX,+DDDD DD 21 DD DD
LD IY,+DDDD FD 21 DD DD
LD SP,+DDDD 31 DD DD
Строка команды требует 3 или 4 байта в памяти. Код операции занимает 1 или 2 байта ,и 2 байта занимает константа. Первый байт константы загружается в младший регистровой пары т.е. L,C,E,X,Y,P, а второй байт в старший регистр, т.е. H,B,D,l,S. Эти команды записывают в регистровые пары данные, которые часто рассматриваются программистом как двухбайтовый адрес, но могут быть также и двухбайтовым числовым значением и двумя отдельными однобайтовыми числовыми значениями.
Команды этой группы не изменяют флагов.
Группа 3. Команды копирования регистров и обмена. Существует 59 команд, которые выполняют копирование регистров и регистровых пар .Эти команды можно разделить на 4 подгруппы.
Подгруппа А. Команды копирования типа регистр-регистр. Следующая таблица дает коды операций команд, выполняющих копирование содержимого одного регистра в другой.
LD LD LD LD LD LD LD
регистрA,R H,R L,R B,R C,RD,R E,R
A 7F 67 6F 47 4F 57 5F
H 7C 64 6C 44 4C 54 5C
L 7D 65 6D 45 4D 55 5D
B 78 60 68 40 48 50 58
C 79 61 69 41 49 51 59
D 7A 62 6А 42 4A 52 5A
E 7B 63 6B 43 4B 53 5B
Ни одна из команд, приведенных в таблице, не изменяет флаги. Существует кроме того 4 команды для I и R регистров.
Мнемоника16-ный код
LD A,I ED57
LD A,R ED5F
LD I,A ED47
LD R,A ED4F
Эти последние команды влияют на флаг переполнения четности.
Подгруппа В. Команды копирования типа регистровая пара- регистровая пара
Существует только 3 команды этой подгруппы. Они копируют значения в указатель стека.
Мнемоника16-ный код
LD SP,HL F9
LD SP,IX DD F9
LD SP,IY FDF9
Эти команды не изменяют содержимое флагов. Заметим, если содержимое регистровой пары надо копировать в другую регистровую пару и эти команды не подходят, необходимо выполнить две команды копирования регистр-регистр. Например, нет команды LD HL,DE, и её заменяют, используя LD H,D и LD L,E. Или содержимое первой регистровой пары может быть сохранено в стеке и затем переписано во вторую регистровую пару.
Подгруппа С. Команды DE,NL.
Существует только одна команда, которая позволяет обменивать содержимое регистровых пар в пределах основного набора регистров.
Мнемоника16-ный код
EXX DE,HL EB
Это очень полезная команда позволяет обменивать содержимое пары DE с содержимым пары HL. Значение флагов не изменяется. Команда используется, когда необходимо, чтобы адрес или двухбайтовая числовая константа из пары DE была записана в пару HK, но содержимое последней не было потеряно.
Подгруппа D. Команды альтернативного набора регистров.
В этой группе 2 команды.
Мнемоника16-ный код
EXX D9
EX AF,A’F 08
Команда EXX вызывает переключение регистров H,L,B,C,D,E на регистры H’,L’,B’,C’,D’,E’. Команды EXAF,A’F, как следует из мнемоники, переключают рег. A и F на A’ F. Альтернативные регистры часто используются для хранения адресов и данных. Помещенные в альтернативные регистры эти значения сохраняются от искажения и могут быть легко и просто восстановлены.
Группа 4.Команды загрузки регистров из памяти.
В систему Z80 входит много команд, позволяющих находить данные в памяти и затем загружать их в регистры. Все эти команды требуют, чтобы программист указал адрес или пару адресов в памяти, откуда данные должны быть скопированы в регистр-получатель данных.
Команды этой группы лучше рассматривать как команды трех подгрупп в соответствии с методом адресации. Виды адресации:
· косвенная- двухбайтовый адрес уже размещен в адресной регистровой паре;
· непосредственная -действительный адрес указан в двух байтах вслед за кодом операции;
· индексная- адрес данных должен быть вычислен путем сложения значения смещения D с основным адресом, уже содержавшимся в регистровой паре IX или IY.
Подгруппа A .Команды, использующие непосредственную адресацию.
Мнемоника16-ный код
LD A ,(ADDR) 3A ADDR
LD HL ,(ADDR) 2AADDR
LD BC ,(ADDR) ED 4B ADDR
LD DE ,(ADDR) ED 5B ADDR
LD D ,(IX+D) DD 5D D
LD E ,(IX+D) DD 5E D
Для команд, использующих пару IY ,надо изменить IX на IY и DD на FD. Ни одна из команд этой группы не меняет флаги.
Группа 5.Команды записи в память содержимого регистра или константы.
Обычно команды этой группы выполняют операции, противоположные тем, которые делают команды группы 4.Команды позволяют содержимое регистров переписывать в память или записывать туда константы. Эти команды лучше рассмотреть по трём группам.
Подгруппа A. Команды непосредственной адресации.
Мнемоника16-ный код
LD(ADDR) ,A 32 ADDR
LD(ADDR),HL 22 ADDR (обычная форма)
ED 63 ADDR (необычная форма)
LD(ADDR),BC ED 43 ADDR
LD(ADDR),DE ED 53 ADDR
LD(ADDR),IX ЕD 22 ADDR
LD(ADDR),IY ЕD 22 ADDR
LD(ADDR),SP ЕD 73 ADDR
Приведённые команды приводят только непосредственную адресацию и важно заметить, что нет команд для записи в память констант. Если это необходимо, константа предварительно должна быть загружена в регистр A. Затем выполняется LD(ADDR),A. Команды типа LD(ADDR),HL-фактически двойные команды: LD(ADDR),L и LD(ADDR+1),H. Команды подгруппы часто используются для сохранения адресов и значений в памяти, когда эти значения используются как переменные. Например, часто используется LD(RAMTOP),HL, где RAMTOP -метка пары адресов памяти, используемых для хранения текущего значения верхней границы памяти. Выборка текущего значения верхней границы может быть позднее выполнена команда 4 группы, например:
LD HL,(RAMTOP).
Подгруппа B. Команды косвенной адресации.
Команды этой подгруппы позволяют копировать содержимое регистров в память, адрес которой содержится в регистровой паре HL,BC или DE.
существует также команда записи однобайтовой константы по адресу, указанному в паре HL.
Мнемоника 16-ный код
LD(HL),A 77
LD(BC),A 02
LD(DE),A 12
LD(HL),X 74
LD(HL),L 75
LD(HL),B 70
LD(HL),C 71
LD(HL),D 72
LD(HL),E 73
LD(HL),+DD 36DD
Подгруппа C. Команды индексной адресации.
Мнемоника 16-ный код
LD(IX+D),A DD 77 D
LD(IX+D),H DD 74 D
LD(IX+D),L DD 75 D
LD(IX+D),B DD 70 D
LD(IX+D),C DD 71 D
LD(IX+D),E DD 73 D
LD(IX+D),+DD DD 36 DDD
Для команд, использующих IY-регистровую пару, надо изменить IX на IY и DD на DF.
Группа 6.Команды сложения.
Эта группа команд выполняет арифметические действия. Команды сложения позволяют программисту прибавить( в абсолютной двоичной арифметике) заданное число к регистровой паре, регистру или индексному адресу памяти.