Микросхемотехника / Фрике К. Вводный курс цифровой электроники
.pdfГлава 16. Структура, система команд и работа |
микропроцессора |
XCHG означает «Exchange Hand L with D and E» |
(«перестановка |
H и L с одной стороны и D и E с другой стороны»). |
|
PCHL значит «Move Н and L to PC» («сдвинуть |
Н и L к PC»). |
Формально это команда перехода для регистров. Но на следующем шаге происходит переход к адресу, который стоит в регистернои паре HL.
16.10.2.Адресация типа «Register Indirect»
Вкомандах с адресацией типа «Register Indirect» называется реги стровая пара, в которой стоит адрес, под которым можно найти операнд. Это изображено с помощью способа записи с двойными скобками.
Таблица 16.6. Команды перехода с адресацией типа «Register Indirect». В = байты, Z = циклы, Т = такты.
Команда |
Операнд |
Воздействие |
В |
Z |
Т |
||||
MOV |
М, |
г |
|
((H)(L)) |
^ (г) |
1 |
2 |
7 |
|
MOV |
г, М |
|
(г) ^ |
((H)(L)) |
1 |
2 |
7 |
||
LDAX |
гр |
(В, |
D) |
(А) ^ |
((гр)) |
1 |
2 |
7 |
|
STAX |
гр |
(В, |
D) |
((гр)) |
^ |
(А) |
1 |
2 |
7 |
XTHL |
|
|
|
(L) ^ |
((SP)), (Н) о ((SP)+1) |
1 |
5 |
16 |
|
Команда MOV М,А означает, что в Н и L стоит адрес ячейки ЗУ, в которой записано содержание регистра г. Итак, в этом случае вместо обозначения регистра применено обозначение М (memory).
Команда также может быть применена с обратной последова тельностью: MOV г,М. В соответствии с этой командой содержание ячейки ЗУ, адрес которой стоит в HL, в регистр г.
LDAX гр означает «Load accumulator indirect (indexed)» («загру зочный накапливающий регистр косвенного действия, с индексаци ей»). Содержание ячейки ЗУ, адрес которой стоит в гр, загружается в накапливающий регистр. Здесь гр может соответствовать одна из пар ВС или DE.
STAX гр «store accumulator indirect (indexed)» («накапливающий регистр с хранением, косвенного действия, с индексацией»), гр здесь соответствует одной из регистерных пар BD или DE.
XTHL означает «exchange stack with Н and L» («замена содержания стека с Н и L»). Команда вызывает обмен содержания двух старших битов стека с регистернои парой HL. В регистр L приходит старший байт, в регистр Н приходит следующий по старшинству байт, адрес
16.10. Команда |
перехода |
которого выше на 1. При этом стек адресуется косвенно с помош;ью указателя вершины стека.
16.10.3. Адресация типа «Immediate»
Команда содержит данные в самом байте 2. Команда MVI С, 8 FH загружает регистр С с константой 8 FH. В команду входят 2 байта. В данном представлении 2-ой байт, который содержит подлежаш;ую загрузке константу, добавляется сзади. «Immediate» и «Register In direct» скомбинированы в команде MVI M,data. Байт 2 загружается в ЗУ, адрес которого расположен в паре регистров HL.
Таблица 16.7. Передача команд с адресацией типа «Immediate». В = байты,
|
Z = циклы, Т = такты. |
|
|
|
|||
Команда |
Операнд |
Воздействие |
В |
z |
T |
||
MVI |
г, |
data |
(г) ^ |
(byte 2) |
1 |
2 |
7 |
MVI |
М, |
data |
((H)(L)) ч- (byte 2) |
1 |
2 |
7 |
|
LXI |
гр, |
datal6 |
(rh) ^ |
(byte 3), (rl) f- (byte 2) |
1 |
2 |
7 |
16.10.4. |
Адресация типа «Direct» |
|
|
|
|||
Байт 2 и байт 3 команды при адресации типа «Direct» содержат адрес, под которым можно найти операнд.
LHLD addr означает «Load Н and L direct». Пара регистров HL загружается содержанием ячейки ЗУ с заданным адресом. К 5 тре буемым циклам относятся OF, MR (чтение младшего байта адреса), MR (чтение старшего байта адреса), MR (чтение младшего байта элемента данных), MR (чтение старшего байта элемента данных). Итак, переносятся 2 байта.
SHLD addr означает «Store Н and L direct», «записывание в Н и L, прямое».
IN port означает «Input» (вход). Данные, которые выдаются на определенный через port вывод для подключения периферии, за гружаются в накапливаюш;ий регистр. Port представляет собой 8-би товый адрес. В противоположность переходу с «управляемым памя тью» ЗУ (memory-mapped) требуются только 3 цикла: OF, MR, MW.
OUT port соответствует «Output», то есть «выходу». Запомнен ные в накапливаюш;ем регистре данные выдаются через периферий ный блок, адрес которого задан элементом программы port.
Команды IN и OUT приводят к установлению lOj-iM = 1. При других командах табл. 16.8 будет установлено IO|-iM = 0.
Глава |
16. |
Структура, |
система |
команд |
и работа |
|
микропроцессора |
||
Таблица |
16.8. Команда |
перехода |
с адресацией типа |
«Direct». В = байты, |
|||||
|
|
Z — циклы, Т = такты. |
|
|
|
|
|||
Команда |
Операнд |
Воздействие |
|
В |
Z |
T |
|||
LDA |
|
addr |
(A) ^ |
((byte 3)(byte 2)) |
3 |
4 |
13 |
||
STA |
|
addr |
((byte 3)(byte 2)) ^ |
(A) |
3 |
4 |
13 |
||
LHLD |
|
addr |
(L)<-((byte3)(byte2)), |
3 |
5 |
16 |
|||
|
(H) ^ |
((byte 3)(byte 2)+l) |
|||||||
|
|
|
|
|
|
||||
SHLD |
|
addr |
((byte 3)(byte 2)) 4- (L), |
3 |
5 |
16 |
|||
|
((byte 3)(byte 2)+l) ^ (H) |
||||||||
|
|
|
|
|
|
||||
IN |
|
port |
(A) ^ (data) |
|
2 |
3 |
10 |
||
OUT |
|
port |
(data) ^ |
(A) |
|
2 |
3 |
10 |
|
16.1 I. Арифметические команды
Арифметические команды отличаются от команд перехода тем, что они воздействуют на флаг-регистр. В приведенных в приложении таблицах флаги, которые устанавливаются в результате операции, перемаркированы значком X. При этом 1 означает, что флаг уста новлен, О — что убран.
В нашем распоряжении имеются команды сложения и вычита ния, соответствующие типам адресации «Register», «Register indi rect» и «Immediate». Кроме того, учитывается либо не учитывается стоящий перед операцией в флаг-регистре был переноса (carry-bit). В качестве примера приведены адресуемые по типу «Register indi rect» команды сложения, которые учитывают carry-bit (ADC М) либо игнорирующего (ADD М):
ADD М |
Воздействие: (А) ч- ((H)(L)) |
ADC М |
Воздействие: (А) <- ((H)(L)) + (Су) |
Команда |
CPI представляет собой тестовое вычитание (А) -Byte 2 |
и влияет на содержание накапливающего регистра не оказывает. Например, последовательных команд:
MVI А, OFH
CPI OFFH
действует так, что во флаг-регистре стоят следующие значения: S = О, Z = О, АС = 1, Р = О, Су = 1.
Далее в накапливающем регистре стоит OFH.
J\RA ЦИКЛОВ счета, J\ля обращения с массивами, J\ля банков дан ных и т. д. существуют специальные команды, с помощью которых
386 Глава 16. Структура, система команд и работа микропроцессора
Действие команды DAA является следующим:
1)Если 4 последних разряда содержания накапливающего реги стра выше, чем 9Н, или АС = 1, к содержанию накапливающе го регистра добавляется 6П.
2)Если первые 4 разряда содержания накапливающего регистра выше, чем 9Н, или если Су = 1, к 4 первым разрядам содержа ния накапливающего регистра добавляются 6П.
Вследующем примере показано, что после сложения двух чисел
вдвоично-десятичном коде проводится двухшаговал коррекция.
Пример
Сложение двух чисел в двоично-десятичном коде (BCD):
00101000 |
28io |
+00110111 |
37io |
01011111 |
l l l l 2 > 9 , отсюда коррекция с помощью |
|
добавления IIO2 = бю |
+00000110 |
Н-бю |
01100101 |
6510 |
В основе этого примера лежит следующий ассемблерный код:
MVI А, 28Н OOIOIOOOBCD или 28io загрузить в накапливающий регистр
ADI 37Н OOIIOIUBDC ИЛИ 37IO К А, тогда (А) == 5FH DAA (А) = OHOOIOIBCD ИЛИ бЗю
16.12. Логические операции
Логические операции проводятся поразрядно. В нашем распоряже нии находятся AND, OR и EXCLUSIVE OR. Кроме того, содержа ние накапливающего регистра может быть усложнено. Логические операции воздействуют на флаги. При некоторых операциях флаги устанавливаются независимо от результата. Команды J\A^ выполне ния логических операций приведены в приложении.
Типичным случаем применения является «маскирование» битов в ЗУ. Пусть в этом случае необходимо перепроверить, равен ли О бит 4 накапливающего регистра. В этом случае должен быть уста новлен флаг Z. }\ля этого достаточно команды «AND immediate» («И немедленно»).
16.13. Установка и стирание флагов переноса (carry flag) 387
16.13.Установка и стирание флагов переноса (carry flag)
Спомощью команд CMC (complement carry, «дополняющий пере нос») и STC (set carry, «установочный перенос») можно воздейство вать на флаг переноса (carry flag).
16.14.Команды сдвига
Различают левый и правый сдвиг, при этом carry-bit привлекает ся, либо нет. На следующих диаграммах показан принцип действия четырех возможных команд сдвига.
Поворот направо с переносом
Су |
накапливающий регистр |
||||
|
! |
I |
I |
I |
I |
Поворот налево с переносом
Су накапливающий регистр
Поворот направо
Су |
•• г |
" 1 |
» |
1 |
1 |
накапливающий регистр |
|||||
|
1 |
1 |
1 |
1 . |
|
Поворот налево |
|
|
|
|
|
Су |
1 |
1 |
1 |
\ |
1 |
накапливающий регистр |
|||||
16.15. Разветвление программ
Команды перехода изменяют нормальную последовательность ко манд, которая задается возрастанием значения счетчика команд. Ассемблерные программы вызывают на переход (jump) к конкрет ному адресу в ЗУ. Команда JMP всегда выполняется, как и коман да PCHL, которая обсуждалась выше. Напротив, команды JNZ, JZ,
16.16. Команды для подпрограммы
Для программиста задача подсчета байтов между переходом и целью перехода может оказаться чреватой ошибками. Ассемблерная программа разрешает эту задачу автоматически. Для этого задают символические адреса переходов.
В последующих ассемблерных программах используют метку (label) LOOP, которая представляет собой символический адрес
ANA |
А |
; |
тестировалие |
наксшливающего |
регистра |
JNZ |
LOOP |
; |
переход, если |
накапливающий |
регистр |
|
|
; |
равен О |
|
|
СМА |
|
; дополнение накапливающего регистра |
|||
LOOP
16.16, Команды для подпрограммы
Подпрограммы вызываются командой CALL («вызов»). При выдаче команды CALL осуществляются следующие шаги:
1.При вызове подпрограммы командой CALL вначале запоми нается адрес обратного перехода путем размещения в стеке сначала старшего байта счетчика команд, а затем младших байтов. Ячейка ЗУ в стеке определяется в процессе вычита ния 1 из адреса, на который показывает указатель вершины стека. Затем младший байт счетчика команд размещается в ячейке ЗУ с адресом (SP)-2.
2.Затем показания указателя вершины стека уменьшаются на 2. В том случае, если выбрано обычное представление, при ко тором ячейки ЗУ с более старшими адресами вносятся вниз, стек растет вверх. Указатель вершины стека после команды CALL показывает на самую старшую занятую позицию стека (top of stack = TOS).
3.Счетчик команд загружается адресом, имеющимся в операн де. Теперь на этом месте будет стоять следующая подлежащая выполнению команда.
При обратном переходе в соответствии с командой RET (return) производится:
LСодержание ячейки ЗУ, на которую показывает указатель вер шины стека, записываемый в младшем байте счетчика команд.
