Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
microprocessor_kit_z80-book1:05 [2020-07-11 12:42] GreyWolf [5.4. Очередность выполнения по циклам] |
microprocessor_kit_z80-book1:05 [2020-07-13 09:08] (текущий) GreyWolf |
||
---|---|---|---|
Строка 14: | Строка 14: | ||
При таком методе адресации операнд находится в памяти непосредственно за кодом | При таком методе адресации операнд находится в памяти непосредственно за кодом | ||
- | операции команды. Он может быть 8 или 16-битной константой. Формат команд в этой случае: | + | операции команды. Он может быть 8 или 16–битной константой. Формат команд в этой случае: |
<code> | <code> | ||
Строка 34: | Строка 34: | ||
==== Регистровая адресация. ==== | ==== Регистровая адресация. ==== | ||
- | В этом случае операнд находится в регистре либо в паре регистров ЦП. Регистр адресуется тремя битами, входящими в код операции, пара регистров - двумя. | + | В этом случае операнд находится в регистре либо в паре регистров ЦП. Регистр адресуется тремя битами, входящими в код операции, пара регистров — двумя. |
==== Косвенная адресация. ==== | ==== Косвенная адресация. ==== | ||
Строка 55: | Строка 55: | ||
</code> | </code> | ||
- | ==== Модифицированная нуль-страничная адресация. ==== | + | ==== Модифицированная нуль–страничная адресация. ==== |
Адресное пространство микропроцессора условно можно разбить на страницы по 4К. Тогда к нулевой странице будут относиться адреса 0000H…1000H. МП Z80 имеет специфический вид адресации, когда в коде операции 3 бита, задают модифицированный адрес рестарта. Эти адреса располагаются на нулевой странице области памяти МП. Команда состоит из одного байта: | Адресное пространство микропроцессора условно можно разбить на страницы по 4К. Тогда к нулевой странице будут относиться адреса 0000H…1000H. МП Z80 имеет специфический вид адресации, когда в коде операции 3 бита, задают модифицированный адрес рестарта. Эти адреса располагаются на нулевой странице области памяти МП. Команда состоит из одного байта: | ||
Строка 74: | Строка 74: | ||
Этот вид адресации может использоваться командами условного и безусловного переходов. | Этот вид адресации может использоваться командами условного и безусловного переходов. | ||
- | В каком случае они состоят из двух байтов: первый байт содержит код операции, а второй - смещение в дополнительном коде. Действительный адрес получается прибавлением смещения к текущему значению счетчика команд. | + | В каком случае они состоят из двух байтов: первый байт содержит код операции, а второй — смещение в дополнительном коде. Действительный адрес получается прибавлением смещения к текущему значению счетчика команд. |
{{anchor:pict_5}} | {{anchor:pict_5}} | ||
Строка 80: | Строка 80: | ||
\\ Рис. 5. | \\ Рис. 5. | ||
- | Смешение как число со знаком, может задаваться от -128 до +127. Но т.к. оно складывается с (РС+2), то фактически можно, адресоваться к ячейкам памяти, расположенным на расстоянии от -126 до +129 байт от адреса кода операции команды перехода. | + | Смещение как число со знаком, может задаваться от -128 до +127. Но т.к. оно складывается с (РС+2), то фактически можно, адресоваться к ячейкам памяти, расположенным на расстоянии от -126 до +129 байт от адреса кода операции команды перехода. |
Преимущества относительной адресации перед абсолютной: | Преимущества относительной адресации перед абсолютной: | ||
Строка 110: | Строка 110: | ||
==== Смешанная адресация. ==== | ==== Смешанная адресация. ==== | ||
- | Если в команде операнды адресованы по-разному, то имеет место смешанная адресация, например LD (IX+d),r | + | Если в команде операнды адресованы по–разному, то имеет место смешанная адресация, например LD (IX+d),r |
{{anchor:n52}} | {{anchor:n52}} | ||
Строка 119: | Строка 119: | ||
Первая колонка в этих таблицах содержит символические обозначения (мнемокоды), используемые при написании программ на языке Ассемблера МП Z80. В основе этих символических обозначений, как правило, лежит аббревиатура полной записи команды на английском языке. | Первая колонка в этих таблицах содержит символические обозначения (мнемокоды), используемые при написании программ на языке Ассемблера МП Z80. В основе этих символических обозначений, как правило, лежит аббревиатура полной записи команды на английском языке. | ||
- | Во второй - время выполнения в тактах. | + | Во второй — время выполнения в тактах. |
В третьей колонке приведены формат и двоичный кол команды. | В третьей колонке приведены формат и двоичный кол команды. | ||
Строка 128: | Строка 128: | ||
В дальнейшем описании и таблицах приняты следующие обозначения: | В дальнейшем описании и таблицах приняты следующие обозначения: | ||
- | |r|8-битный регистр: A=111; B=000; C=001; D=010; E=011; H=100; L=101| | + | |r|8–битный регистр: A=111; B=000; C=001; D=010; E=011; H=100; L=101| |
- | |dd qq pp rr|16-битная регистровая пара:<WRAP> | + | |dd qq pp rr|16–битная регистровая пара:<WRAP> |
|dd|BC=00; DE=01; HL=10; SP=11| | |dd|BC=00; DE=01; HL=10; SP=11| | ||
|qq|BC=00; DE=01; HL=10; AF=11| | |qq|BC=00; DE=01; HL=10; AF=11| | ||
Строка 135: | Строка 135: | ||
|rr|BC=00; DE=01; IY=10; SP=11| | |rr|BC=00; DE=01; IY=10; SP=11| | ||
</WRAP>| | </WRAP>| | ||
- | |n|8-битный операнд| | + | |n|8–битный операнд| |
- | |nn|16-битный операнд| | + | |nn|16–битный операнд| |
- | |(nn)|содержимое ячейки nn (8-битный операнд) или содержимое ячеек nn и nn+1 (16-битный операнд)| | + | |(nn)|содержимое ячейки nn (8–битный операнд) или содержимое ячеек nn и nn+1 (16–битный операнд)| |
|t|r, (HL), (IX+d) или (IY+d)| | |t|r, (HL), (IX+d) или (IY+d)| | ||
|e|t или n| | |e|t или n| | ||
- | |d|8-битное смешение (-128 ... +127)| | + | |d|8–битное смешение (-128 ... +127)| |
- | |е|8-битное смещение (-126 ... +129)| | + | |е|8–битное смещение (-126 ... +129)| |
|b|позиционный номер бита: \\ D0=000; D1=001; D2=010; D3=011; D4=100; D5=101; D6=110; D7=111| | |b|позиционный номер бита: \\ D0=000; D1=001; D2=010; D3=011; D4=100; D5=101; D6=110; D7=111| | ||
|cc|условие перехода: \\ NZ=000 (не ноль); Z=001 (ноль); NC-010 (нет переноса); C=011 (перенос); PO=100 (нечетность); PE=101 (четность); P=110 (знак плюс); М=111 (знак минус)| | |cc|условие перехода: \\ NZ=000 (не ноль); Z=001 (ноль); NC-010 (нет переноса); C=011 (перенос); PO=100 (нечетность); PE=101 (четность); P=110 (знак плюс); М=111 (знак минус)| | ||
Строка 159: | Строка 159: | ||
- | ==== 8-битовые команды загрузки. ==== | + | ==== 8–битовые команды загрузки. ==== |
- | Мнемоническое сокращение языка Ассемблера для всех команд загрузки одинаково: LD (load - загрузить). Далее следует указание приёмника, затем - указание источника пересылаемых данных. | + | Мнемоническое сокращение языка Ассемблера для всех команд загрузки одинаково: LD (load — загрузить). Далее следует указание приёмника, затем — указание источника пересылаемых данных. |
<code> | <code> | ||
LD приемник, источник | LD приемник, источник | ||
</code> | </code> | ||
- | [[#t511|Таблица 5.1.1]] содержит все команды 8-битной загрузки. Большую часть кодов в ней представляет команда LD r1,r2. В качестве r1 и r2 могут использоваться семь регистров: A, B, C, D, E, H и L, каждый из которых может служить как источником, так и приемником. | + | [[#t511|Таблица 5.1.1]] содержит все команды 8–битной загрузки. Большую часть кодов в ней представляет команда LD r1,r2. В качестве r1 и r2 могут использоваться семь регистров: A, B, C, D, E, H и L, каждый из которых может служить как источником, так и приемником. |
Следовательно, эта команда дает в результате 49 кодов операции. В их числе семь команд с r1=r2, которые по действию аналогичны NOP, т.к. фактического переноса данных не происходит, и флаги не изменяются. | Следовательно, эта команда дает в результате 49 кодов операции. В их числе семь команд с r1=r2, которые по действию аналогичны NOP, т.к. фактического переноса данных не происходит, и флаги не изменяются. | ||
Строка 220: | Строка 220: | ||
* P/V ← IFF2 (триггер разрешения /запрещения прерываний) | * P/V ← IFF2 (триггер разрешения /запрещения прерываний) | ||
- | В сумме группа 8-битных команд загрузки содержит 104 различных кода. | + | В сумме группа 8–битных команд загрузки содержит 104 различных кода. |
- | ==== 16 битовые команды загрузки. ==== | + | ==== 16–битовые команды загрузки. ==== |
Команды этой группы представлены в [[#t512|таблице 5.1.2]]. В них возможна регистровая адресация и косвенная через указатель стека. Сюда же входят команды пересылки в стек и извлечения из стека, их мнемонические обозначения PUSH и POP соответственно. Отличие их от обычных команд загрузки состоит в том, что указатель стека автоматически уменьшается или увеличивается, когда байт "заталкивается" в стек или извлекается из стека. По действию команды PUSH и POP взаимно обратные. Это в равной степени относится и к последовательности обработки байтов (см. [[#t53|таблицу 5.3]]): при PUSH сначала обрабатывается старший байт, при POP — младший. | Команды этой группы представлены в [[#t512|таблице 5.1.2]]. В них возможна регистровая адресация и косвенная через указатель стека. Сюда же входят команды пересылки в стек и извлечения из стека, их мнемонические обозначения PUSH и POP соответственно. Отличие их от обычных команд загрузки состоит в том, что указатель стека автоматически уменьшается или увеличивается, когда байт "заталкивается" в стек или извлекается из стека. По действию команды PUSH и POP взаимно обратные. Это в равной степени относится и к последовательности обработки байтов (см. [[#t53|таблицу 5.3]]): при PUSH сначала обрабатывается старший байт, при POP — младший. | ||
- | При всех 16-битовых командах загрузки, за исключением POP и AF не происходит изменения флагов. | + | При всех 16–битовых командах загрузки, за исключением POP и AF не происходит изменения флагов. |
- | ==== 16-битовые команды обмена. ==== | + | ==== 16–битовые команды обмена. ==== |
Эта группа содержит 6 команд, которые изображены в [[#t518|таблице 5.1.8]]. Мнемоническое обозначение EX происходит от слова Exchange (обмен). | Эта группа содержит 6 команд, которые изображены в [[#t518|таблице 5.1.8]]. Мнемоническое обозначение EX происходит от слова Exchange (обмен). | ||
Строка 234: | Строка 234: | ||
Команда EX AF,AF' дает возможность программным путем переключать пары регистров A, F и A', F'. А команда EXX позволяет переключаться на вспомогательный набор РОНов. Эти команды длиной всего один байт, и время, необходимое для переключения, сведено к минимальному. т.е. реализовано очень короткое время отклика на прерывание. | Команда EX AF,AF' дает возможность программным путем переключать пары регистров A, F и A', F'. А команда EXX позволяет переключаться на вспомогательный набор РОНов. Эти команды длиной всего один байт, и время, необходимое для переключения, сведено к минимальному. т.е. реализовано очень короткое время отклика на прерывание. | ||
- | Как и 16-битовые команды загрузки, команды обмена не влияют на состояние флагов. | + | Как и 16–битовые команды загрузки, команды обмена не влияют на состояние флагов. |
==== Команды обработки блоков. ==== | ==== Команды обработки блоков. ==== | ||
Строка 268: | Строка 268: | ||
* S ← 1, когда результат сравнения отрицательный, иначе S ← 0 | * S ← 1, когда результат сравнения отрицательный, иначе S ← 0 | ||
* Z ← 1, когда A=(HL), иначе Z ← 0 | * Z ← 1, когда A=(HL), иначе Z ← 0 | ||
- | * H ← 1, когда был перенос в 4-й разряд, иначе Н ← 0 | + | * H ← 1, когда был перенос в 4–й разряд, иначе Н ← 0 |
* P/V ← 1, при BC≠0 | * P/V ← 1, при BC≠0 | ||
* P/V ← 0, когда результат декремента BC достигнет 0 | * P/V ← 0, когда результат декремента BC достигнет 0 | ||
Строка 275: | Строка 275: | ||
При каждом выполнении, до P/V=0, счётчик команд дважды декрементируется, что означает вновь обращение к этой команде. | При каждом выполнении, до P/V=0, счётчик команд дважды декрементируется, что означает вновь обращение к этой команде. | ||
- | ==== 8-битные арифметические и логические команды. ==== | + | ==== 8–битные арифметические и логические команды. ==== |
Команды этой группы отражены в [[#t513|таблице 5.1.4]]. Они всегда используют аккумулятор в качестве приёмника результата. | Команды этой группы отражены в [[#t513|таблице 5.1.4]]. Они всегда используют аккумулятор в качестве приёмника результата. | ||
Строка 292: | Строка 292: | ||
|DEC t|декремент| | |DEC t|декремент| | ||
- | Флаги C, Z, S и H устанавливаются соответственно результату операции. Флаги P/V действует в качестве флага переполнения V. Флаг N соответствует биту 4 кода выполняемой операции и указывает команде DAA (см. ниже), какая из арифметических операций выполнялась - сложение или вычитание. | + | Флаги C, Z, S и H устанавливаются соответственно результату операции. Флаги P/V действует в качестве флага переполнения V. Флаг N соответствует биту 4 кода выполняемой операции и указывает команде DAA (см. ниже), какая из арифметических операций выполнялась — сложение или вычитание. |
Команда CP s выполняется так же, как и SUB s, c той разницей, что по результату операции лишь устанавливаются флаги, а содержимое аккумулятора не изменяется. | Команда CP s выполняется так же, как и SUB s, c той разницей, что по результату операции лишь устанавливаются флаги, а содержимое аккумулятора не изменяется. | ||
Строка 303: | Строка 303: | ||
|AND А |аккумулятор остается без изменений; \\ в соответствии с его содержимым устанавливаются флаги, S←старший бит; \\ Z←1 при А=0, иначе Z←0; \\ P/V←1 при чётном количестве единиц, иначе P/V←0; \\ N←0; \\ C←0.| | |AND А |аккумулятор остается без изменений; \\ в соответствии с его содержимым устанавливаются флаги, S←старший бит; \\ Z←1 при А=0, иначе Z←0; \\ P/V←1 при чётном количестве единиц, иначе P/V←0; \\ N←0; \\ C←0.| | ||
|OR A|как при AND A.| | |OR A|как при AND A.| | ||
- | |XOR А|очистка аккумулятора (A←00); флаги - как при AND A.| | + | |XOR А|очистка аккумулятора (A←00); флаги — как при AND A.| |
|СР А|аккумулятор без изменений; флаги устанавливается как при SUB A.| | |СР А|аккумулятор без изменений; флаги устанавливается как при SUB A.| | ||
Строка 313: | Строка 313: | ||
|SCF|установка Флага переноса| | |SCF|установка Флага переноса| | ||
- | Десятичная коррекция аккумулятора используется после сложения либо вычитания чисел в BCD (двоично-десятичной) формате. В этом формате 8-битный операнд представляет собой двузначное десятичное число, в котором младшей десятичной цифре соответствует младшая тетрада, а старшей – старшая. Для цифр BCD формата допустимы значения от 0 до 9. Однако, результат сложения пли вычитания может превысить 9. В этом случае необходима десятичная коррекция. После команд сложения она действует следующим образом: | + | Десятичная коррекция аккумулятора используется после сложения либо вычитания чисел в BCD (двоично–десятичной) формате. В этом формате 8–битный операнд представляет собой двузначное десятичное число, в котором младшей десятичной цифре соответствует младшая тетрада, а старшей – старшая. Для цифр BCD формата допустимы значения от 0 до 9. Однако, результат сложения пли вычитания может превысить 9. В этом случае необходима десятичная коррекция. После команд сложения она действует следующим образом: |
- если содержимое младшей тетрады аккумулятора больше 9 или H=1, то к аккумулятору добавляется число 6. | - если содержимое младшей тетрады аккумулятора больше 9 или H=1, то к аккумулятору добавляется число 6. | ||
- если содержимое старшей тетрады аккумулятора стало после этого больше 9 или C=1, то число 6 добавляется и к старшей тетраде аккумулятора. | - если содержимое старшей тетрады аккумулятора стало после этого больше 9 или C=1, то число 6 добавляется и к старшей тетраде аккумулятора. | ||
Строка 322: | Строка 322: | ||
Команда CPL побитно инвертирует содержимое аккумулятора (дополнение до 1) Команда NEG изменяет знак содержимого аккумулятора на противоположный (дополнение до 2), она соответствует вычитанию содержимого аккумулятора из нуля. С помощью команды SCF флаг переноса устанавливается в 1, с помощью команды ССF его можно инвертировать. | Команда CPL побитно инвертирует содержимое аккумулятора (дополнение до 1) Команда NEG изменяет знак содержимого аккумулятора на противоположный (дополнение до 2), она соответствует вычитанию содержимого аккумулятора из нуля. С помощью команды SCF флаг переноса устанавливается в 1, с помощью команды ССF его можно инвертировать. | ||
- | ==== 16-битовые арифметические команды. ==== | + | ==== 16–битовые арифметические команды. ==== |
- | Команды этой группы сведены в [[#t515|таблицу 5.1.5]]. Их мнемоники соответствуют принятым для 8–битных арифметических команд, только дополнительно указывается приемник результата. 16-битные арифметические команды позволяют использовать регистровые пары и 16-разрядные регистры. | + | Команды этой группы сведены в [[#t515|таблицу 5.1.5]]. Их мнемоники соответствуют принятым для 8–битных арифметических команд, только дополнительно указывается приемник результата. 16–битные арифметические команды позволяют использовать регистровые пары и 16–разрядные регистры. |
В этой группе не предусмотрена команда SUB, поэтому при потребности в ней следует применять команду SBC, предварительно сбросив флаг переноса, например, командой AND A. | В этой группе не предусмотрена команда SUB, поэтому при потребности в ней следует применять команду SBC, предварительно сбросив флаг переноса, например, командой AND A. | ||
Строка 332: | Строка 332: | ||
Эта группа команд объединена в [[#t5111|таблице 5.1.11]]. | Эта группа команд объединена в [[#t5111|таблице 5.1.11]]. | ||
- | Эти команды позволяют адресоваться к любому регистру или ячейке памяти. Они особенно удобны при выполнении умножения и деления. Две команды (RLD и RRD) вращают тетрады аккумулятора и ячейки памяти, адресуемой парой HL. Их целесообразно применять в двоично-десятичной (BCD) арифметике. Конкретный вид вращения или сдвига ясен из символических пояснений к каждой команде. Эта группа содержит 76 команд. | + | Эти команды позволяют адресоваться к любому регистру или ячейке памяти. Они особенно удобны при выполнении умножения и деления. Две команды (RLD и RRD) вращают тетрады аккумулятора и ячейки памяти, адресуемой парой HL. Их целесообразно применять в двоично–десятичной (BCD) арифметике. Конкретный вид вращения или сдвига ясен из символических пояснений к каждой команде. Эта группа содержит 76 команд. |
==== Команды для работы с битами ==== | ==== Команды для работы с битами ==== | ||
Строка 340: | Строка 340: | ||
==== Команды переходов ==== | ==== Команды переходов ==== | ||
- | Команды переходов собраны в [[#t516|таблице 5.1.6]]. Переход - это ветвление программы, при котором в счетчик команд PC загружается новый адрес. В команде он представлен абсолютно, относительно или косвенно. Следует помнить, что условный переход происходит только при выполнении условия, заданного в команде. Если условие не выполняется, то программа переходит к команде, следующей за командой перехода. При абсолютной адресации команда содержит адрес перехода. Такая команда состоит из трех байтов: кода операции, младшего байта адреса и старшего байта адреса перехода. | + | Команды переходов собраны в [[#t516|таблице 5.1.6]]. Переход — это ветвление программы, при котором в счетчик команд PC загружается новый адрес. В команде он представлен абсолютно, относительно или косвенно. Следует помнить, что условный переход происходит только при выполнении условия, заданного в команде. Если условие не выполняется, то программа переходит к команде, следующей за командой перехода. При абсолютной адресации команда содержит адрес перехода. Такая команда состоит из трех байтов: кода операции, младшего байта адреса и старшего байта адреса перехода. |
- | При относительной адресации команда состоит из двух байтов. Второй байт - это расстояние между адресом перехода и текущим состоянием счетчика команд (т.е. смешение). Смешение может быть от +127 до -126 относительно адреса кода операции команды, следующей за командой перехода. | + | При относительной адресации команда состоит из двух байтов. Второй байт — это расстояние между адресом перехода и текущим состоянием счетчика команд (т.е. смешение). Смешение может быть от +127 до -126 относительно адреса кода операции команды, следующей за командой перехода. |
При косвенной адресации в командах перехода содержим е регистровой пары HL пли одного из индексных регистр (IX или IY) прямо загружается в счетчик команд. | При косвенной адресации в командах перехода содержим е регистровой пары HL пли одного из индексных регистр (IX или IY) прямо загружается в счетчик команд. | ||
Строка 352: | Строка 352: | ||
==== Команды вызова и возврата ==== | ==== Команды вызова и возврата ==== | ||
- | Эта группа объединена в [[#t5110|таблице 5.1.10]]. Команда вызова подпрограммы CALL — это специфическая команда перехода, при которой МП запоминает адрес команды, следующей за командой CALL. Команда возврата RET противоположна команде CALL. В ней адрес из стека прямо загружается в счётчик команд, и осуществляется возврат к прерванной программе. МП имеет две специальные команды возврата: RETI - возврат из маскируемого прерывания и RETN -возврат из немаскируемого прерывания. Команда RETI является единственной командой, которая распознается периферийными микросхемами комплекта Z80. Это необходимо для организации приоритетных прерываний и нормального возврата из прерываний, поступивших от периферийных схем. Об этом подробно написано в книге 7 "Построение систем. Программирование. Отладка". | + | Эта группа объединена в [[#t5110|таблице 5.1.10]]. Команда вызова подпрограммы CALL — это специфическая команда перехода, при которой МП запоминает адрес команды, следующей за командой CALL. Команда возврата RET противоположна команде CALL. В ней адрес из стека прямо загружается в счётчик команд, и осуществляется возврат к прерванной программе. МП имеет две специальные команды возврата: RETI — возврат из маскируемого прерывания и RETN — возврат из немаскируемого прерывания. Команда RETI является единственной командой, которая распознается периферийными микросхемами комплекта Z80. Это необходимо для организации приоритетных прерываний и нормального возврата из прерываний, поступивших от периферийных схем. Об этом подробно написано в книге 7 "Построение систем. Программирование. Отладка". |
Команды вызова подпрограмм состоят из 3 байтов. Однако, специфические команды рестарта RST p состоят из одного байта. Фиксированный адрес перехода встроен в код операции этих команд (см. методы адресации). | Команды вызова подпрограмм состоят из 3 байтов. Однако, специфические команды рестарта RST p состоят из одного байта. Фиксированный адрес перехода встроен в код операции этих команд (см. методы адресации). | ||
Строка 358: | Строка 358: | ||
Группа команд вызова и возврата не влияет на состояние флагов. | Группа команд вызова и возврата не влияет на состояние флагов. | ||
- | ==== Команды ввода-вывода ==== | + | ==== Команды ввода–вывода ==== |
- | Набор команд ввода-вывода представлен в [[#t519|таблице 5.1.9]]. Адресация в этих командах может быть непосредственной либо косвенной, но регистру C. | + | Набор команд ввода–вывода представлен в [[#t519|таблице 5.1.9]]. Адресация в этих командах может быть непосредственной либо косвенной, но регистру C. |
- | Команды с непосредственной адресацией IN A,(n) и OUT (n),A аналогичны командам ввода-вывода МП I8080. Но в добавление к адресу порта n, выставляемому в младшую часть шины адреса, в старшую часть ША подается содержимое аккумулятора. Это позволяет, предварительно загрузив аккумулятор нужным значением, использовать 16-разридный адрес ввода-вывода. На флаги эти две команды не влияют. | + | Команды с непосредственной адресацией IN A,(n) и OUT (n),A аналогичны командам ввода–вывода МП I8080. Но в добавление к адресу порта n, выставляемому в младшую часть шины адреса, в старшую часть ША подается содержимое аккумулятора. Это позволяет, предварительно загрузив аккумулятор нужным значением, использовать 16–разридный адрес ввода–вывода. На флаги эти две команды не влияют. |
В командах с косвенной адресацией данные пересылаются между портом адрес которого загружен в регистр C, и одним из РОНов. | В командах с косвенной адресацией данные пересылаются между портом адрес которого загружен в регистр C, и одним из РОНов. | ||
Строка 370: | Строка 370: | ||
</code> | </code> | ||
- | При этом в старшую часть адреса подается содержимое регистра B, т.е. также может использоваться 16-разрядный адрес ввода-вывода. | + | При этом в старшую часть адреса подается содержимое регистра B, т.е. также может использоваться 16–разрядный адрес ввода–вывода. |
Две команды IN C,(C) и OUT (C),C имеют особенности. В команде вывода регистр C содержит адрес канала и его же в качестве данник посылает в порт. В команде ввода содержимое регистра C после ввода из порта замещается принятыми данными. | Две команды IN C,(C) и OUT (C),C имеют особенности. В команде вывода регистр C содержит адрес канала и его же в качестве данник посылает в порт. В команде ввода содержимое регистра C после ввода из порта замещается принятыми данными. | ||
Строка 376: | Строка 376: | ||
Команды OUT (C),r не влияют на флаги. Команды ввода IN r,(C) устанавливают флаги Z, S, P, H в соответствии с принятыми данными и сбрасывают флаг N. Следует уделить команду INF, которая, воздействуя на регистр флагов, не изменяет состояния РОН. | Команды OUT (C),r не влияют на флаги. Команды ввода IN r,(C) устанавливают флаги Z, S, P, H в соответствии с принятыми данными и сбрасывают флаг N. Следует уделить команду INF, которая, воздействуя на регистр флагов, не изменяет состояния РОН. | ||
- | Косвенная адресация используется также командами ввода-вывода блоков. Они пересылают данные между портом, адресуемым регистром C, и памятью, адресуемой регистровой парой HL. | + | Косвенная адресация используется также командами ввода–вывода блоков. Они пересылают данные между портом, адресуемым регистром C, и памятью, адресуемой регистровой парой HL. |
|INI|ввод и инкремент HL| | |INI|ввод и инкремент HL| | ||
Строка 387: | Строка 387: | ||
|OTDR|вывод и декремент HL до B=0| | |OTDR|вывод и декремент HL до B=0| | ||
- | Регистр B здесь используется как двоичный счётчик - он автоматически декрементируется после пересылки каждого байта (максимально 256). Вместе с тем, содержимое B выдается в старшую часть ША. Это может быть использовано в случае, когда необходимо выводить данные в несколько портов с идущими подряд (в старшем байте) 16-разрядными адресами. | + | Регистр B здесь используется как двоичный счётчик — он автоматически декрементируется после пересылки каждого байта (максимально 256). Вместе с тем, содержимое B выдается в старшую часть ША. Это может быть использовано в случае, когда необходимо выводить данные в несколько портов с идущими подряд (в старшем байте) 16–разрядными адресами. |
- | Команды ввода-вывода блоков устанавливают флаги следующим образом: | + | Команды ввода–вывода блоков устанавливают флаги следующим образом: |
|S|неопределён| | |S|неопределён| | ||
|Z←1, если регистр B=0 (выполнение команд заканчивается), иначе Z←0|| | |Z←1, если регистр B=0 (выполнение команд заканчивается), иначе Z←0|| | ||
Строка 401: | Строка 401: | ||
Эта группа ([[#t5112|таблица 5.1.12]]) содержит шесть команд управления. | Эта группа ([[#t5112|таблица 5.1.12]]) содержит шесть команд управления. | ||
- | Команда NOP - это пустая команда, при которой не выполняется никаких действий. | + | Команда NOP — это пустая команда, при которой не выполняется никаких действий. |
Команда HALT останавливает работу МП до тех пор, пока не будет принят запрос на прерывание. | Команда HALT останавливает работу МП до тех пор, пока не будет принят запрос на прерывание. | ||
Строка 408: | Строка 408: | ||
{{anchor:tables}} | {{anchor:tables}} | ||
{{anchor:t511}} | {{anchor:t511}} | ||
- | Таблица 5.1.1. 8-битовые команды загрузки | + | Таблица 5.1.1. 8–битовые команды загрузки |
^ Команда ^ T ^ Код ||^ Пояснения ^ C ^ Z ^ P ^ S ^ N ^ Y ^ | ^ Команда ^ T ^ Код ||^ Пояснения ^ C ^ Z ^ P ^ S ^ N ^ Y ^ | ||
Строка 439: | Строка 439: | ||
{{anchor:t512}} | {{anchor:t512}} | ||
- | Таблица 5.1.2. 16-битовые команды загрузки | + | Таблица 5.1.2. 16–битовые команды загрузки |
^ Команда ^ T ^ Код ||^ Пояснения ^ C ^ Z ^ P ^ S ^ N ^ Y ^ | ^ Команда ^ T ^ Код ||^ Пояснения ^ C ^ Z ^ P ^ S ^ N ^ Y ^ | ||
Строка 483: | Строка 483: | ||
{{anchor:t514}} | {{anchor:t514}} | ||
- | Таблица 5.1.4. 8-битовые арифметические и логические команды | + | Таблица 5.1.4. 8–битовые арифметические и логические команды |
^ Команда ^ T ^ Код ||^ Пояснения ^ C ^ Z ^ P ^ S ^ N ^ Y ^ | ^ Команда ^ T ^ Код ||^ Пояснения ^ C ^ Z ^ P ^ S ^ N ^ Y ^ | ||
Строка 726: | Строка 726: | ||
{{anchor:n53}} | {{anchor:n53}} | ||
===== 5.3. Флаги признаков ===== | ===== 5.3. Флаги признаков ===== | ||
- | FIXME | ||
- | Каждый из двух флаговых регистров МП Z80 содержит по шесть информационных битов, состояние которых устанавливается в соответствии с результатом операции. Флаги S, Z, C и P/V используются в командах условного перехода, условного вызова подпрограмм и условного возврата из подпрограмм. Флаги H и N непосредственно программно не анализируются. Они используются в двоично-десятичной арифметике. | + | Каждый из двух флаговых регистров МП Z80 содержит по шесть информационных битов, состояние которых устанавливается в соответствии с результатом операции. Флаги S, Z, C и P/V используются в командах условного перехода, условного вызова подпрограмм и условного возврата из подпрограмм. Флаги H и N непосредственно программно не анализируются. Они используются в двоично–десятичной арифметике. |
==== S (F7) Sign — Флаг знака ==== | ==== S (F7) Sign — Флаг знака ==== | ||
Строка 739: | Строка 738: | ||
Флаг Z устанавливается или обнуляется в результате выполнения следующих команд: | Флаг Z устанавливается или обнуляется в результате выполнения следующих команд: | ||
- | - При 8-битных арифметических и логических операциях флаг устанавливается в 1, если результат выполнения команды равен нулю. Если результат не равен нулю, флаг Z обнуляется. | + | - При 8–битных арифметических и логических операциях флаг устанавливается в 1, если результат выполнения команды равен нулю. Если результат не равен нулю, флаг Z обнуляется. |
- При командах поиска и сравнения флаг Z устанавливается в 1. когда содержимое ячейки памяти адресуемой регистровой парой HL, совладает с содержимым аккумулятора. | - При командах поиска и сравнения флаг Z устанавливается в 1. когда содержимое ячейки памяти адресуемой регистровой парой HL, совладает с содержимым аккумулятора. | ||
- После выполнения команды тестирования отдельного бита во флаг Z записывается инвертированное значение проверенного бита. | - После выполнения команды тестирования отдельного бита во флаг Z записывается инвертированное значение проверенного бита. | ||
Строка 749: | Строка 748: | ||
==== C (F0) Carry — Флаг переноса ==== | ==== C (F0) Carry — Флаг переноса ==== | ||
- | На состояние этого флага влияют следующие команды: - | + | На состояние этого флага влияют следующие команды: |
- Команды сложения устанавливают флаг C, когда есть Перенос от бита 7 к биту 8 результата сложения однобайтных чисел, или от бита 15 к биту 16 при сложении двухбайтных чисел. Иначе C=0. | - Команды сложения устанавливают флаг C, когда есть Перенос от бита 7 к биту 8 результата сложения однобайтных чисел, или от бита 15 к биту 16 при сложении двухбайтных чисел. Иначе C=0. | ||
- Команды вычитания устанавливают флаг, если есть заём, и сбрасывают, когда его нет. | - Команды вычитания устанавливают флаг, если есть заём, и сбрасывают, когда его нет. | ||
Строка 763: | Строка 762: | ||
Этот флаг имеет несколько функций: | Этот флаг имеет несколько функций: | ||
- | - <WRAP>При арифметических операциях над числами со знаком он действует как флаг переполнения V. т.к. диапазон представления чисел со знаком от -128 до +127, то при операциях над ними возможен выход результата за эти пределы - переполнение. В этом случае флаг, устанавливается в 1, сигнализируя об ошибочности результата. Логика установки флага V в 1 такова: | + | - <WRAP>При арифметических операциях над числами со знаком он действует как флаг переполнения V. т.к. диапазон представления чисел со знаком от -128 до +127, то при операциях над ними возможен выход результата за эти пределы — переполнение. В этом случае флаг, устанавливается в 1, сигнализируя об ошибочности результата. Логика установки флага V в 1 такова: |
- | * а) если был перенос из 6-го бита в 7-ой, и не было переноса из 7-го бита во флаг C. | + | * а) если был перенос из 6–го бита в 7–ой, и не было переноса из 7–го бита во флаг C. |
- | * б) не было переноса из 6-го бита в 7-ой, но есть перенос из 7-го бита во флаг C. | + | * б) не было переноса из 6–го бита в 7–ой, но есть перенос из 7–го бита во флаг C. |
Примеры: | Примеры: | ||
Строка 802: | Строка 801: | ||
==== H (F4) Halfoarry — Флаг полупереноса ==== | ==== H (F4) Halfoarry — Флаг полупереноса ==== | ||
- | Команды сложения, вычитания, инкремента, декремента и сравнения 8-битных операндов устанавливают флаг H когда был перенос из третьего бита результата в четвертый, или был заём от четвёртого бита к третьему. Этим он указывает команде DAA требует ли результат десятичной коррекции. | + | Команды сложения, вычитания, инкремента, декремента и сравнения 8–битных операндов устанавливают флаг H когда был перенос из третьего бита результата в четвертый, или был заём от четвёртого бита к третьему. Этим он указывает команде DAA требует ли результат десятичной коррекции. |
==== N (F1) Addition/Subtraction — Флаг сложения/вычитания ==== | ==== N (F1) Addition/Subtraction — Флаг сложения/вычитания ==== | ||
Строка 808: | Строка 807: | ||
Команды сложение, инкремента и логические команды обнуляют флаг N, а команды вычитания, декремента, сравнения и инвертирования его устанавливают. | Команды сложение, инкремента и логические команды обнуляют флаг N, а команды вычитания, декремента, сравнения и инвертирования его устанавливают. | ||
- | Состояние флага N используется командой DAA. Т.к. алгоритм корректировки результата двоично-десятичных операций различен при сложении и вычитании, этот флаг показывает, какое именно действие происходило перед этим. | + | Состояние флага N используется командой DAA. Т.к. алгоритм корректировки результата двоично–десятичных операций различен при сложении и вычитании, этот флаг показывает, какое именно действие происходило перед этим. |
В [[#t52|таблице 5.2]] показано как выполнение команд влияет на регистр флагов. Команды, которые здесь не представлены, не влияют ни на один флаг. | В [[#t52|таблице 5.2]] показано как выполнение команд влияет на регистр флагов. Команды, которые здесь не представлены, не влияют ни на один флаг. | ||
Строка 824: | Строка 823: | ||
|CPI; CPD; CPIR; CPDR| X | ? | X | X | X | ? | 1 | |Если BC≠0, то P/V=1 \\ Если BC=0, то P/V=0 \\ Если A≠(HL), то Z=0 \\ Если A=(HL), то Z=1| | |CPI; CPD; CPIR; CPDR| X | ? | X | X | X | ? | 1 | |Если BC≠0, то P/V=1 \\ Если BC=0, то P/V=0 \\ Если A≠(HL), то Z=0 \\ Если A=(HL), то Z=1| | ||
| |||||||||| | | |||||||||| | ||
- | |ADD s; ADC s| ? | ? | X | ? | X | V | 0 | ? |8-битовые арифметические команды| | + | |ADD s; ADC s| ? | ? | X | ? | X | V | 0 | ? |8–битовые арифметические команды| |
|SUB s; SBC s; CP s; NEG| ? | ? | X | ? | X | V | 1 | ? |:::| | |SUB s; SBC s; CP s; NEG| ? | ? | X | ? | X | V | 1 | ? |:::| | ||
| |||||||||| | | |||||||||| | ||
Строка 830: | Строка 829: | ||
|OR s; XOR s| ? | ? | X | 0 | X | P | 0 | 0 |:::| | |OR s; XOR s| ? | ? | X | 0 | X | P | 0 | 0 |:::| | ||
| |||||||||| | | |||||||||| | ||
- | |INC t| ? | ? | X | ? | X | V | 0 | |Только 8-битовые команды| | + | |INC t| ? | ? | X | ? | X | V | 0 | |Только 8–битовые команды| |
|DEC t| ? | ? | X | ? | X | V | 1 | |:::| | |DEC t| ? | ? | X | ? | X | V | 1 | |:::| | ||
| |||||||||| | | |||||||||| | ||
- | |ADD HL,dd; ADD IX,pp; ADD IY,rr| | | X | X | X | | 0 | ? |16-битовые – арифметические команды| | + | |ADD HL,dd; ADD IX,pp; ADD IY,rr| | | X | X | X | | 0 | ? |16–битовые – арифметические команды| |
|ADC HL,dd| ? | ? | X | X | X | V | 0 | ? |:::| | |ADC HL,dd| ? | ? | X | X | X | V | 0 | ? |:::| | ||
|SBC HL,dd| ? | ? | X | X | X | V | 1 | ? |:::| | |SBC HL,dd| ? | ? | X | X | X | V | 1 | ? |:::| | ||
Строка 850: | Строка 849: | ||
|IN r,(C); INF| ? | ? | X | ? | X | P | 0 | |:::| | |IN r,(C); INF| ? | ? | X | ? | X | P | 0 | |:::| | ||
| |||||||||| | | |||||||||| | ||
- | |INI; IND; OUTI; OUTD| X | ? | X | X | X | X | 1 | |Блочные команды ввода-вывода: \\ Если B≠0, то Z=0 \\ Если В=0, то Z=1| | + | |INI; IND; OUTI; OUTD| X | ? | X | X | X | X | 1 | |Блочные команды ввода–вывода: \\ Если B≠0, то Z=0 \\ Если В=0, то Z=1| |
|INIR; INDR; OTIR; OTDR| X | 1 | X | X | X | X | 1 | |:::| | |INIR; INDR; OTIR; OTDR| X | 1 | X | X | X | X | 1 | |:::| | ||
{{anchor:n54}} | {{anchor:n54}} | ||
===== 5.4. Очередность выполнения по циклам ===== | ===== 5.4. Очередность выполнения по циклам ===== | ||
- | FIXME | ||
- | Для обозначения действий микропроцессора в каждой машинном цикле в [[#t53таблице 5.3]] приняты следующие сокращения: | + | Для обозначения действий микропроцессора в каждой машинном цикле в [[#t53|таблице 5.3]] приняты следующие сокращения: |
|OCR (operation code read)|чтение кода операции| | |OCR (operation code read)|чтение кода операции| | ||
|CBR (control byte read)|чтение управляющего байта кода операции (ED, DD, FD, CB)| | |CBR (control byte read)|чтение управляющего байта кода операции (ED, DD, FD, CB)| | ||
- | |IOP (internal CPU-operation)|внутренние операции ЦП, выходные сигналы управления неактивны| | + | |IOP (internal CPU operation)|внутренние операции ЦП, выходные сигналы управления неактивны| |
|MRD (memory read)|чтение байта из косвенно адресованной ячейки памяти| | |MRD (memory read)|чтение байта из косвенно адресованной ячейки памяти| | ||
- | |MRH (memory rend, high byte)|чтение старшего байта 16-разрядного слова из косвенно адресованной ячейки памяти| | + | |MRH (memory rend, high byte)|чтение старшего байта 16–разрядного слова из косвенно адресованной ячейки памяти| |
- | |MRL (memory read, low byte)|чтение младшего байта 16-разрядного слова из косвенно адресованной ячейки памяти| | + | |MRL (memory read, low byte)|чтение младшего байта 16–разрядного слова из косвенно адресованной ячейки памяти| |
|MWR (memory write)|запись байта в косвенно адресованную ячейку памяти| | |MWR (memory write)|запись байта в косвенно адресованную ячейку памяти| | ||
- | |MWH (memory write, high byte)|запись старшего байта 16-разрядиого слова в косвенно адресованную ячейку памяти| | + | |MWH (memory write, high byte)|запись старшего байта 16–разрядиого слова в косвенно адресованную ячейку памяти| |
- | |MWL (memory write, low byte)|запись младшего байта 16-разрядного слова в косвенно адресованную ячейку памяти| | + | |MWL (memory write, low byte)|запись младшего байта 16–разрядного слова в косвенно адресованную ячейку памяти| |
- | |ORD (operand read)|чтение операнда-байта, непосредственно представленного в команде| | + | |ORD (operand read)|чтение операнда–байта, непосредственно представленного в команде| |
- | |ORH (operand read, high byte)|чтение старшего байта 16-разрядного слова, непосредственно представленного в команде| | + | |ORH (operand read, high byte)|чтение старшего байта 16–разрядного слова, непосредственно представленного в команде| |
- | |ORL (operand read, Ion byte)|чтение младшего байта 16-разрядного слова, непосредственно представленного в команде| | + | |ORL (operand read, Ion byte)|чтение младшего байта 16–разрядного слова, непосредственно представленного в команде| |
|PRD (port read)|ввод данных из порта| | |PRD (port read)|ввод данных из порта| | ||
|PWR (port write)|вывод данных в порт| | |PWR (port write)|вывод данных в порт| | ||
Строка 882: | Строка 880: | ||
|(n)|продолжительность цикла в периодах тактовой частоты| | |(n)|продолжительность цикла в периодах тактовой частоты| | ||
- | {{anchor:t63}} | + | {{anchor:t53}} |
- | Таблица 6.3. очередность выполнения по циклам | + | Таблица 5.3. очередность выполнения по циклам |
^ Тип команды ^ Байт ^ Цикл M1 ^ Цикл M2 ^ Цикл M3 ^ Цикл M4 ^ Цикл M5 ^ Пояснение ^ | ^ Тип команды ^ Байт ^ Цикл M1 ^ Цикл M2 ^ Цикл M3 ^ Цикл M4 ^ Цикл M5 ^ Пояснение ^ | ||
|LD r1,r2| 1 |OCR(4)| | | | |ii: IX или IY| | |LD r1,r2| 1 |OCR(4)| | | | |ii: IX или IY| | ||
Строка 914: | Строка 912: | ||
|POP ii| 2 |CBR(4); OCR(4)|SRL(3); SPI|SRH(3); SPI| | |ii: IX или IY| | |POP ii| 2 |CBR(4); OCR(4)|SRL(3); SPI|SRH(3); SPI| | |ii: IX или IY| | ||
| |||||||| | | |||||||| | ||
- | | | ||||||| | + | |EX DE,HL| 1 |OCR(4)| | | | | | |
- | | | ||||||| | + | |EX AF,AF’; EXX| 1 |OCR(4)| | | | | | |
- | | | ||||||| | + | |EX (SP),HL| 1 |OCR(4)|SRL(3); SPI|SRH(4)|SWH(3); SPD SWL(5)| | |
- | | | ||||||| | + | |EX (SP),ii| 1 |CBR(4); OCR(4)|SRL(3); SPI|SRH(3)|SWH(3); SPD SWL(5)| |ii: IX или IY| |
| |||||||| | | |||||||| | ||
- | + | |LDI; LDD; CPI; CPD| 2 |CBR(4); OCR(4)|MRD(3)|MWR(3)| | | | | |
+ | |LDIR; LDDR; CPIR; CPDR| 2 |CBR(4); OCR(4)|MRD(3)|MWR(3)|IOP(5)| |IOP(5) в M4, только когда BC≠0| | ||
+ | | |||||||| | ||
+ | |ALU r| 1 |OCR(4)| | | | |ALU означает: ADD, ADC, SUB, SEC, AND, OR, XOR или CP| | ||
+ | |ALU n| 2 |OCR(4)|ORD(3)| | | |:::| | ||
+ | |ALU (HL)| 1 |OCR(4)|MRD(3)| | | |:::| | ||
+ | |ALU (ii+d)| 3 |CBR(4); OCR(4)|ORD(3)|IOP(5)|MRD(3)| |:::| | ||
+ | | |||||||| | ||
+ | |INC r; DEC r| 1 |OCR(4)| | | | | | | ||
+ | |INC (HL); DEC (HL)| 1 |OCR(4)|MRD(3)|MWR(3)| | | | | ||
+ | |INC (ii+d); DEC (ii+d)| 3 |CBR(4); OCR(4)|ORD(3)|IOP(5)|MRD(4)|MWR(3)|ii: IX или IY| | ||
+ | | |||||||| | ||
+ | |DAA| 1 |OCR(4)| | | | | | | ||
+ | |CPL| 1 |OCR(4)| | | | | | | ||
+ | |NEG| 2 |CBR(4); OCR(4)| | | | | | | ||
+ | |CCF; SCF| 1 |OCR(4)| | | | | | | ||
+ | | |||||||| | ||
+ | |NOP; HALT| 1 |OCR(4)| | | | | | | ||
+ | |DI; EI| 1 |OCR(4)| | | | | | | ||
+ | |IM0; IM1; IM2| 2 |CBR(4); OCR(4)| | | | | | | ||
+ | | |||||||| | ||
+ | |ADD HL,dd| 1 |OCR(4)|IOP(4)|IOP(3)| | | | | ||
+ | |ADC HL,dd; SBC HL,dd; ADD ii,pp| 2 |CBR(4); OCR(4)|IOP(4)|IOP(3)| | |ADD ii,pp – это ADD IX,pp или ADD IY,rr| | ||
+ | | |||||||| | ||
+ | |INC dd; DEC dd| 1 |OCR(6)| | | | | | | ||
+ | |INC ii; DEC ii| 2 |CBR(4); OCR(6)| | | | |ii: IX или IY| | ||
+ | | |||||||| | ||
+ | |RLCA; RRCA; RLA; RRA| 1 |OCR(4)| | | | |ROT означает: RLC, RL, RRC, RR, SLA,SRA или SRL.| | ||
+ | |ROT r| 2 |CBR(4); OCR(4)| | | | |:::| | ||
+ | |ROT (HL)| 2 |CBR(4); OCR(4)|MRD(3)|MWR(3)| | |:::| | ||
+ | |ROT (ii+d)| 4 |CBR(4); CBR(4)|ORD(3)|OCR(5)|MRD(4)|MWR(3)|:::| | ||
+ | |RLD; RRD| 2 |CBR(4); OCR(4)|MRD(3)|IOP(4)|MWR(3)| |:::| | ||
+ | | |||||||| | ||
+ | |BIT b,r; SET b,r; RES b,r| 2 |CBR(4); OCR(4)| | | | | | | ||
+ | |BIT b,(HL)| 2 |CBR(4); OCR(4)|MRD(4)| | | | | | ||
+ | |SET b,(HL); RES b,(HL)| 2 |CBR(4); OCR(4)|MRD(4)|MWR(3)| | | | | ||
+ | |BIT b,(ii+d)| 4 |CBR(4); CBR(4)|ORD(3)|OCR(5)|MRD(4)| | | | ||
+ | |SET b,(ii+d);RES b,(ii+d)| 4 |CBR(4); CBR(4)|ORD(3)|OCR(5)|MRD(4)|MWR(3)|ii: IX или IY| | ||
+ | | |||||||| | ||
+ | |JP nn; JP cc,nn| 3 |OCR(4)|ORL(3)|ORH(3)| | | | | ||
+ | |JR e| 2 |OCR(4)|ORD(3)|IOP(5)| | | | | ||
+ | |JR C,e; JR Z,e; JR NC,e; JR NZ,e| 2 |OCR(4)|ORD(3)|IOP(5)| | |IOP(5) – при невыполнении условия| | ||
+ | |JP (HL)| 1 |OCR(4)| | | | | | | ||
+ | |JP (ii)| 2 |CBR(4); OCR(4)| | | | |ii: IX или IY| | ||
+ | |DJNZ e| 2 |OCR(5)| | | | |IOP(5), если B≠0| | ||
+ | | |||||||| | ||
+ | |CALL nn| 3 |OCR(4)|ORL(3)|ORH(4); SPD|SWH(3); SPD|SWL(3)| | | ||
+ | |CALL cc,nn| 3 |OCR(4)|ORL(3)|ORH(4); SPD|SWH(3); SPD|SWL(3)|cc| | ||
+ | |CALL cc,nn| 3 |OCR(4)|ORL(3)|ORH(3)| | |cc не выполняется| | ||
+ | | |||||||| | ||
+ | |RET| 1 |OCR(4)|SRL(3); SPI|SRH(3); SPI| | | | | ||
+ | |RET cc| 1 |OCR(4)|SRL(3); SPI|SRH(3); SPI| | |cc| | ||
+ | | |||||||| | ||
+ | |RET cc| 1 |OCR(4)| | | | |cc не выполняется| | ||
+ | |RETI; RETN| 2 |CBR(4); OCR(4)|SRL(3); SPI|SRH(3); SPI| | | | | ||
+ | |RST p| 1 |OCR(5); SPD|SWH(3); SPD|SWL(3)| | | | | ||
+ | | |||||||| | ||
+ | |IN A,(n)| 2 |OCR(4)|ORD(4)|PRD(4)| | | | | ||
+ | |IN r,(C); INF| 2 |CBR(4); OCR(4)|PRD(4)| | | | | | ||
+ | |INI; IND| 2 |CBR(4); OCR(5)|PRD(4)|MWR(3)| | | | | ||
+ | |INIR; INDR| 2 |CBR(4); OCR(5)|PRD(4)|MWR(3)|IOP(5)| |IOP(5), если B≠0| | ||
+ | | |||||||| | ||
+ | |OUT (n),A| 2 |OCR(4)|ORD(4)|PWR(4)| | | | | ||
+ | |OUT (C),r| 2 |CBR(4); OCR(4)|PWR(4)| | | | | | ||
+ | |OUTI; OUTD| 2 |CBR(4); OCR(5)|MRD(3)|PWR(4)| | | | | ||
+ | |OTIR; OTDR| 2 |CBR(4); OCR(5)|MRD(3)|PWR(4)|IOP(5)| |IOP(5), если B≠0| | ||
+ | | |||||||| | ||
+ | |Подтверждение прерывания:|||||||| | ||
+ | |NMI| - |OCR(5); SPD|SWH(3); SPD|SWL(3)| | |См. [[06#pict_6_4|рис. 6.4]]| | ||
+ | |INT, Режим 0| - |INTA(6); SPD|SWH(3); SPD|SWL(3)| | |При команде RST p| | ||
+ | | | - |INTA(6)|ORL(3)|ORH(4); SPD|SWH(3); SPD|SWL(3)|При команде CALL| | ||
+ | |INT, Режим 1| - |INTA(7;) SPD|SWH(3); SPD|SWL(3)| | |RST 38H| | ||
+ | |INT, Режим 2| - |INTA(7); SPD|SWH(3); SPD|SWL(3)|MRL(3)|MRH(3)|См. [[06#pict_6_13|рис. 6.13]]| | ||
Принятые обозначения отражают программную суть происходящих в данном цикле действий. С точки зрения процессов на шинах все они сводятся к машинным циклам, рассмотренным в [[#04|главе 4]]: | Принятые обозначения отражают программную суть происходящих в данном цикле действий. С точки зрения процессов на шинах все они сводятся к машинным циклам, рассмотренным в [[#04|главе 4]]: | ||
|OCR, CBR|цикл извлечения кода операции ([[04#pict_4_2|рис. 4.2]])| | |OCR, CBR|цикл извлечения кода операции ([[04#pict_4_2|рис. 4.2]])| | ||
- | |MRD, MRH, MRL, ORD, ORH, ORL, SRH, SRL|цикл чтения из памяти (рис. 4.4)| | + | |MRD, MRH, MRL, ORD, ORH, ORL, SRH, SRL|цикл чтения из памяти ([[04#pict_4_4|рис. 4.4]])| |
- | |MWR, MWH, MWL, SWH, SWL|цикл записи в память (рис. 4.4)| | + | |MWR, MWH, MWL, SWH, SWL|цикл записи в память ([[04#pict_4_4|рис. 4.4]])| |
- | |PRD|цикл ввода (рис. 4.6)| | + | |PRD|цикл ввода ([[04#pict_4_6|рис. 4.6]])| |
- | |PWR|цикл вывода (рис. 4.6)| | + | |PWR|цикл вывода ([[04#pict_4_6|рис. 4.6]])| |
- | |INTA|цикл подтверждения маскируемого прерывания (рис 4.9)| | + | |INTA|цикл подтверждения маскируемого прерывания ([[04#pict_4_9|рис. 4.9]])| |