Книга Код. Тайный язык информатики, страница 77. Автор книги Чарльз Петцольд

Разделитель для чтения книг в онлайн библиотеке

Онлайн книга «Код. Тайный язык информатики»

Cтраница 77

Команда OUT записывает содержимое аккумулятора в порт, адресуемый следующим за командой байтом. Команда IN позволяет считать байт в аккумулятор.

Код

Команда

D3

OUT pp

DB

IN pp

Периферийным устройствам иногда требуется привлечь внимание микропроцессора. Например, когда вы нажимаете клавишу на клавиатуре, желательно, чтобы микропроцессор узнавал об этом сразу. Это реализуется благодаря механизму прерываний — сигналам, поступающим от периферийного устройства на вход INT процессора 8080.

Однако после перезапуска микропроцессор 8080 не реагирует на прерывания. Для разрешения прерываний программа должна выполнить команду EI (Enable Interrupts — разрешить прерывания), а для их запрещения — команду DI (Disable Interrupts — запретить прерывания).

Код

Команда

F3

DI

FB

EI

Выходной сигнал процессора 8080 INTE означает, что прерывания были разрешены. Когда у периферийного устройства возникает необходимость прервать работу микропроцессора, оно подает на вход INT сигнал, равный 1. В ответ на него процессор 8080 извлекает из памяти команду, однако управляющие сигналы сообщают о прерывании. В ответ на это периферийное устройство передает процессору 8080 одну из следующих команд.

Код

Команда

Код

Команда

C7

RST 0

E7

RST 4

CF

RST 1

EF

RST 5

D7

RST 2

F7

RST 6

DF

RST 3

FF

RST 7

Эти команды RST (Restart — перезагрузка) аналогичны командам CALL в плане того, что текущее значение счетчика команд сохраняется в стеке. Однако после этого RST осуществляет переход к определенным адресам памяти: RST 0 переходит к ячейке 0000h, RST 1 — к ячейке 0008h и так далее вплоть до RST 7, которая совершает переход к ячейке 0038h. В этих ячейках должны содержаться фрагменты кода, предусмотренного для обработки прерывания. Например, прерывание от клавиатуры привело к выполнению команды RST 4. Это значит, что начиная с ячейки 0020h в памяти должен храниться некоторый код для считывания байта, введенного с клавиатуры. (В главе 21 я объясню все это.)

К настоящему моменту мной описаны 243 кода команд. Существует 12 байтов, которые не соответствуют никаким командам: 08h, 10h, 18h, 20h, 28h, 30h, 38h, CBh, D9h, DDh, EDh и FDh. В сумме это дает 255. Но есть еще один код, о котором я должен упомянуть.

Код

Команда

00

NOP

Команда NOP (No Operation — нет операции) заставляет процессор бездействовать. Для чего она нужна? Для заполнения адресного пространства. Как правило, процессор 8080 может выполнять множество команд NOP без каких-либо неприятных последствий.

Не буду подробно описывать устройство микросхемы 6800 компании Motorola, поскольку ее конструкция и функционал во многом аналогичны соответствующим аспектам процессора 8080. На следующей схеме изображены ее 40 контактов.

Код. Тайный язык информатики

Контакт VSS подключается к земле, VCC — к источнику питания с напряжением пять вольт. Как и процессор 8080, микросхема 6800 предусматривает 16 выходных адресных сигналов и восемь сигналов для данных, работающих как на ввод, так и на вывод. Есть сигналы RESET и R/W (чтение/запись). На вход IRQ подается сигнал запроса на прерывание (interrupt request). Считается, что система синхронизации в микросхеме 6800 устроена гораздо проще, чем в процессоре 8080. Чего в микросхеме 6800 нет, так это понятия портов ввода/вывода. Адреса всех устройств ввода и вывода принадлежат общему адресному пространству 6800.

Микросхема 6800 предусматривает 16-битный счетчик команд, 16-битный указатель стека, 8-битный регистр состояния (для флагов) и два 8-битных аккумулятора, называемых A и B.

В качестве аккумулятора, а не простого регистра рассматривается В, поскольку его можно использовать так же, как и A. Однако дополнительных 8-битных регистров в такой микросхеме нет.

Вместо этого 6800 предполагает 16-битный индексный регистр, который может использоваться для хранения 16-битного адреса, подобно паре регистров HL в 8080. Для многих команд адрес может вычисляться путем суммирования значения их индексного регистра и байта, который следует за кодом команды.

Несмотря на то что микросхема 6800 выполняет примерно те же операции, что и процессор 8080 (загрузка, сохранение, сложение, вычитание, сдвиг, переход, вызов), коды команд и соответствующие им мнемокоды у этих чипов совершенно разные. В следующей таблице, например, перечислены команды перехода из набора микросхемы 6800.

Код

Команда

Значение

20h

BRA

Переход

22h

BHI

Переход, если больше

23h

BLS

Переход, если меньше или равно

24h

BCC

Переход, если переноса нет

25h

BCS

Переход, если перенос есть

26h

BNE

Переход, если не равно

27h

BEQ

Переход, если равно

28h

BVC

Переход, если нет переполнения

29h

BVS

Переход, если есть переполнение

2Ah

BPL

Переход, если плюс

2Bh

BMI

Переход, если минус

2Ch

BGE

Переход, если больше или равно 0

2Dh

BLT

Переход, если меньше 0

2Eh

BGT

Переход, если больше 0

2Fh

BLE

Переход, если меньше или равно 0

В микросхеме 6800 не используется флаг четности, однако в отличие от 8080 в ней предусмотрен флаг переполнения. Некоторые из перечисленных команд перехода зависят от комбинаций флагов.

Вход
Поиск по сайту
Ищем:
Календарь
Навигация