page27
16-битовые арифметические команды. Команды этой группы сведены в таблицу 5.1.5. Их
мнемоники
соответствуют
принятым
для
8
битных
арифметических
команд,
только
дополнительно
указывается
приемник
результата.
16-битовые
арифметические
команды
позволяют использовать регистровые пары и 16-разрядные регистры.
В этой группе не предусмотрена команда SUB, поэтому при потребности в ней следует
применять команду SBC, предварительно сбросив флаг переноса, например, командой AND A.
Команды вращения и сдвига. Эта группа команд объединена в таблице 5.1.11.
Эти команды позволяют адресоваться к любому регистру или ячейке памяти. Они особенно
удобны при выполнении умножения и деления. Две команды (RLD и RRD) вращают тетрады
аккумулятора и ячейки памяти, адресуемой парой HL. Их целесообразно применять в двоично-
десятичной (BCD) арифметике. Конкретный вид вращения или сдвига ясен из символических
пояснений к каждой команде. Эта группа содержит 76 команд.
Команды
для
работы
с
битами.
Почти
в
каждой
программе
требуется
возможность
устанавливать, сбрасывать и проверять состояние, какого либо бита одного из регистров либо
ячейки памяти. Такие биты в самом общем случае выполняют роль флагов, которые указывают
программе
какие
предпринять
действия.
МП
Z80
имеет
команды,
которые
производят
тестирование, установку и сброс любого бита регистра или ячейки памяти. Они сведены в таблице
5.1.7. При регистровой адресации действия производятся над аккумулятором или над одним из
РОНов.
При
косвенной
и
индексной
адресации
действия
производятся
над
памятью.
При
тестировании бита устанавливается флаг Z, если бит, равен нулю. Эта группа содержит 240
команд.
Команды Переходов собраны в таблице 5.1.6. Переход - это ветвление программы, при
котором в счетчик команд PC загружается новый адрес. В команде он представлен абсолютно,
относительно или косвенно. Следует помнить, что условный переход происходит только при
выполнении условия, заданного в команде. Если условие не выполняется, то программа переходит
к команде, следующей за командой перехода. При абсолютной адресации команда содержит адрес
перехода.
Такая
команда
состоит
из
трех
байтов:
кода
операции,
младшего
байта
адреса
и
старшего байта адреса перехода.
При
относительной
адресации
команда
состоит
из
двух
байтов.
Второй
байт
-
это
расстояние между адресом перехода и текущим состоянием счетчика команд (т.е. смешение).
Смешение может быть от +127 до -126 относительно адреса кода операции команды, следующей
за командой перехода.
При косвенной адресации в командах перехода содержим е регистровой пары HL пли одног
из индексных регистр (IX или IY) прямо загружается в счетчик команд.
Для организации циклов в программе очень удобна команда DJNZ e. Эти двухбайтная
команда перехода уменьшает содержимое регистра B на единицу, и если оно не стало равно нулю,
то происходит переход на смешение e, заданное в команде.
Группа команд перехода не влияет на состояние флагов.
Команды вызова и возврата. Эта группа объединена в таблице 5.1.10.
Команда вызова подпрограммы CALL - это специфическая команда перехода, при которой
МП
запоминает
адрес
команды,
следующей
за
командой
CALL.
Команда
возврата
RET
противоположна команде CALL. В ней адрес из стека прямо загружается в счётчик команд, и
осуществляется возврат к прерванной программе. МП имеет две специальные команды возврата:
RETI - возврат из маскируемого прерывания и RETN -возврат из немаскируемого прерывания.
Команда
RETI
является
единственной
командой,
которая
распознается
периферийными
микросхемами комплекта Z80. Это необходимо для организации приоритетных прерываний и
нормального возврата из прерываний, поступивших от периферийных схем. Об этом подробно
написано в книге 7 "Построение систем. Программирование. Отладка".
Команды
вызова
подпрограмм
состоят
из
3
байтов.
Однако,
специфические
команды
рестарта RST p состоят из одного байта. Фиксированный адрес перехода встроен в код операции
этих команд (см. методы адресации).
Группа команд вызова и возврата не влияет на состояние флагов.
Команды
ввода-вывода.
Набор
команд
ввода-вывода
представлен
в
таблице
5.1.9.
Адресация в этих командах может быть непосредственной либо косвенной, но регистру C.