
- •4. Программирование микропроцессоров
- •4.1. Запись программ
- •4.2. Методы адресации
- •4.3. Состав команд арифметических действий
- •4.4. Состав команд логических операций
- •4.5. Команды перемещения данных
- •4.6. Команды операций перехода и передачи управления
- •4.7. Команды операций вызова подпрограмм и возврата в основную программу
- •4.8. Команда загрузки в стек и возврата в основную программу
- •4.9. Команды управления
- •Вопросы для самоконтроля
4. Программирование микропроцессоров
Работа микропроцессорного устройства основана на обработке информации, представляемой двоичными сигналами объемом в один, два или три байта, называемой машинной программой. Например, однобайтная команда загрузки данных в аккумулятор, имеет вид 0011 1010, а адрес ячейки памяти, имеющей номер 103, в двоичном коде имеет вид 0000, 0000, 0110 , 0111. Человеку практически невозможно понять программу микропроцессора, представленную в такой форме.
Программа на машинном языке становится проще для восприятия, если она представлена в шестнадцатеричном коде (Н-коде).
При составлении программ, особенно сложных, неизбежны ошибки. Обнаружить их среди исходных по форме команд непросто, поэтому для удобства программистов и пользователей разработан мнемокод (названный так по имени греческой богини памяти - Мнемозины). Он представляет собой последовательность букв, взятых из английского алфавита, заменяющих полное слово или фразу, определяющую смысл команды. Например, команда сложения содержимого аккумулятора с операндом, размещенным в очередной ячейке памяти, записывается в мнемокоде буквами АDI(сокращение фразы add immediate - сложить непосредственно). Перечень команд для микропроцессора К580ВМ80 дан в табл. 4.1, которая содержит 16 строк и 16 граф. Каждая строка пронумерована шестнадцатеричными числами старшей тетрады кода команды, а каждая графа числами младшей тетрады кода команды. Например, код команды АDI – С6. В двоичной системе счисления коду ADI соответствует число 11000110.
Мнемокод в комплексе с дополнительными символами, необходимыми для последующего перевода программы на машинный язык, образует машинно-ориентированный язык - язык ассемблера или просто ассемблер. Программа, написанная и проверенная на ассемблере, переводится на объектный (машинный) язык специальными устройствами - трансляторами.
При составлении программ на ассемблере к мнемокодам команд добавляют метки, указывающие на ячейки памяти, с которыми оперирует программа. Следует напомнить, что в микропроцессорах операции сложения, сравнения, инкремента, декремента, отрицания, сдвига (перестановка), И, ИЛИ, ИЛИ ИСКЛЮЧАЮЩИЕ, дополнение, сброс, инициализация выполняет арифметическо-логическое устройство (АЛУ), состоящее из сумматора, регистра состояния и устройства сдвига. Данные (операнды) на сумматор АЛУ подаются из аккумулятора (регистр А) и регистра временного хранения (одного из регистров РОН), а результат из АЛУ пересылается обратно в аккумулятор посредством внутренней шины данных. В состав РОН входят восемь 8-разрядных регистров В, С, D, Е, Н, L , W и Z. Первые шесть могут объединяться в 16-разрядные пары В и С, D и Е, Н и L, и три 16-разрядных регистра-адреса (РА), указатель стека (УС или SP) и счета команд (СК или PC).
Для лучшего понимания системы команд MП K580BМ80 удобно пользоваться его программистской моделью (рис. 4.1), соответствующей упрощенной структуре МП и содержащей только узлы, наиболее важные для понимания программистом процесса его работы.
В верхней части (см. рис. 4.1) приведены все программно-доступные (адресуемые в командах в явной или неявной формах) узлы микропроцессора и памяти, а в нижней части - программно-недоступные узлы МП.
Система команд микропроцессора Таблица 4.1
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
А |
В |
С |
D |
E |
F |
|
0 |
NOP |
LXI |
STAX |
INX |
INR |
DCR |
MVI |
RLC |
|
DAD |
LDAX |
DCX |
INR |
DCR |
MVI |
RRC |
0 |
B,nnnn |
B |
B |
B |
B |
B,nn |
B |
B |
B |
C |
C |
C,nn |
||||||
1 |
|
LXI |
STAX |
INX |
INR |
DCR |
MVI |
RAL |
|
DAD |
LDAX |
DCX |
INR |
DCR |
MVI |
RAR |
1 |
D,nnnn |
D |
D |
D |
D |
D,nn |
D |
D |
D |
E |
E |
E,nn |
||||||
2 |
|
LXI |
SHLD |
INX |
INR |
DCR |
MVI |
DAA |
|
DAD |
LDAX |
DCX |
INR |
DCR |
MVI |
CMA |
2 |
H,nnnn |
Nnnn |
H |
H |
H |
H,nn |
H |
nnnn |
H |
L |
L |
L,nn |
||||||
3 |
|
LXI |
STA |
INX |
INR |
DCR |
MVI |
STC |
|
DAD |
LDAX |
DCX |
INR |
DCR |
MVI |
CMC |
3 |
SP,nnnn |
nnnn |
SP |
M |
M |
M,nn |
SP |
nnnn |
SP |
A |
A |
A,nn |
||||||
4 |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
4 |
B,B |
B,C |
B,D |
B,E |
B,H |
B,L |
B,M |
B,A |
C,B |
C,C |
C,D |
C,E |
C,H |
C,L |
C,M |
C,A |
||
5 |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
5 |
D,B |
D,C |
D,D |
D,E |
D,H |
D,L |
D,M |
D,A |
E,B |
E,C |
E,D |
E,E |
E,H |
E,L |
E,M |
E,A |
||
6 |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
6 |
H,B |
H,C |
H,D |
H,E |
H,H |
H,L |
H,M |
H,A |
L,B |
L,C |
L,D |
L,E |
L,H |
L,L |
L,M |
L,A |
||
7 |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
HLT |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
MOV |
7 |
M,B |
M,C |
M,D |
M,E |
M,H |
M,L |
M,A |
A,B |
A,C |
A,D |
A,E |
A,H |
A,L |
A,M |
A,A |
|||
8 |
ADD |
ADD |
ADD |
ADD |
ADD |
ADD |
ADD |
ADD |
ADC |
ADC |
ADC |
ADC |
ADC |
ADC |
ADC |
ADC |
8 |
B |
C |
D |
E |
H |
L |
M |
A |
B |
C |
D |
E |
H |
L |
M |
A |
||
9 |
SUB |
SUB |
SUB |
SUB |
SUB |
SUB |
SUB |
SUB |
SBB |
SBB |
SBB |
SBB |
SBB |
SBB |
SBB |
SBB |
9 |
B |
C |
D |
E |
H |
L |
M |
A |
B |
C |
D |
E |
H |
L |
M |
A |
||
A |
ANA |
ANA |
ANA |
ANA |
ANA |
ANA |
ANA |
ANA |
XRA |
XRA |
XRA |
XRA |
XRA |
XRA |
XRA |
XRA |
A |
B |
C |
D |
E |
H |
L |
M |
A |
B |
C |
D |
E |
H |
L |
M |
A |
||
B |
ORA |
ORA |
ORA |
ORA |
ORA |
ORA |
ORA |
ORA |
CMP |
CMP |
CMP |
CMP |
CMP |
CMP |
CMP |
CMP |
B |
B |
C |
D |
E |
H |
L |
M |
A |
B |
C |
D |
E |
H |
L |
M |
A |
||
C |
RNZ |
POP |
JNZ |
JMP |
CNZ |
PUSH |
ADI |
RST |
RZ |
RET |
JZ |
|
CZ |
CALL |
ACI |
RST |
C |
B |
nnnn |
nnnn |
nnnn |
B |
nn |
0 |
nnnn |
nnnn |
nnnn |
nn |
1 |
||||||
D |
RNC |
POP |
JNC |
OUT |
CNC |
PUSH |
SUI |
RST |
RNC |
|
JC |
IN |
CC |
|
SBI |
RST |
D |
D |
nnnn |
nn |
nnnn |
D |
nn |
2 |
nnnn |
nn |
nnnn |
nn |
3 |
||||||
E |
RPO |
POP |
JP |
XTHL |
CPO |
PUSH |
ANI |
RST |
RPO |
PCHL |
JPE |
XCHG |
CPE |
|
XRI |
RST |
E |
H |
nnnn |
nnnn |
H |
nn |
4 |
nnnn |
nnnn |
nn |
5 |
||||||||
F |
RP |
POP |
JP |
DI |
CP |
PUSH |
ORI |
RST |
RM |
SPHL |
JM |
EI |
CM |
|
CPI |
RST |
F |
PSW |
nnnn |
nnnn |
PSW |
nn |
6 |
nnnn |
nnnn |
nn |
7 |
||||||||
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
А |
В |
С |
D |
E |
F |
|
Программно-доступные
узлы
СК (РС)
15 0
УС (SР)
15 0
Н L
15 87
0
В С
Д Е
15 87
0
А
7 0
ПЗУ
7 0
ОЗУ
стек
S
Z
O
AC
O
P
I
CУ
F
2
0
7 6
5 4 3 2
1 0
Внешнее устройство
Программно-недоступные
узлы
РА
15 0
W
7 0
Z
7 0
АЛУ
7 0
7
0
7
0
7 0
БР
Устройство
управления
Рис. 4.1. Программистская
модель МП
Трехбайтные
команды
1 байт
2 байт
3 байт
rp
ccc
Двухбайтные
команды
1 байт
2 байт
DDD
Поле кода операции
а
в
Однобайтные
команды
DDD
SSS
7
5 3 2
0
0
SSS
DDD
2
0
2
0
RР
5 4 3
0
б
д
е
ж
з
Рис. 4.2. Форматы команд
Программно доступны регистры РОН с именами А, В, С, Д, Е, Н, L , PC, SP, регистр признаков F и память (постоянная, оперативная, стек).
К программно-недоступным относятся регистры РОН с именами W, Z и РА, АЛУ, устройство управления (УУ) и буферный регистр (БР).
Шестнадцатиразрядный счетчик команд PC указывает адрес ячейки памяти, в которой записана требуемая команда или данные. После выполнения МП команды значение счетчика увеличивается на единицу, что обеспечивает последовательное выполнение программы.
Регистров общего назначения (РОН) восемь, шесть из них программно доступны для временного хранения. B регистрах ВС, ДЕ и НL можно производить операции над адресами и двоичными числами.
Аккумулятор А восьмиразрядный, выполняет больше функций, чем РОН, так как часть команд МП работает только с ним.
Регистр признаков F предназначен для занесения пяти признаков результата выполнения операций в АЛУ, имеющих определенный смысл и свое мнемоническое обозначение (отрицательного результата, переполнения разрядной сетки, переноса из 3-го в 4-й разряд, четности и нулевого результата). С помощью соответствующих команд, заложенных в программу, можно читать и частично изменять его содержимое.
Указатель стека SР используется для указания адреса некоторой области оперативной памяти, называемой стеком. Последовательность считывания данных из стека обратна последовательности их записи.
Основная память МП состоит из двух частей: ПЗУ и ОЗУ. МП может обрабатывать только те данные команды программы и операнды, которые находятся в основной памяти. Данные из внешней памяти (например, на НГМД) необходимо переносить в ОЗУ.
Первые 16 Кбайт с адресами от 0000 до 4000 используются для загрузки и выполнения системных и прикладных программ. Если для их работы требуется больший объем памяти, то для них можно использовать буферную область ОЗУ с адресами от 4000 до 8000, так называемую буферную область памяти. Область ОЗУ объемом 16 Кбайт с адресами от 8000 до С000 называется экранной и используется для занесения программ и данных. Ячейки памяти с адресами от С000 до FFFF относятся к буферной области программ и данных, в которой 7 Кбайт старшей области отведены для обслуживания устройств ввода - вывода и программы "Монитор",
Внешние устройства МП - клавиатура, дисплей, различные датчики и исполнительные устройства подключаются к МП с помощью блоков ввода - вывода, которые работая под управлением программы МП, обеспечивают ввод и вывод информации. Блок ввода - вывода, называемый интерфейсным блоком, обеспечивает соединение МП и ВУ, имеющих различный уровень и форму сигналов, различные шины. К МП KP580 можно подключать 2 * 8 = = 512 устройств ввода - вывода, выбор которых обеспечивается специальной командой по восьми младшим разрядам шины адреса.
Полный перечень операций, которые может выполнять МП, называют системой команд. Содержание команды может занимать один, два или три байта. Совокупность сведений, которые для каждой команды MП задают ее длину, состав и взаимное расположение частей, называют форматом команды. Форматы команд приведены на рис. 4.2. Каждая команда содержит в первом байте поле кода операции, но многие команды имеют еще одно или несколько полей, указывающих условия передачи управления (ССС), адрес вектора прерывания (NNN), регистр приемник (DDD), регистр передатчик (SSS), адрес пары регистров (RP). Во втором и третьем байтах находятся поля адреса операндов в памяти компьютера или адреса ввода - вывода данных.
При описании команд в ее мнемонике используют следующие условные обозначения:
1) R, R1, R2 - один из восьмиразрядных регистров МП, включая А (аккумулятор);
2) RP - регистровая пара В, D, Н или указатель стека SP;
3) HR, 1R - старший и младший регистры регистровой пары, например Н и L ;
4) М - ячейка памяти, адрес которой хранится в регистрах Н и L;
5) F - регистр признаков или флагов;
6) b2 и b3 - второй и третий байты команды;
7) PC - счетчик команд или программный счетчик;
8) → направление передачи операнда;
9) ( ) - содержимое регистра или ячейки памяти, имя которых указано в скобках;
10) [ ] - символы в скобках означают адрес;
11) Z, S, AС, СY, Р - биты регистра признаков;
12) PSW - соединение регистров А и F, содержащее слово состояния процессора.