Программирование в машинных кодах и на языке ассемблера 1993 г.

Особенности процессора Z80 - несколько страниц краткого повторения материала 1-ой части, рассмотрение основных особенностей процессора.


1. ОСОБЕННОСТИ ПРОЦЕССОРА Z-80

Мы полагаем, что приступая к изучению данной книги, Вы либо уже проработали "Первые шаги в машинных кодах Z-80", либо сами обладаете достаточным уровнем подготовки. Тем не менее, мы уделим несколько страниц краткому повторению материала 1-ой части, концентрированно рассмотрев основные особенности процессора .

Регистры процессора Z-8 0 очень несимметричны и программист должен тщательно планировать, какие данные и адреса в какие регистры направить.

1.1. Аккумулятор (регистр А) и регистровая пара HL обладают отличительными уникальными особенностями.

Аккумулятор - единственный однобайтный регистр, который может загружаться и выгружаться напрямую. Аккумулятор - единственный регистр, для которого можно ОДНОБАЙТНОЙ командой сделать сдвиг, инверсию, изменение знака. Его можно загрузить или

выгрузить косвенной адресацией путем указания на адрес, содержащийся в регистровых парах BC или DE. Для него могут выполняться операции IN и OUT с прямой адресацией.

HL - единственная регистровая пара, которая может служить в качестве косвенного указателя адреса для арифметических и логических операций или при загрузке/выгрузке регистров, отличных от аккумулятора.

HL - единственная регистровая пара, содержимое которой может быть напрямую передано в указатель стека SP или в программный счетчик PC.

Более того, регистр HL может служить в качестве аккумулятора двойной длины в операциях 16-разрядного сложения.

Благодаря наличию инструкции EX DE,HL, имеется возможность полного обмена содержимым между регистрами DE и HL.

Регистр HL почти всегда используется для хранения адресов, потому что имеются операции, позволяющие косвенное обращение к данным, находящимся в адресах, на которые указывает содержимое регистра HL, а также благодаря наличию таких операций, как LD SP, HL; JP (HL) ; EX (SP) , HL; EX DE, HL. Если для операции необходимо наличие второго адреса, то его целесообразно хранить в регистровой паре DE благодаря наличию команды EX DE,HL.

1.2. Очень часто одни и те же регистры называют по-разному. Регистры A,B,C,D,E и L называют 8-битными. Регистровые пары BC (старший - В) , DE (старший - D) , HL (старший - H) называют 16-битными регистровыми парами. Термины "регистровая пара ВС", "регистровая пара В", "регистр ВС" означают одно и то же. Это же относится и к регистровым парам DE и HL. Равнозначны же и термины "регистровая пара", "регистр двойной длины", "16-разрядный регистр", "16-битный регистр".

1.3. Влияние операций на флаги в высшей степени неоднозначно. Вот некоторые необычные эффекты:

- логические операции OR, XOR и AND обнуляют флаг переноса;

- однобайтные операции ротации аккумулятора не влияют на флаги, кроме флага переноса;

- при работе с регистровыми парами загрузка данных в rp,

выгрузка данных в память, перемещение данных из rp в rp, увеличение содержимого пары на единицу (инкремент) , уменьшение на единицу (декремент) не влияют на флаги вообще;

- операции 16-битного сложения влияют только на флаг переноса .

1.4. Флаг четности/переполнения выполняет двойную роль. В одних случаях он указывает на наличие четности или нечетности содержимого аккумулятора (понятие четности относится не к числу, содержащемуся в аккумуляторе, а к количеству включенных битов); в других случаях этот флаг указывает на наличие переполнения (в двоичной дополнительной арифметике).

1.5. Кроме прямой адрсации, Z-80 допускает также косвенную и индексную адресацию. Косвенной адресации через ячейки памяти нет. Этот недостаток компенсируется путем загрузки адреса в регистр HL. Таким образом, косвенная адресация - это двуступенча-тый процесс. Адрес при косвенной адресации может содержаться и в регистрах BC и DE, но в этом случае косвенная адресация возможна только в операциях с аккумулятором.

1.6. Индексные регистры позволяют реализовать методы индексной адресации, когда базовый адрес содержится в индексном регистре, а после кода операции задается величина смещения адреса искомой ячейки относительно базового. Смещение S может быть только 8-битным (от 0 до 255) . Основная цель индексной адресации - работа с массивами данных как с таблицами.

В более общей форме индексной адресации с 16-битным смещением необходимы операции сложения содержимого регистровых пар, при этом регистр HL выступает в качестве аккумулятора. Таким образом, в данном случае, индексная адресация требует несколько шагов. Смещение (16-битное) загружается в одну регистровую пару, базовый адрес - в другую. Одной из этих пар обязательно должна быть HL. Другая может быть любой, например, BC. Далее производится сложение ADD HL,BC, а затем сумма используется как косвенный адрес в операциях с регистром (HL) .

1.7. Многие операции имеют побочные эффекты и при программировании этим активно пользуются. Так, в системе команд процессора нет команды на очистку аккумулятора. Для этой цели используют команды SUB A или XOR A.

Сброс флага переноса - AND A или OR A.

Логический сдвиг аккумулятора влево - ADD A,A.

