Операции ввода-вывода
IN A,(n) IN r,(C)
---------¬ --------¬ ---------¬ ---T---T---¬
¦11011011¦ ¦ n ¦ ¦11101101¦ ¦01¦ r ¦000¦
L--------- L-------- L--------- L--+---+----
INI INIR
---------¬ ---------¬ ---------¬ ---------¬
¦11101101¦ ¦10100010¦ ¦11101101¦ ¦10110010¦
L--------- L--------- L--------- L---------
IND INDR
---------¬ ---------¬ ---------¬ ---------¬
¦11101101¦ ¦10101010¦ ¦11101101¦ ¦10111010¦
L--------- L--------- L--------- L---------
OUT (n),r OUT (C),r
---------¬ --------¬ ---------¬ ---T---T---¬
¦11010011¦ ¦ n ¦ ¦11101101¦ ¦01¦ r ¦001¦
L--------- L-------- L--------- L--+---+----
OUTI OTIR
---------¬ ---------¬ ---------¬ ---------¬
¦11101101¦ ¦10100011¦ ¦11101101¦ ¦10110011¦
L--------- L--------- L--------- L---------
OUTD OTDR
---------¬ ---------¬ ---------¬ ---------¬
¦11101101¦ ¦10101011¦ ¦11101101¦ ¦10111011¦
L--------- L--------- L--------- L---------
Набор операций ввода-вывода по сравнению с системой команд микропроцессора Intel 8080 был существенно расширен.
Инструкции IN A,(n) и OUT (n),A – единственные команды ввода-вывода, реализованные в микропроцессоре 8080. Они обеспечивают соответственно ввод байта информации из порта и вывод информации в порт. Младший байт адреса порта содержится в коде команды – это константа n. Старший байт адреса порта содержится в аккумуляторе. (Микропроцессор 8080 всегда использовал 8-разрядный адрес порта, содержащийся в коде команды.) Значение, читаемое из порта инструкцией IN, заносится в аккумулятор; значение, заносимое в порт инструкцией OUT, находится в аккумуляторе. Эта пара инструкций на флажки влияния не оказывает.
Инструкции IN r,(C) и OUT (C),r осуществляют ввод байта из порта или его вывод в порт. Адрес порта находится в регистровой паре BC; данные, читаемые из порта или выводимые в порт, находятся в регистре r.
Команда IN устанавливает или сбрасывает флажки S, Z и P/V в соответствии со значением прочитанного значения (флажок P/V является признаком чётности) и сбрасывает флажки H и N; значение флажка C не изменяется. Команда OUT на флажки влияния не оказывает. Заметим, что если в поле r кода команды IN задана комбинация 110, то прочитанное значение вызовет соответствующую установку или сброс флажков, но не будет сохранено. Действия микропроцессора для этой комбинации в команде OUT в фирменной документации не определены. По-видимому, в порт будет записано случайное значение.
Оставшиеся инструкции (INI, INIR, IND, INDR, OUTI, OTIR, OUTD и OTDR) обеспечивают ввод или вывод нескольких байтов информации. В регистровой паре HL содержится адрес области памяти, в которую будут заноситься вводимые данные или из которой будут извлекаться выводимая информация. После ввода или вывода очередного байта информации содержимое HL увеличивается или уменьшается на 1 (если третья буква мнемоника кода команды – I, то осуществляется инкремент этой регистровой пары; если D – то декремент). В качестве адреса порта используется содержимое регистровой пары BC. Кроме того, содержимое регистра B используется в качестве счётчика; оно уменьшается на единицу после ввода или вывода каждого байта информации. Инструкции, мнемоники которых заканчиваются на букву R (INIR, INDR, OTIR и OTDR), производят ввод или вывод данных до тех пор, пока регистр B не будет обнулён. Инструкции, мнемоники которых не содержат буквы R (INI, IND, OUTI и OUTD), выполняют одиночную операцию ввода или вывода байта. После выполнения этих инструкций значение флажка C не изменяется; флажок N устанавливается; флажок Z сбрасывается, если содержимое регистра B отлично от нуля, и устанавливается при обнулении регистра B (таким образом, в инструкциях с автоматическим повторением – INIR, INDR, OTIR и OTDR – флажок Z будет установлен); состояние остальных флажков непредсказуемо.