(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 постоянно используется операционной системой, и модификация его содержимого неизбежно приведет к сбою. Изученные на данный момент способы адресации байта многократ- но встретятся нам в дальнейшем в арифметических, логических, сдвиговых операциях, поэтому постарайтесь хорошо их усво