Как AND A, так и OR A сбрасывают флаг переноса, а остальные флаги устанавливают в соответствии с содержимым аккумулятора, но запомните: загрузка регистра не влияет на состояние флагов.

1.8. Ветвление в программах может исполняться посредством команд условного и безусловного переходов. Для безусловного перехода существуют два метода - абсолютный переход по заданному адресу и относительный переход на заданное количество байтов вперед или назад. Им соответствуют мнемоники JP и JR.

Наборы команд для абсолютного и относительного условного переходов отличаются. Относительный переход выполняется только по состоянию флагов переноса и нуля, а абсолютный - по флагу переноса, нуля, знака и переполнения/четности.

Относительные переходы занимают меньше места в памяти (2 байта вместо 3), но исполняются медленнее (12 тактовых циклов вместо 10) .

1.9. Операции инкремента и декремента ведут себя по-разному, в зависимости от того, для однобайтного или для двухбайтного операнда они применяются. Для однобайтного регистра они влияют на все флаги, кроме флага переноса. Для двухбайтного регистра они не влияют на флаги вообще. Таким образом, при использовании 16-битной пары, например BC, в качестве счетчика, единственный способ убедиться, что ее содержимое равно нулю - это выполнить операцию логическое "ИЛИ" между отдельными регистрами этой пары.

LD A, B OR C

Только если и в B и в C содержатся нули, результат этой операции будет равен нулю. 16_ТИ РАЗРЯДНЫЕ РЕГИСТРЫ ПРЕДНАЗНАЧЕНЫ В ОСНОВНОМ ДЛЯ ОПЕРАЦИЙ С АДРЕСАМИ, А НЕ С ДАННЫМИ, отсюда такая сложность действий.

1.10. Система команд процессора Z-80 создавалась на основе системы команд процессора 8080. Те операции, которые являются дополнительными по отношению к процессору 8080, выполняются медленнее, чем аналогичные им операции того же метода адресации. Это операции с отдельными битами, команды арифметического сдвига и некоторые операции копирования. Они работают медленнее, т.к. перед ними стоит префикс, который распознается процессором и сообщает ему, что операция не принадлежит к набору 8080, а следующий байт является кодом операции.

1.11. Процессор Z-80 допускает проведение операций со стеком. На стек может помещаться только содержимое регистровых пар или индексных регистров. Для этих операций можно рассматривать регистры A и F как отдельную регистровую пару AF, состоящую из аккумулятора (старший байт) и набора флагов (младший байт) . Команды CALL и RET помещают адрес на стек или снимают его со стека.

1.12. Процессор Z-80 имеет триггер управления прерываниями. Он либо разрешает, либо запрещает обработку прерываний. Состояние этого триггера можно проверить с помощью команды LD A, I или LD A,R. И та и другая команда передает состояние триггера прерываний во флаг переполнения/четности регистра F.

1.13. Для процессора Z-80 действуют следующие общепринятые соглашения:

- 16-битный адрес хранится в памяти так, что сначала записывается младший байт, а затем старший. Этот же порядок принят в процессорах 8080, 8085 и 6502. Противоположный порядок принят, например, в процессорах 6800 и 6809;

- в регистре SP (указатель стека) содержится адрес, по которому находится младший байт содержимого вершины стека. Такой же порядок принят для процессоров 8080, 8085, 6800. В процессорах 6502 принят другой порядок - указатель указывает на очередной свободный адрес;

- когда прерывание разрешено, триггер прерываний содержит 1 и когда запрещено - 0. Этот же порядок в процессорах 8080 и 8085, но противоположный - в процессорах 6502, 6800, 6809.

Процессор Z-80 является одним из самых насыщенных в мире по системе команд, которых насчитывается около 700. В то же время очевидно, что разработчики не могут сделать никакой процессор всеохватывающим. Планируя набор команд, разработчики принимают, во-первых, самые нобходимые команды и, во-вторых, учитывают возможность их комбинирования для реализации дополнительных возможностей.

В этом обширном разделе мы рассмотрим те "маленькие хитрости", которые позволяют программисту "конструировать" новые функциональные команды из имеющихся в стандартном набор Z-80.

В основу подборки этих приемов мы положили три принципа:

- дать очевидно полезные приемы и решения;

- дать эквиваленты командам, имеющимся в системах других процессоров, но отсутствующим в системе команд Z-80;

- указать на иные эквиваленты команд стандартного набора.

Такие расширяющие конструкции мы выделили в семь групп:

- арифметические;

- логические;

- передачи данных;

- ветвления;

- вызова ;

- возврата;

- прочие.

Мы даже пойдем еще дальше и там, где это возможно, запишем мнемоники сконструированных нами "квазикоманд" процессора, т. е. мнемоники команд, которых нет на самом деле, но эффект действия которых эмулируется предлагаемой конструкцией. Чтобы отличать эти "квазимнемоники" от настоящих, мы будем печатать их с подчеркиванием. Например:

загрузить в программный счетчик торый содержится в ячейках ADDR

(ADDR)

LD PC

адрес, кои ADDR+1.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Железо - Клава и крыса.
Литературная страничка - продолжение поэмы Ивана Баркова и Малюкова Рифнатовича.
Интервью - Андрей Остальцев сообщил Вячеславу Медноногову про {Интервью для журнала ULТIМAТНUМ}.

В этот день...   14 декабря