КЛЕВО_FPGA
.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Содержание ячейки ЗУ, на которую показывает указатель вер шины стека, записываемый в младшем байте счетчика команд.
16.16. Команды для подпрограммы
Команда RST (restart, «перезапуск») вызывает после запомина ния PC новый старт программы по определенному адресу. Старто вый адрес является результатом умножения двоичного эквивалента операнда на 8.
Например, J\ля. RST Зю = 112 стартовым адресом является
0000000000011000.
С помощью команд PUSH и POP содержание регистров может быть размещено в ЗУ магазинного типа (то есть стеке) и выведено вновь, чтобы избежать его разрушения при операциях подпрограм мы. С помощью команд PUSH PSW и POP PSW можно сохранить (содержимое накапливающего регистра и флаг-регистра = proces sor status word, PSW, слева состояния процессора). Команда XTHL производит взаимную замену пары регистров HL и TOS (top of staса, вершина стека).
Указатель вершины стека может быть загружен в регисторную пару HL с помощью следующих команд
LXI Н,ООООН DAD SP
Указатель вершины стека должен быть инициализирован. Как пра вило, его устанавливают по самому старшему адресу зоны RAMH-1. Поскольку он перед первой записью уменьшает свое значение на 1, он будет при этом показывать на старший адрес. Инициализация может быть осуществлена с помощью команды LXISP.
Таблица 16.14. Команды для стека.
К о м а н да |
Операнд |
Воздействие, если |
В |
z |
T |
|||
|
|
условие выполнено |
|
|
|
|||
PUSH |
i-p |
((SP) - |
1) |
^ |
(rh) |
1 |
3 |
12 |
|
(rp Ф SP) |
((SP) - |
2) |
^ |
(rl) |
|
|
|
|
|
(SP) ^ |
(SP) - 2 |
|
|
|
||
PUSH |
PSW |
((SP) - |
1) |
^ |
(A) |
1 |
3 |
12 |
|
|
((SP) - |
2) |
^ |
(?????????) |
|
|
|
|
|
(SP) ^ |
(SP) - |
2 |
|
|
|
|
POP |
rp |
(rl) <- |
((SP)) |
|
1 |
3 |
10 |
|
|
(rp Ф SP) |
(rh) ^ |
((SP) + 1) |
|
|
|
||
|
|
(SP) <r- (SP) + 2 |
|
|
|
|||
POP |
PSW |
(???????????) |
4r- ((SP)) |
1 |
3 |
10 |
||
|
|
(A) ^ |
((SP) + 1) |
|
|
|
||
|
|
(SP) ^ |
(SP) + 2 |
|
|
|
||
