- •Глава V. Архитектурные особенности организации эвм различных классов
- •1. Учебная микроЭвм "Электроника – 580"
- •2. Система команд микроЭвм "Электроника – 580"
- •3. Шины обмена информацией в эвм
- •4. Материнская плата с процессором Pentium
- •5. Чипсеты материнских плат с процессорами р7 или к7
- •6. Компьютеры с процессорами iа-64 и их развитие
- •Заключение
- •Контрольные вопросы Вопросы к главе 1
- •Вопросы к главе 2
- •Вопросы к главе 3
- •Вопросы к главе 4
- •Вопросы к главе 5
- •Список сокращений
- •Список литературы
2. Система команд микроЭвм "Электроника – 580"
Последовательность (закон) преобразования информации в ЭВМ задается программой. Программа размещается в ОЗУ в виде команд, представленных в машинных кодах. Представление программ в машинных кодах требует много времени на ввод команд и их проверку. Поэтому для уменьшения времени на программирование, вероятности ошибок кодирования, повышения наглядности представления команд для задания закона преобразования информации используется машинно-ориентированный язык Ассемблер. Поскольку различные микроЭВМ отличаются структурой и конструктивными особенностями, изменяется содержание и языка Ассемблер. Однако эти изменения имеют преемственность, а представление программы на языке Ассемблер позволяет получать наиболее короткие программы, занимающие меньший объем памяти по сравнению с программами, написанными на языках высокого уровня (БЕЙСИК, СИ). Программа, представленная в мнемонике Ассемблера, также должна быть оттранслирована, т.е. переведена и размещена в машинных кодах в ОЗУ. Для такого перевода необходима программа-транслятор, которой в «Мониторе» УОУ не имеется. Поэтому, хотя здесь и изучается язык Ассемблер и команды представляются в его мнемонике, запись команд в ОЗУ осуществляется в шестнадцатеричной системе счисления вручную с клавиатуры УОУ.
Система команд микропроцессора КР 580 ВМ 80А приведена в табл. 5.1. Команды условно разбиты на 5 групп, в первом столбце таблицы представлены наименования команд в мнемонике Ассемблера, где
Ri,Rj
{A,B,C,D,E,H,L,M};
V- 8-битное данное [V(16) ];
aa– 16-битный адрес памяти [aa(16)];
RP– регистровая параB,C;D,E;H,Lили указатель стекаSP;
ap– 8-битный адрес порта [ap(16)].
Во втором столбце таблицы указано содержание первого байта команды (ПБ), где Т означает ссылку на дополнение к таблице 5.1, в котором ПБ конкретизирован в зависимости от типа команды. В третьем столбце таблицы 5.1 размещена размерность команды в байтах, в четвертом – её функциональное назначение, в последующих столбцах указано содержание поименованных разрядов регистра F после выполнения команды:
" + " – возможно изменение в состоянии, зависящее от результата выполнения команды;
" – " – состояние не меняется;
" 0 ", " 1 " – состояние нуля или единицы.
2.1. Команды передачи данных
Первая группа команд в табл. 5.1 обеспечивает выполнение операций размещения, обмена, загрузки и перемещения данных. Число команд – 84. Наибольшее число команд пересылки типа MOVRi,Rj. Команды однобайтные, предназначены для пересылки операндов из одного регистра в другой или обмена информацией между РОН и ОЗУ. Например, командаMOVA,Bимеет код 78(16)(дополнение к таблице 5.1); адресация – регистровая, выполняет операцию передачи содержимого регистраBв регистрA(AB).
Команды MOVM,Rjосуществляют передачу содержимого одного из РОН в ячейку памяти с адресом, указанным в регистровой пареH,L. Поэтому перед выполнением данных команд необходимо предварительно поместить младший байт адреса ячейки М в регистрL, старший байт адреса в регистрH. Такая операция выполняется командойLHLDаа, которая из ячейки с адресом аа загружает содержимое в L, а из ячейки аа+1 загружает содержимое в H. Например, после загрузки этой командой регистра Н содержимым 82(16),L– 40(16)выполняется командаMOVM,A: код команды 77(16)загружается в РК и из аккумулятора информация передается в ячейку с адресом 8240(16).
Команды MOVRi,Mосуществляют передачу содержимого ячейки памяти М с адресом, указанным в регистровой пареH,L, в один из РОН.
Рассмотрим назначение других команд:
MVIRi,Vосуществляют непосредственную передачу операнда, находящегося во втором байте команды, в РОН или ячейку памяти.
MVIB,V(код – 06(16)) загружает в регистр В второй байт команды, равныйV.
MVIM,V(код – 36(16)) осуществляет непосредственную передачу второго байта командыVв ячейку с адресом, указанным в регистровой пареH,L.
LDAаа осуществляет прямую загрузку аккумулятора содержимым ячейки памяти с адресом аа, причем второй байт команды – младшие разряды адреса, третий байт – старшие.
STAаа осуществляет передачу содержимого аккумулятора в ячейку с адресом аа , т.е. М (байт3, байт2)А.
LHLDаа загружает регистровую паруH,Lсодержимым ячеек памяти с адресами аа, аа+1, т.е. НМ (аа+1),LМ (аа).
LDAXB,LDAXDзагружают аккумулятор содержимым ячейки по адресу, находящемуся в регистровой пареB,C;D,Eсоответственно.
STAXB,STAXDпередают содержимое аккумулятора в ячейку памяти по адресу, находящемуся в регистровой пареB,C;D,Eсоответственно.
XCHGосуществляет обмен данными между регистрамиHиD,LиE.
SHLDаа загружает две соседние ячейки памяти содержимым регистровH,L: М(байт3, байт2 = аа(16))L, М(аа+1)H.
|
Т
Таблица 5.1
Система команд К580
| |||||||||||
|
Мнемоника |
ПБ |
Байт |
Описание команды |
RGF | |||||||
|
Z |
S |
P |
СУ |
АС | |||||||
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | |||
|
1. Команды передачи данных | |||||||||||
|
MOV Ri,Rj |
T |
1 |
RiRj |
- |
- |
- |
- |
- | |||
|
MVI Ri,V |
T |
2 |
RiV |
- |
- |
- |
- |
- | |||
|
LXI P,VV |
T |
3 |
RPVV |
- |
- |
- |
- |
- | |||
|
LDA aa |
3A |
3 |
AM(aa) |
- |
- |
- |
- |
- | |||
|
STA aa |
32 |
3 |
M(aa) A |
- |
- |
- |
- |
- | |||
|
LHLD aa |
2A |
3 |
LM(aa), HM(aa+1) |
- |
- |
- |
- |
- | |||
|
SHLD aa |
22 |
3 |
M(aa) L, M(aa+1) H |
- |
- |
- |
- |
- | |||
|
LDAX B |
0A |
1 |
AM(B,C) |
- |
- |
- |
- |
- | |||
|
LDAX D |
1A |
1 |
AM(D,E) |
- |
- |
- |
- |
- | |||
|
STAX B |
02 |
1 |
M(B,C) A |
- |
- |
- |
- |
- | |||
|
STAX D |
12 |
1 |
M(D,E) A |
- |
- |
- |
- |
- | |||
|
XCHG |
EB |
1 |
HD,LE |
- |
- |
- |
- |
- | |||
|
2. Арифметические команды | |||||||||||
|
ADDRi |
T |
1 |
A(A+Ri) |
+ |
+ |
+ |
+ |
+ | |||
|
ADI V |
C6 |
2 |
A(A+V) |
+ |
+ |
+ |
+ |
+ | |||
|
ADC Ri |
T |
1 |
A(A+Ri+СУ) |
+ |
+ |
+ |
+ |
+ | |||
|
ACI V |
CE |
2 |
A(A+V+СУ) |
+ |
+ |
+ |
+ |
+ | |||
|
DAD RP |
T |
1 |
HL(HL+RP) |
- |
- |
- |
+ |
- | |||
|
SUB Ri |
T |
1 |
A(A-Ri) |
+ |
+ |
+ |
+ |
+ | |||
|
SUI V |
D6 |
2 |
A(A-V) |
+ |
+ |
+ |
+ |
+ | |||
|
SBB Ri |
T |
1 |
A(A-Ri-СУ) |
+ |
+ |
+ |
+ |
+ | |||
|
SBI V |
DE |
1 |
A(A-V-СУ) |
+ |
+ |
+ |
+ |
+ | |||
|
INR Ri |
T |
1 |
RiRi+1 |
+ |
+ |
+ |
- |
+ | |||
|
INX RP |
T |
1 |
RPRP+1 |
- |
- |
- |
- |
- | |||
|
DCR Ri |
T |
1 |
RiRi-1 |
+ |
+ |
+ |
- |
+ | |||
|
DCXRP |
T |
1 |
RPRP-1 |
- |
- |
- |
- |
- | |||
|
DAA |
27 |
1 |
Десятичная коррекция |
+ |
+ |
+ |
+ |
+ | |||
|
3. Логические команды | |||||||||||
|
ANARi |
T |
1 |
A(A & Ri) |
+ |
+ |
+ |
0 |
+ | |||
|
ANI V |
E6 |
2 |
A(A & V) |
+ |
+ |
+ |
0 |
+ | |||
|
XRA Ri |
T |
1 |
A(A
|
+ |
+ |
+ |
0 |
0 | |||
|
XRI V |
EE |
2 |
A(A
|
+ |
+ |
+ |
0 |
0 | |||
|
ORA Ri |
T |
1 |
A(A V Ri) |
+ |
+ |
+ |
0 |
0 | |||
|
ORI V |
F6 |
2 |
A(A V V) |
+ |
+ |
+ |
0 |
0 | |||
|
CMP Ri |
T |
1 |
AA(Z=1, если A=Ri; СУ=1, если A<Ri) |
+ |
+ |
+ |
+ |
+ | |||
|
CPI V |
FE |
2 |
AA(Z=1, если A=V; СУ=1, если A<Ri) |
+ |
+ |
+ |
+ |
+ | |||
|
Продолжение табл. 5.1
| |||||||||||
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | |||
|
RLC |
07 |
1 |
L1(A.b7), СУb7 |
- |
- |
- |
+ |
- | |||
|
RAL |
17 |
1 |
L1(A,СУ),СУb7 |
- |
- |
- |
+ |
- | |||
|
RAR |
1F |
1 |
R1(СУ,A),СУb0 |
- |
- |
- |
+ |
- | |||
|
RRC |
0F |
1 |
R1(b0.A),СУb0 |
- |
- |
- |
+ |
- | |||
|
STC |
37 |
1 |
СУ1 |
- |
- |
- |
1 |
- | |||
|
CMC |
3F |
1 |
СУ |
- |
- |
- |
+ |
- | |||
|
CMA |
2F |
1 |
А |
- |
- |
- |
- |
- | |||
|
4. Команды передачи управления | |||||||||||
|
JMP aa |
C3 |
3 |
PCaaбезусловный переход |
- |
- |
- |
- |
- | |||
|
JNZ aa |
C2 |
3 |
PCaa при Z=0, иначе PCPC+1 |
- |
- |
- |
- |
- | |||
|
JZ aa |
CA |
3 |
Pcaa при Z=1, иначе PCPC+1 |
- |
- |
- |
- |
- | |||
|
JNC aa |
D2 |
3 |
PCaaпри СУ=0, иначеPCPC+1 |
- |
- |
- |
- |
- | |||
|
JC aa |
DA |
3 |
PCaaпри СУ=1, иначеPCPC+1 |
- |
- |
- |
- |
- | |||
|
JPO aa |
E2 |
3 |
PCaa при P=0, иначе PCPC+1 |
- |
- |
- |
- |
- | |||
|
JPE aa |
EA |
3 |
PCaa при P=1, иначе PCPC+1 |
- |
- |
- |
- |
- | |||
|
JP aa |
F2 |
3 |
PCaa при S=0, иначе PCPC+1 |
- |
- |
- |
- |
- | |||
|
JM aa |
FA |
3 |
PCaa при S=1, иначе PCPC+1 |
- |
- |
- |
- |
- | |||
|
PCHL |
E9 |
1 |
PC(HL) |
- |
- |
- |
- |
- | |||
|
CALL aa |
CD |
3 |
PCaa, M(SP-1) PCH, M(SP-2) PCL, SPSP-2 |
- |
- |
- |
- |
- | |||
|
RET |
C9 |
1 |
PCHM(SP+1), PCLM(SP), SPSP+2 |
- |
- |
- |
- |
- | |||
|
RST i*8 |
T |
1 |
PC(8*i)(10), M(SP-1) PCH, M(SP-2) PCL, SPSP-2 |
- |
- |
- |
- |
- | |||
|
5. Команды ввода/вывода, организации прерываний | |||||||||||
|
IN ap |
DB |
2 |
A[ap] |
- |
- |
- |
- |
- | |||
|
OUT ap |
D3 |
2 |
[ap] A |
- |
- |
- |
- |
- | |||
|
PUSH RP |
T |
1 |
[M(SP-1), M(SP-2)] RP, SPSP-2 |
- |
- |
- |
- |
- | |||
|
POP RP |
T |
1 |
RP[M(SP+1), M(SP)], SPSP+2 |
- |
- |
- |
- |
- | |||
|
XTHL |
E3 |
1 |
HM(SP+1), LM(SP) |
- |
- |
- |
- |
- | |||
|
SPHL |
F9 |
1 |
SP(H,L) |
- |
- |
- |
- |
- | |||
|
О
Окончание табл.
5.1
| |||||||||||
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | |||
|
EI |
FB |
1 |
Разрешение прерывания |
- |
- |
- |
- |
- | |||
|
DI |
F3 |
1 |
Запрещение прерывания |
- |
- |
- |
- |
- | |||
|
NOP |
00 |
1 |
Пустая команда |
- |
- |
- |
- |
- | |||
|
HLT |
76 |
1 |
Останов |
- |
- |
- |
- |
- | |||
Дополнение к
таблице 5.1
|
Дополнение к таблице 5.1.
| ||||||||||||
|
Ri Rj |
A |
B |
C |
D |
E |
H |
L |
M | ||||
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | ||||
|
MOV Rj, Ri | ||||||||||||
|
A |
7F |
78 |
79 |
7A |
7B |
7C |
7D |
7E | ||||
|
B |
47 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | ||||
|
C |
4F |
48 |
49 |
4A |
4B |
4C |
4D |
4E | ||||
|
D |
57 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | ||||
|
E |
5F |
58 |
59 |
5A |
5B |
5C |
5D |
5E | ||||
|
H |
67 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | ||||
|
L |
6F |
68 |
69 |
6A |
6B |
6C |
6D |
6E | ||||
|
M |
77 |
70 |
71 |
72 |
73 |
74 |
75 |
- | ||||
|
ADD Ri |
87 |
80 |
81 |
82 |
83 |
84 |
85 |
86 | ||||
|
ADC Ri |
8F |
88 |
89 |
8A |
8B |
8C |
8D |
8E | ||||
|
ANA Ri |
A7 |
A0 |
A1 |
A2 |
A3 |
A4 |
A5 |
A6 | ||||
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | ||||
|
CMP Ri |
BF |
B8 |
B9 |
BA |
BB |
BC |
BD |
BE | ||||
|
DCR Ri |
3D |
05 |
0D |
15 |
1D |
25 |
2D |
35 | ||||
|
INR Ri |
3C |
04 |
0C |
14 |
1C |
24 |
2C |
34 | ||||
|
MVI Ri,V |
3E |
06 |
0E |
16 |
1E |
26 |
2E |
36 | ||||
|
ORA Ri |
B7 |
B0 |
B1 |
B2 |
B3 |
B4 |
B5 |
B6 | ||||
|
SUB Ri |
97 |
90 |
91 |
92 |
93 |
94 |
95 |
96 | ||||
|
SBB Ri |
9F |
98 |
99 |
9A |
9B |
9C |
9D |
9E | ||||
|
XRA Ri |
AF |
A8 |
A9 |
AA |
AB |
AC |
AD |
AE | ||||
|
DAD B |
09 |
INX B |
03 |
POP B |
C1 |
|
DAD D |
19 |
INX D |
13 |
POPD |
D1 |
|
DAD H |
29 |
INX H |
23 |
POPH |
E1 |
|
DAD SP |
39 |
INX SP |
33 |
POP PSW |
F1 |
|
DCX B |
0B |
LXI B,VV |
01 |
PUSH B |
C5 |
|
DCX D |
1B |
LXI D,VV |
11 |
PUSH D |
D5 |
|
DCX H |
2B |
LXI H,VV |
21 |
PUSH H |
E5 |
|
DCX SP |
3B |
LXI SP,VV |
31 |
PUSH PSW |
F5 |
|
I |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
RST i*8 |
C7 |
CF |
D7 |
DF |
E7 |
EF |
F7 |
FF |
2.2. Арифметические команды
Эти команды предназначены для выполнения операции сложения, сложения с переносом, вычитания, вычитания с заёмом, инкрементирования, декрементирования, десятичной коррекции аккумулятора. В большинстве случаев эти команды изменяют содержимое разрядов регистра флажков F, который содержит информацию следующего вида:
-
S
Z
0
AC
0
P
1
СУ
b7
b6
b5
b4
b3
b2
b1
b0
, где разряд
S– индикатор знака;
Z– нуля;
AC– вспомогательного переноса;
P– четности;
CУ – переноса.
Состояние регистра Fиспользуется последующими командами для выполнения и организации управления вычислительным процессом. Рассмотрим команды этой группы:
ADDRiосуществляет сложение в прямых кодах содержимого аккумулятора и операнда, находящегося в РОН или ячейке памяти.
ADDB(код – 80(16)) выполняет операцию А=А+В без учета знака, результат сложения остается в А.
ADDM(код – 86(16)) складывает содержимое аккумулятора с операндом ячейки памяти по адресу, указанному в регистровой пареH,L.
ADIVвыполняет сложение в АЛУ аккумулятора с операндом в команде, результат сложения заносит в А. В данной команде в первом байте располагается КОП, во втором – операндV.
ADCRiскладывает содержимое А с РОН или ячейкой памяти и в младший разряд сумматора АЛУ прибавляет содержимое младшего разряда регистра F.
ADCM(код – 8Е(16)) складывает содержимое аккумулятора с ячейкой памяти с адресом, указанным в регистровой пареH,L, и к результату сложения прибавляет СУ. Результат операции передается в А.
ACIVосуществляет сложение аналогичноADIV, кроме того, к младшему разряду сумматора АЛУ прибавляет значение СУ регистраF(использование в многобайтной операции сложения с переносом).
DADRPвыполняет двухбайтное сложение регистровой парыRPс содержимым регистровой парыH,L. При наличии переноса Рст из сумматора – СУ=1, если его нет, то СУ=0. Результат заносится вH,L.
DADB(код – 09(16)) выполняет операциюHL=BC+HL; СУ=Рст, где Рст – перенос из старшего разряда сумматора.
SUBRiпозволяет
непосредственно вычесть из аккумулятора
содержимое РОН или ячейки памяти (A=A-Ri)
и результат вычитания занести в А
(сложить в дополнительном коде А=А+[(
)+1]
без учета знака вычитаемого). Эта команда
не выявляет переполнения и имеет другие
разновидности:
SUI V вычитание непосредственно из А операнда V.
S
BBRiвычитание с заемом:
А=А+[(Ri)+1]+[-СУ]Д.
SBBVвычитание непосредственно операнда с заемом А=А-V-СУ.
S
BBMосуществляет вычитаниеA=A-М-СУ
посредством сложения содержимого
аккумулятора с инвертированным значением
операнда, содержащимся в ячейке М, при
СУ=1 и А=А+M+1 при СУ=0.
Рассмотрим эту операцию подробнее:
Пусть необходимо вычесть с заёмом из А содержимое ячейки 8204(16).
Пусть А=F8(16), М=30(16), заема не было; СУ=0.
Тогда в АЛУ под действием команды произойдет сложение:
|
|
|
|
F |
8(16) |
|
|
|
|
|
3 |
0(16) | |||
|
|
|
+ |
1111 |
1000 |
|
A = [-8(10)] |
M |
= |
0011 |
0000 |
= |
48(10) | ||
|
|
|
1101 |
0000 |
|
[M] = [-48(10)] |
|
|
|
|
|
| |||
|
Pст |
= |
1 |
1100 |
1000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
8(16) |
A = [-56(10)] |
|
|
|
|
|
| |||
|
|
|
|
|
|
|
|
|
|
|
|
9 |
2 |
|
|
|
После сложения F = 92(16),т.е. |
1001 |
0010 |
|
| ||||||||||
И
з
состояния разрядов регистра флажков
видно, чтоS=1,
т.е. в результате сложения получено
отрицательное число (разряд 7 результата
= 1); Z=0
(результат не равен 0); АС=0 (при сложении
младшей тетрады нет переноса); Р=0 (в
результате сложения получилось число
с нечетным числом "1"); СУ=0 (не нужен
заём при вычитании из старшего байта;
при вычитании СУ= Рст, при выполнении
сложения типа ADD
СУ=Рст – перенос в старший байт при
сложении нескольких байт). Если перед
вычитанием СУ=1, то, выполняя команду
SBB M, получим А=С7, F=92(16).
Заметим, что до выполнения команды в H
занесен код 82(16),
в L
– 04(16),
а в ячейку 8204(16)записан операнд
30(16).
INR Ri, INR RP являются разновидностями команды ADD, осуществляют прибавление "1" к РОН, ячейке памяти или содержимому регистровой пары.
DCR Ri, DCX RP декрементируют содержимое Ri или RP.
DAA корректирует результат сложения, хранящийся в А в двоичном коде, в двоично-десятичный код <8421>:
при АС=1 или b3b2b1b0(2) > 9 прибавляет 6 к младшей тетраде байта,
при СУ=1 или b7b6b5b4(2) > 9 прибавляет 6 к старшей тетраде.
Команда DAA после ADD завершает десятичное сложение в коде D1<8421>.
2.3. Логические команды
Задачей этих команд является выполнение поразрядной конъюнкции, дизъюнкции , сложения по модулю 2, сравнения содержимого А и Ri или А и V, а также циклического сдвига операндов в А (таблица 5.1). Например, команда XRA M (код – AE(16)) осуществляет сложение по модулю 2 содержимого ячейки памяти М, расположенной по адресу, находящемуся в H,L, с аккумулятором, результат операции размещает в А.
-
1010
1011
=
А
1100
1100
=
М
0110
0111
А
Команды сдвига осуществляют сдвиг чисел на один разряд циклически через разряд СУ регистра F

или с занесением крайних цифр А в разряд СУ регистра

При выполнении команд сравнения операндов CMP Ri, CPI V разряды Z и СУ регистра F устанавливаются в значения аналогично операции вычитания.
STC – осуществляет присвоение СУ=1;
C
MC
– инвертирует значение переноса СУ=СУ;
С
МА
– инвертирует все разряды аккумулятора
А =А.
2.4. Команды передачи управления
Четвертая группа команд содержит команды перехода, вызова, возврата и повторного запуска. Эта группа предназначена для изменения естественного порядка следования команд.
JMP aa безусловный переход к команде, находящейся в ячейке (байт3, байт2 = аа). Второй и третий байты команды загружаются в W,Z и затем в РС, а через регистр адреса команда извлекает очередную необходимую команду программы.
JNZ аа извлекает команду аналогично JMP только при Z=0, в противном случае извлекается следующая по порядку команда, PC=PC+1.
JZ aa извлекает команду по адресу aa при Z=1, а при Z=0 по адресу РС=(РС*+1), т.е. по состоянию счетчика команд на 3 больше адреса предыдущего РС*.
Таким же образом выполняются команды условного перехода JNC, JC, JPO, JPE, JP, JM в зависимости от состояний разрядов СУ, P, S регистра F.
PCHL передает содержимое регистровой пары H,L в счетчик команд РС, тем самым следующая команда извлекается по адресу H,L.
CALL aa выполняет безусловный переход на аа(16)= (байт3, байт2) команды. При этом прерванный адрес в счетчике команд РС=(РСН,РСL) следующий за CALL команды запоминается занесением в стековую память: в ячейку памяти М(SP-1) заносятся старшие разряды РСН, в ячейку М(SP-2)=PCL младший байт РС, значение указателя стека SP уменьшается за два цикла на 2. Данная команда осуществляет безусловный переход на аа, однако часто требуется переход к подпрограмме в зависимости от состояния регистра F. Для этой цели используются следующие разновидности команды CALL аа:
CNZ аа(С4), CZ аа(СС), CNC аа(D4), CC aa(DC), CPO aa(E4), CPE aa(EC), CP aa(F4), CM aa(FC), где в скобках указан ПБ. В этих командах проверяются условия аналогично командам условного перехода и при истинности условий реализуют функции CALL aa, т.е. осуществляют переход к подпрограмме по адресу аа с занесением содержимого РС в стековую память. Если условие не выполняется, реализуется следующая команда основной программы по адресу РС.
RET безусловный возврат к команде основной программы: её адрес загружается в РС из вершины SГ стековой памяти и к указателю стека прибавляется 2. Возможен также возврат по условию с использованием команд: RNZ(C0), RZ(C8), RNC(D0), RC(D8), RPO(E0), RPE(E8), RP(F0), RM(F8).
RSTi*8 повторный пуск (рестарт) осуществляет прерывание выполнения основной программы, адрес команды основной программы передается в стековую память аналогично командам CALL aa. Счетчик команд загружается фиксированным адресом ячейки ППЗУ. Так, команда RST7*8 загружает РС адресом 7*8=56(10)=0038(16). Команды RST позволяют использовать подпрограммы «Монитора» для организации процесса вычислений.
2.5. Команды ввода/вывода из периферийных устройств и организации прерываний
Последняя группа команд выполняет операции помещения в стек и извлечения из него, ввода и вывода данных, обмена данными, подтверждения и неподтверждения прерываний, управления отсутствием операций и останова, установления маски прерываний.
IN aр вводит данные в А из порта периферийного устройства, адрес которого определяется вторым байтом команды.
OUT ap выводит данные из А в порт, адрес которого определяется вторым байтом команды.
PUSH RP помещает содержимое регистровой пары RP в стек. В ячейку М(SP-1) помещает значение старшего регистра, в М(SP-2) – значение младшего регистра пары, указатель стека дважды декрементируется SP=SP-2. Разновидностью этой команды является команда занесения в стек слова состояния процессора PUSH PSW, которая помещает в М(SP-1) содержимое А, а в ячейку М(SP-2) содержимое F, причем разрядам ячейки М(SP-2) присваиваются b0СУ, b2P, b4АС, b6Z, b7S.
POP RP извлекает из стека в регистровую пару RP содержимое двух ячеек памяти, в младший регистр загружаются данные из М(SP), в старший – из М(SP+1). К указателю стека прибавляется 2. Разновидностью этой команды является POP PSW, которая из ячейки М(SP) загружает регистр F по следующему правилу: флагу СУb0, Pb2, ACb4, Zb6, Sb7, AM(SP+1).
XTHL осуществляет обмен содержимого H,L с двумя ячейками вершины стека: LM(SP), HM(SP+1).
SPHL передает в указатель стека содержимое регистровой пары H,L.
EI разрешает прерывания только после выполнения следующей команды. При выполнении EI прерывания не признаются.
DI: после выполнения этой команды микропроцессор игнорирует запросы на прерывания до появления команды ЕI.
HLT останов вычислений.
2.6. Подпрограмма и стек
Использование стековой памяти оказалось весьма эффективным при построении компилирующих и интерпретирующих программ:
- программ, использующих многократные вычисления алгебраических функций и нестандартные арифметические операции;
- программ с обработкой операндов с последовательным размещением;
- организации прерываний и мультипрограммных режимов.
Принцип работы стековой памяти поясняется схемой рис. 5.4. Работа стековой памяти осуществляется по правилу: "последним записан – первым считан". Так, вначале записывается в стек (рис. 5.4, а) число Х1. Затем число Х1 сдвигается вверх при записи числа Х2 в стек. Тем самым любое записываемое число Хi сдвигает массив "вверх" и размещается в нижней ячейке. При чтении считывается содержимое самой "нижней "ячейки, а весь оставшийся массив чисел сдвигается "вниз". Размещая и считывая двоичные коды в указанном порядке, легко организовать поиск последнего записанного кода или организовать последовательную обработку кодов Хn, ..., Х1. Однако микрооперация сдвига массива требует значительных аппаратных затрат. С целью упрощения стековой памяти используют специальный реверсивный счетчик-указатель стека SP. При использовании SP не требуется микрооперация сдвига массива, достаточно перемещения возбуждения "вверх" или "вниз" выходных шин с дешифратора адреса. Так, при записи счетчик декрементируется SP-1 и число через шину данных записывается "вверх" (в сторону младших номеров шин DCA), при чтении число сначала считывается, затем устанавливается адрес следующего операнда (SP+1) для возможного считывания.
При записи (считывании) двухбайтных операндов в восьмиразрядную память SP последовательно инкрементируется (декрементируется) дважды SP+2 (SP-2). При этом запись (считывание) осуществляется побайтно в две соседние ячейки: в М(SP), М(SP+1) – при считывании, в М(SP-1), М(SP-2) – при записи. Содержимое ячеек М(SP) и М(SP+1) определяет информацию в вершине стека (SГ), которая загружается в РС или РОН при чтении стековой памяти.
а)
б)
Рис. 5.4. Организация стековой памяти: а – запись в стек числа X1, б – принципиальная схема
2.7. Использование стековой памяти
Часто в основной программе одни и те же операции (умножение, деление, сортировка массива и др.) выполняются многократно с различными данными. Целесообразно также нестандартные операции оформлять в виде программ, которые в основной программе используются в виде подпрограмм, в свою очередь, подпрограмма также может использовать при работе другие программы выполнения некоторых операций и т.д. В результате закон (порядок) работы ЭВМ может включать несколько вложенных друг в друга программ.
Для организации вычислительного процесса с применением подпрограмм используется стековая область ОЗУ. Эта область резервируется программистом для осуществления прерываний при вызове подпрограмм. При этом "низ" стека фиксируется установкой его адреса в SP командой SPHL (в УОУ Монитор устанавливает автоматически SP=83Е0) и, начиная с этого адреса, "вверх" (SP-1) размещаются промежуточные данные и коды адресов команд основных программ, которые должны выполняться вслед за выполнением подпрограмм. Для обращения к подпрограмме используется команда CALL аа и ее модификации. Эти команды загружают в РС адрес аа начальной команды подпрограммы, а текущий адрес команды основной программы запоминается стековой памятью. Для возвращения вычислений из подпрограммы к следующей за CALL команде в подпрограмме используется команда RET и ее модификации, которые возвращают из стековой памяти в РС код адреса следующей за CALL команды.
Следует отметить, что подпрограмма выполняет вычисления в процессоре с использованием набора тех же РОН, что и программа. Поэтому, если данные основной программы, полученные в РОН перед выполнением подпрограммы, необходимы для вычислений после выполнения подпрограммы, их следует запомнить и восстановить, для чего перед обращением к подпрограмме данные заносятся в стековую память командами PUSHRP, а после её выполнения восстанавливаются командамиPOPRP. На рис. 5.5. приведен пример фрагмента алгоритма для программы сложения чисел X и Y, размещенных в ячейках M(Nя), M(Nя+1) в прямых кодах. Число Х переводится в дополнительный код подпрограммой с использованием регистра RG... (свободный РОН). Число Y остается в аккумуляторе после вторичного вызова подпрограммы, размещенной по адресу 8400.

Рис. 5.5. Фрагмент алгоритма для программы сложения чисел
Затем числа складываются дополнительном коде, с занесением результата в ячейку M(Nя+2). Текст подпрограммы имеет вид:
|
ЯЧЕЙКА (16) |
МНЕМОНИКА |
КОД КОМАНДЫ (16) |
|
8400 |
RAL |
17 |
|
8401 |
JNC 840A |
D2 |
|
8402 |
|
0A |
|
8403 |
|
84 |
|
8404 |
CMA |
2F |
|
8405 |
RAR |
1F |
|
8406 |
INR A |
3C |
|
8407 |
JMP 840B |
C3 |
|
8408 |
|
0B |
|
8409 |
|
84 |
|
840A |
RAR |
1F |
|
840B |
RET |
C9 |
