Nicron #05
31 октября 1996

Курс изучения ассемблера - система комманд процессора Z80 (5 часть).

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

   Изученные на данный момент способы адресации байта многократ-
но встретятся нам  в дальнейшем  в  арифметических,  логических,
сдвиговых операциях, поэтому постарайтесь хорошо их усво




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

Похожие статьи:
Kaktus - Здоровая критика.
Юмор - анекдоты.
Реклама - Реклама и объявления ...

В этот день...   22 ноября