(C) WLODEK BLACK
Здравствуйте, друзья! После выхода 4-го NICRON-а произошел резо-
нанс - мне прислали аж два письма с одним и тем же вопросом:
что это за процессор Z380?!
Уважаемые коллеги, вы абсолютно правы: сказал "А" - говори "Б".
Но, к сожалению, пока мне ответить нечего. В субботу 2 ноября я
встречусь с Егором Вознесенским, и только после этого у меня бу-
дут новости. В предыдущие визиты я видел у него книгу "Z380 CPU"
издания корпорации "Zilog". Если Егор согласится дать мне ее по-
читать, новостей будет много. Иначе - новостей будет меньше, но
все равно они будут. Спасибо всем за проявленное внимание!Ждите
следующий номер газеты! А сейчас продолжим занятие...
004h. СИСТЕМА КОМАНД ПРОЦЕССОРА Z80A.
Под системой команд понимают перечень групп существующих
команд, объединенных по смыслу и назначению. Выделяют следующие
группы команд:
- информационного обмена: загрузки, пересылки данных;
- управления ходом программы: передачи управления (переходов),
обращения к подпрограммам, организации циклов и т.п.;
- арифметические и логические команды; команды сдвигов;
- ввода-вывода;
- специальные.
Приведенное деление достаточно условно и субъективно. Разные
авторы по-разному относятся к группированию команд, но в целом
все сходятся на примерно такой трактовке.
Система команд процессора Z80 может показаться достаточно
сложной - в ней насчитывается 158 оригинальных (то есть самосто-
ятельных по смыслу) команд;
с учетом их модификаций и прочих"вариаций" Z80 имеет 696 команд,
и то только опубликованных разработчиком процессора. Многочис-
ленные исследования в 80-х годах (тут надо особую благодарность
выразить польским "хакерам") выявили еще целую группу неопубли-
кованных, но однозначно выполняемых процессором операций. О мас-
штабах проделанной работы можно судить хотя бы по такому факту:
энтузиасты обнаружили новый, неизвестный самим авторам процессо-
ра, способ адресации! В специальном приложении к нашему курсу
мы познакомим вас с некоторыми интересными "подпольными" коман-
дами. ...Для сравнения: процессор Intel 8088 IBM PC/XT имеет
100 оригинальных команд и 300 кодов операций. Однако изучить ас-
семблер Z80 проще, нежели PC-шный,главным образом за счет более
простой системы адресации.
Мы займемся изучением команд процессора в порядке от простого
к сложному и стараясь по возможности начинать с наиболее употре-
бимых команд.
005h. Команды пересылки данных.
Эта группа команд входит в число важнейших, ибо для того,
чтобы обрабатывать данные, их нужно откуда-то брать, а потом ку-
да-то девать.
Для всех команд пересылок используется одна общая основа мне-
моники - LD - от слова "load" - загрузить.
Способы адресации.
Под этим понятием подразумевается способ указания местонахож-
дения источника и приемника данных. Различают следующие виды ад-
ресации:
- непосредственная. В регистр загружается байт, указанный в са-
мой команде;
- регистровая. Байт пересылается из одного 8-разрядного регист-
ра в другой;
- прямая. Байт пересылается из регистра-аккумулятора в память
или наоборот по адресу, указанному прямо в команде;
- косвенная.Байт пересылается из регистра в память или наоборот
по адресу, указанному в 16-разрядной паре регистров;
- индексная.Байт пересылается по адресу, вычисляемому как сумма
значений базового адреса, хранящегося в индексном регистре IX
или IY, и смещения, входящего в состав команды.
К некоторым определениям может добавляться слово "расширенная".
Расширенная адресация подразумевает оперирование с 2-байтовым
данным.
Иногда упоминают еще неявную адресацию. Она имеет место в коман-
дах, всегда использующих одни и те же источники и приемники дан-
ных.
Во всех случаях написания команд пересылок и других действий,
когда в команде присутствуют операнд-источник и операнд-прием-
ник, на первом месте указывается приемник, а на втором - источ-
ник. Например, LD A,E - означает переслать содержимое регистра
E в аккумулятор, а не наоборот. Логичность такого стандарта ста-
нет понятна, если посмотреть на любую команду, в которой второй
операнд - константа, входящая в состав команды:
ADD A,64 -сложить содержимое аккумулятора с числом 64,результат
поместить в аккумулятор.
Во всех двуместных операциях принято фундаментальное правило:
содержимое второго операнда (источника) в результате операции
не изменяется.
Многие способы адресации байта применяются и для пересылки
16-разрядных данных. Большинство способов адресации пригодны и
для арифметических, логических операций, операций сдвига, ко-
манд переходов и др.
Команды 8-разрядных пересылок.
Между регистрами A,B,C,D,E,H,L возможны взаимные пересылки в лю-
бых комбинациях, например, LD A,C; LD E,L; LD H,D.
Пересылка по прямому адресу возможна только для аккумулятора:
LD A,(addr); LD (addr),A. Обратите внимание на скобки. Круг-
лые скобки используются только как признак того, что их внутрен-
нее содержимое является адресом, а не константой. Использовать
круглые скобки в арифметических выражениях для изменения приори-
тета операций нельзя.
Косвенная адресация аккумулятора может осуществляться парами
HL,DE и BC:
LD A,(HL); LD (DE),A; LD (BC),A.
Косвенно адресовать по (HL) можно регистры A,B,C,D,E:
LD E,(HL); LD (HL),C; LD A,(HL).
Строго говоря, регистры H и L тоже не исключение,но конструкции
типа LD H,(HL), приводящие в результате к изменению адреса в ад-
ресующей паре регистров - скорее поле деятельности виртуозов от
ассемблера,а не начинающих.
Косвенная адресация применяется обычно в случаях,когда адрес
пересылки вычисляется в программе, либо для сокращения длины
программы при частом обращении по одному и тому же адресу, так
как команды LD (HL),r (r - регистр общего назначения) и аналоги-
чные ей - однобайтовые.
По адресу (HL) можно занести и константу: LD (HL),d8 (d8 -
8-разрядное число).
Индексная адресация осуществляется на основе сложения базово-
го адреса из 16-разрядного регистра IX или IY c 8-разрядным сме-
щением, входящим в состав команды. Байт смещения является треть-
им по счету в полном коде команды. Вся команда может быть трех-
байтовой - для пересылки содержимого регистра и четырехбайтовой
- для занесения в ячейку ОЗУ константы. Примеры:
LD E,(IX+0); LD (IY-5),07FH; LD (IX+REMOVE),A. В последнем при-
мере в качестве операнда-смещения использовано имя-идентифика-
тор. Как пользоваться именами - идентификаторами и метками, мы
поговорим вскоре.
Значение байта смещения, входящего в состав команды с индекс-
ной адресацией, рассматривается как 7-разрядное целое со знаком.
То есть доступ возможен к области памяти в участке -128...+127
относительно значения индексного регистра.При написании команды
можно пользоваться знаком минус; ассемблер сам вычислит соответ-
ствующий байт.
Индексная адресация возможна для A,B,C,D,E,H,L,d8.Невозможно
выполнение LD (IX+nn),(HL); LD (IX+nn),(IY+mm) и т.п., то есть
"индексно-косвенная" и "индексно-индексная" адресация отсутст-
вует.
Внимание! Экспериментируя с индексной адресацией на компьюте-
ре "Спектрум", не изменяйте значение регистра IY! В "Спектруме"
IY постоянно используется операционной системой, и модификация
его содержимого неизбежно приведет к сбою.
Изученные на данный момент способы адресации байта многократ-
но встретятся нам в дальнейшем в арифметических, логических,
сдвиговых операциях, поэтому постарайтесь хорошо их усво
Other articles: