Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КЛЕВО_FPGA

.pdf
Скачиваний:
39
Добавлен:
14.04.2015
Размер:
8.21 Mб
Скачать

Глава 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\ля банков дан­ ных и т. д. существуют специальные команды, с помощью которых

16.11. Арифметические команды 385

содержание регистра или ЗУ может быть увеличено или уменьше­ но. Они собраны в табл. 16.9. На carry-bit (бит переноса) влияние не сказывается, но есть возможность контролировать с помощью нулевого бита окончание цикла счета.

Таблица 16.9. 8-битовые команды на увеличение либо на уменьшение.

Команда

Операнд

Воздействие

В

Z

т

S

Z

А

р с

 

 

 

 

 

 

 

 

 

С

Y

INR

г

(г) ^

(г) + 1

1

1

4

X

X

X

X

INR

М

((H)(L))4-((H)(L)) + 1

1

3

10

X

X

X

X

DCR

г

(г) ^

(г) - 1

1

1

4

X

X

X

X

DCR

М

( ( H ) ( L ) ) ^ ( ( H ) ( L ) ) - 1

1

3

10

X

X

X

X

В нашем распоряжении имеются специальные команды ^щя ариф­ метических операций (табл. 16.10). При этом учитывается, что коман­ да DAD «add register pair to H and L» воздействует только на бит переноса Carry-bit Су. Две других команды не ведут к установлению каких-либо флагов.

Таблица 16.10. Арифметические 16-битовые команды с типом адресации «Register».

Команда Операнд Воздействие

В z т s z A

P

С

 

С

 

Y

DAD

гр

((H)(L))^(H)(L) +

(rh)(rl)

1

3

10

INX

гр

(rh)(rl)

^

(rh)(rl) +

l

1

1

6

DCX

i-p

(rli)(rl)

^

(rh)(rl) -

1

1

1

6

X

J\jiK арифметических операций в двоично-десятичном коде име­ ется команда, которая после сложения чисел в двоично-десятичном коде корректирует перенос (табл. 16.11). Если из-за сложения обра­ зуются «псевдотемрады» (то есть шестнадцатиричные числа боль­ ше 9) результат с помош,ью добавления 6 коррелируется.

Таблица 16.11. Команда для арифметических операций в двоично-

 

десятичном коде.

 

 

 

 

 

 

 

 

Команда Операнд Воздействие

В

Z

т

S

Z

А

Р

с

 

 

 

 

 

 

 

С

 

Y

DAA

Коррекция числа в

1

1

4

X

X

X

X

X

двоично-десятичном коде

 

 

 

 

 

 

 

 

 

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,

388 Глава 16. Структура, система команд и работа микропроцессора

JNC, JC и т. д. выполняемая только тогда, когда выполнены задан­ ные условия. Возможные условия, касающиеся флагов, перечислены в табл. 16.12. Обусловленный переход требует еще одного цикла.

Таблица 16.12. Команды перехода.

Ко м а н да Операнд Воздействие, если

 

 

условие

выполнено

JMP

addr

(PC) ^

(byte3)(byte2)

JNZ

addr

ч

 

 

 

JZ

addr

 

 

JNC

addr

 

 

JC

addr

I (PC) ^

(byte3)(byte2)

JPO

addr

 

 

JPE

addr

 

 

JP

addr

 

 

JM

addr

/

 

 

 

 

Условие В

z

T

нет

 

3

3

10

Z =

0

Ч

 

 

 

 

 

Z =

1

 

 

 

C Y - 0

 

 

 

CY = 1

>3

2/3

7/10

P =

0

 

 

 

P =

1

 

 

 

S =

0

 

 

 

S =

1

 

 

 

16.15.1.Пример перехода

Вследующем примере рассмотрим переходы в последовательности команд, состоящей из LXI и MOV. Вначале адрес цепи перехода неизвестен.

JMP

переход к цели перехода

LXI Н, ОЕСОН

загрузка пары регистров HL из ОЕСОН

MOV V, А

перезапись накопительного регистра в ОЕСОМ

. . . .

; цель перехода

Чтобы установить адрес цели перехода, абсолютное положение программы в ЗУ должно быть фиксировано. Кроме того, должно быть отсчитано число байтов (команд и операндов). В примере, при­ веденном ниже, программа откладывается до адреса 1000Н. Из это­ го получаем цель перехода 1007 Н.

А д р е с

Содерж:ание

К о м е н т а р и й

1000

СЗ

JMP

 

1001

07

Adress

Low-Byte

1002

10

Adress

High-Byte

1003

21

LXI

 

1004

СО

Operand

Low-Byte

1005

ОЕ

Operand

High-Byte

1006

77

MOV M,A.

1007

 

Sprungziel (Adresse 1007)

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. Структура, система команд и работа микропроцессора

Содержание ячейки с адресом выше на 1 записывается в стар­ шем байте PC (PC = program counter = instruction counter =

= счетчик команд).

2.Показание указателя вершины стека возрастает на 2.

Таблица 16.13. Команды перехода.

Команда

Операнд

Воздействие, если

CALL

addr

условие выполнено

((SP) - 1) ^

(РСН)

 

 

((SP) - 2) ^

(РСН)

 

 

(SP) 4- (SP) - 2

CNZ

addr

(PC) ^ (byte3)(byte2)

N

 

 

 

 

 

 

CZ

addr

 

 

 

CNC

addr

((SP) - 1) ^

(РСН)

ОС

addr

1 ((SP) - 2) ^

(PCL)

СРО

addr

I (SP) ^

(SP) - 2

СРЕ

addr

(PC) ^

(byte3)(byte2)

СР

addr

 

 

 

1СМ

addr

/

 

 

1 RET

 

(PCL) ^

((SP))

 

 

(РСН) <г- ((SP) + 1)

 

 

(SP) -S- (SP) + 2

RNZ

 

ч

 

 

RZ

 

(PCL) ^ ((SP))

RNC

 

RC

 

1 (РСН) ^ ((SP) + 1)

RPO

 

1 (SP) ^

(SP) + 2

RPE

 

 

 

 

RP

 

J

 

 

RM

 

 

 

RST п

 

((SP) - 1) ^

(РСН)

п G {0..7}

 

((SP) - 2) ^ (PCL)

 

 

(SP) ^ (SP) - 2

 

 

(PC) ^ п X 8

 

Условие

В

Z

T

нет

3

5

18

Z = 0

\

 

 

Z = l

 

 

 

CY = 0

 

 

 

C Y = 1

>3

2/5

9/18

P = 0

 

 

 

P = 1

 

 

 

S = 0

 

 

 

S = l

J

 

 

нет

1

3

10

Z = 0

Ч

 

 

 

 

 

Z = 1

 

 

 

CY = 0

и 1/3

 

CY=:1

6/12

P = 0

P = l

 

 

 

S = 0

 

 

 

S = l

)

 

 

нет

1

3

12

Вызовы подпрограммы не влияют на флаги. Дальнейшее выполне­ ние подпрограммы продолжается так, как это можно видеть в та­ блице.

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