Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
56
Добавлен:
02.05.2014
Размер:
981.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(AB).

Команды 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

аблица 5.1.

Система команд К580

Мнемоника

ПБ

Байт

Описание команды

RGF

Z

S

P

СУ

АС

1

2

3

4

5

6

7

8

9

1. Команды передачи данных

MOV Ri,Rj

T

1

RiRj

-

-

-

-

-

MVI Ri,V

T

2

RiV

-

-

-

-

-

LXI P,VV

T

3

RPVV

-

-

-

-

-

LDA aa

3A

3

AM(aa)

-

-

-

-

-

STA aa

32

3

M(aa) A

-

-

-

-

-

LHLD aa

2A

3

LM(aa), HM(aa+1)

-

-

-

-

-

SHLD aa

22

3

M(aa) L, M(aa+1) H

-

-

-

-

-

LDAX B

0A

1

AM(B,C)

-

-

-

-

-

LDAX D

1A

1

AM(D,E)

-

-

-

-

-

STAX B

02

1

M(B,C) A

-

-

-

-

-

STAX D

12

1

M(D,E) A

-

-

-

-

-

XCHG

EB

1

HD,LE

-

-

-

-

-

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

RiRi+1

+

+

+

-

+

INX RP

T

1

RPRP+1

-

-

-

-

-

DCR Ri

T

1

RiRi-1

+

+

+

-

+

DCXRP

T

1

RPRP-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 Ri)

+

+

+

0

0

XRI V

EE

2

A(A V)

+

+

+

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

AA(Z=1, если A=Ri;

СУ=1, если A<Ri)

+

+

+

+

+

CPI V

FE

2

AA(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

PCaaбезусловный переход

-

-

-

-

-

JNZ aa

C2

3

PCaa при Z=0, иначе PCPC+1

-

-

-

-

-

JZ aa

CA

3

Pcaa при Z=1, иначе PCPC+1

-

-

-

-

-

JNC aa

D2

3

PCaaпри СУ=0, иначеPCPC+1

-

-

-

-

-

JC aa

DA

3

PCaaпри СУ=1, иначеPCPC+1

-

-

-

-

-

JPO aa

E2

3

PCaa при P=0, иначе PCPC+1

-

-

-

-

-

JPE aa

EA

3

PCaa при P=1, иначе PCPC+1

-

-

-

-

-

JP aa

F2

3

PCaa при S=0, иначе PCPC+1

-

-

-

-

-

JM aa

FA

3

PCaa при S=1, иначе PCPC+1

-

-

-

-

-

PCHL

E9

1

PC(HL)

-

-

-

-

-

CALL aa

CD

3

PCaa, M(SP-1) PCH,

M(SP-2) PCL, SPSP-2

-

-

-

-

-

RET

C9

1

PCHM(SP+1), PCLM(SP), SPSP+2

-

-

-

-

-

RST i*8

T

1

PC(8*i)(10),

M(SP-1) PCH,

M(SP-2) PCL, SPSP-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, SPSP-2

-

-

-

-

-

POP RP

T

1

RP[M(SP+1), M(SP)],

SPSP+2

-

-

-

-

-

XTHL

E3

1

HM(SP+1), LM(SP)

-

-

-

-

-

SPHL

F9

1

SP(H,L)

-

-

-

-

-

О

Окончание табл. 5.1

кончание табл. 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.

SBBRiвычитание с заемом: А=А+[(Ri)+1]+[-СУ]Д.

SBBVвычитание непосредственно операнда с заемом А=А-V-СУ.

SBBMосуществляет вычитание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;

CMC – инвертирует значение переноса СУ=СУ;

СМА – инвертирует все разряды аккумулятора А =А.

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СУ, b2P, b4АС, b6Z, b7S.

POP RP извлекает из стека в регистровую пару RP содержимое двух ячеек памяти, в младший регистр загружаются данные из М(SP), в старший – из М(SP+1). К указателю стека прибавляется 2. Разновидностью этой команды является POP PSW, которая из ячейки М(SP) загружает регистр F по следующему правилу: флагу СУb0, Pb2, ACb4, Zb6, Sb7, AM(SP+1).

XTHL осуществляет обмен содержимого H,L с двумя ячейками вершины стека: LM(SP), HM(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

Соседние файлы в папке Дубинин Н.М. Организация ЭВМ и Систем