2.3.1. Тізбелі бағдарламалар Жадының 2250…2254 ұяшықтарында орналастырылған бес санның қосындысын анықтап, қосу нәтижесін жадының келесі бос ұяшығына жазу бағдарламасын құрайық:
; 1-бағдарлама
1
2100
3A
LDA
2250H
; A ← [2250]
2
2101
50
3
2102
22
4
2103
47
MOV
B, A
; B ← (A)
5
2104
3A
LDA
2251H
; A ← [2251]
6
2105
51
7
2106
22
8
2107
4F
MOV
C, A
; C ← (A)
9
2108
3A
LDA
2252H
; A ← [2252]
10
2109
52
11
210A
22
12
210B
57
MOV
D, A
; D ← (A)
13
210C
3A
LDA
2253H
; A ← [2253]
14
210D
53
15
210E
22
16
210F
5F
MOV
E, A
; E ← (A)
17
2110
3A
LDA
2254H
; A ← [2254]
18
2111
54
19
2112
22
20
2113
80
ADD
B
; A ← (A) + (B)
21
2114
81
ADD
C
; A ← (A) + (C)
22
2115
82
ADD
D
; A ← (A) + (D)
23
2116
83
ADD
E
; A ← (A) + (E)
24
2117
32
STA
2255H
; [2255] ← (A)
25
2118
55
26
2119
22
27
211A
FF
RST 7
;Басқару бағдарламасына қайту
Бұл бағдарламада қосылатын бес сан тура сілтемелі LDA командасымен аккумулятор арқылы жадыдан әкелініп (1-, 5-, 9-, 13-, 17-жолдар), оның алғашқы төртеуі регистрлі сілтемелі MOV командасымен микропроцессордың ішкі регистрлеріне (B, C, D, E) көшірілді (4-, 8-, 12-, 16-жолдар). Аккумулятордағы бесінші санға регистрлі сілтемелі ADD командасымен алдыңғы төрт сан қосылып (20-, 22-, 23-, 24-жолдар), алынған нәтиже жадының қажетті ұяшығына шығарылды (24-жол).
Микропроцессордың жұмыс жиілігін 1 МГц деп алып, командалардың 2.5-кестеде берілген орындалу ұзақтығы (такт саны) арқылы бүкіл бағдарламаның орындалу ұзақтығын есептеуге болады:
T = 13*6 + 4*8 + 11 = 121 такт.
Сонымен, бес санды қосуға арналған 27 жолды бағдарламаның орындалу ұзақтығы 121 мкс болды, ал бұл іс жүзінде аз уақыт емес.
Бағдарламаның көлемі мен орындалу ұзақтығын кеміту үшін, оның кемшіліктеріне көңіл бөлейік. Бірінші көзге түсетіні, бағдарлама құрамында үшбайтты 13 тактіде орындалатын 6 команда (LDA, STA) бар, тап солар бағдарламаның орындалу ұзақтығына негізгі себеп болып тұр. Сондықтан, олардың алмастырылу жолдарын анықтау керек. Ол үшін жадыға байланысқа (одан операндтарды әкелуге немесе оған жіберуге) жанама сілтемелі командалар пайдаланған ыңғайлы болады. Осы жолмен өзгертілген бес санды қосу бағдарламасын мына түрде құруға болады:
; 2-бағдарлама
1
2120
21
LXI
2250H
; HL ← 2250
2
2121
50
3
2122
22
4
2123
3E
MVI
A, 00H
; A ← 00
5
2124
00
6
2125
86
ADD
M
; A ← (A) + [(HL)]
7
2126
23
INX
H
; HL ← (HL) + 1
8
2127
86
ADD
M
; A ← (A) + [(HL)]
9
2128
23
INX
H
; HL ← (HL) + 1
10
2129
86
ADD
M
; A ← (A) + [(HL)]
11
212A
23
INX
H
; HL ← (HL) + 1
12
212B
86
ADD
M
; A ← (A) + [(HL)]
13
212C
23
INX
H
; HL ← (HL) + 1
14
212D
86
ADD
M
; A ← (A) + [(HL)]
15
212E
23
INX
H
; HL ← (HL) + 1
16
212F
77
MOV
M, A
; [(HL)] ← (A)
17
2130
FF
RST 7
;Басқару бағдарламасына қайту
Бұл бағдарламада алдымен тіке сілтемелі LXI командасымен жанама сілтеу регистрлеріне (яғни, HL жұбына) бірінші операндтың адресі жазылды (1-жол), сосын тіке сілтемелі MVI командасымен аккумулятор тазартылды (4-жол). Бұдан кейін аккумуляторға бес сан жадыдағы ретімен қосылды (6-, 8-, 10-, 12-, 14-жолдар). Әрбір келесі санның қосылар алдында HL жұбындағы адрес коды INX командасымен бірге ұлғайтылып, онда жадының келесі ұяшығының адресі анықталды (7-, 9-, 11-, 13-жолдар). Ақырында MOV командасымен акккумуляторда қалыптасқан нәтиже жадының қажетті ұяшығына жіберілді (17-жол).
Бұл бағдарламаның орындалу ұзақтығы:
T = 10 + 7 + 7*5 + 6*5 + 11 = 93 такт.
Сонымен, бес санды қосуға арналған бағдарлама 17 жолға дейін қысқартылып, оның орындалу ұзақтығы 93 мкс болды.
2.3.2. Тарамдалымды бағдарламалар Алдыңғы бағдарламалар арқылы жүргізілген қосу операцияларының нәтижесінің разряд саны сегізден демек, оның ондық мәні 255-тен аспайды деп саналды. Асып кетер жағдайын ескеру үшін бағдарламаны өзгерту қажет болады. Бұнымен қатар, бағдарламаның әмбебаптылығын қамтамасыз ету үшін есептің берілімін өзгертелік: қосылатын операндтардың саны жадының 2250 ұяшығында, ал одан кейінгі ұяшықтарда олардың мәндері орналастырылған; нәтиже деректерден кейінгі ұяшықтарға шығарылуы керек. Бұл есептің шешілім бағдарламасын келесі түрде құруға болады:
; 3-бағдарлама
1
2140
21
LXI
2250H
; HL ← 2250
2
2141
50
3
2142
22
4
2143
4E
MOV
C, M
; C ← [(HL)]
5
2144
97
SUB
A
; A ← 00
6
2145
47
MOV
B, A
; B ← 00
7
2146
23
K1:
INX
H
; HL ← (HL) + 1
8
2147
86
ADD
M
; A ← (A) + [(HL)]
9
2148
D2
JNC
K2
; TC 1: PC ← 214C
10
2149
4C
11
214A
80
12
214B
04
INR
B
; B ← (B) + 1
13
214C
23
K2:
INX
H
; HL ← (HL) + 1
14
214D
0D
DCR
C
; C ← (C) – 1
15
214E
C2
JNZ
K1
; TZ 1: PC ← 2146
16
214F
46
17
2150
21
18
2151
C9
RET
; PC ← [(SP)]
Бағдарламаны үш бөліктен (кезеңнен) тұрады деп қарастыруға болады, олар: дайындық кезеңі, қызмет кезеңі және нәтижені шығару кезеңі. Бағдарламаның дайындық кезеңінде LXI командасы арқылы жанама сілтеу регистрлеріне (яғни, HL жұбына) жадының жұмысқа қажетті бірінші ұяшығының адресі жазылды (1-жол), сосын ондағы операндтар саны микропроцессордың С регистріне әкелінді (4-жол), бұдан кейін аккумулятор бірбайтты SUB (алу) командасы арқылы (5-жол), B регистрі оған аккумуляторды көшіру арқылы тазартылды (6-жол).
Бағдарламаның негізгі өңдеу жұмысын атқару бөлігі (қызмет кезеңі) 7...16 жолдар арасында орналасқан. Бұнда алдымен жанама сілтеу регистріндегі (яғни, HL жұбындағы) адрес ұлғайтылып (7-жол), сосын осы адрес арқылы алынған операнд аккумуляторға қосылады (8-жол). Бұдан кейін нәтиженің сегіз разрядтан асып кетуі (яғни, тасымал шығуы) JNC командасымен тексеріледі де (9-жол), тасымал тууы кезінде B регистрі бірге ұлғайтылады (12-жол), ал оның тумаған кезінде бұл команда орындалмайды. 14-жолдағы DCR командасы арқылы операндтардың санауышы (C регистрі) бірге кемітіліп, операндтардың біткен-бітпегендігі тексеріліп (15-жол), олар бітпеген жағдайында бағдарламаның негізгі жұмысы (біздің жағдайда – қосу операциялары) әрі қарай жалғастырылады (бағдарламаның бұндай құрылымы айналымды құрылым деп аталады), ал олардың біткен жағдайында бағдарлама нәтижені шығару кезеңіне ауыстырылады.
Бұл бағдарламада нәтиже екібайтты сан түрінде екі регистрде қалыптасады: оның кіші байты аккумуляторда, ал үлкен байты В регистрінде болады. Бұл бағдарламаның болашақта қосалқы бағдарлама ретінде пайдаланылу мүмкіндігін қамтамасыз ету үшін ол RET командасымен аяқталды (18-жол).
2.3.3. Екібайтты сандарды қосу бағдарламасы Алдыңғы бағдарламалар бірбайтты (яғни, сегізразрядты екілік кодымен суреттелген, ондық мәні 255-тен аспайтын) сандарды қосуға ғана жарайды. Енді екібайтты (яғни, оналтыразрядты екілік кодымен суреттелген) сандарды қосу мүмкіндігін қарастырайық. Жадының 22A0-ұяшығынан бастап жұптап орналастырылған (бірінші байты кіші адрес бойынша, екінші байты келесі адреске) 25 санды қосу бағдарламасын келесі түрде құруға болады:
; 4-бағдарлама
1
2160
21
LXI
2300H
; HL ← 22A0
2
2161
A0
3
2162
22
4
2163
0E
MVI
C, 19H
; C ← 1916 = 2510
5
2164
97
SUB
A
; A ← 00
6
2165
5F
MOV
E, A
; B ← 00
7
2166
57
MOV
D, A
; B ← 00
8
2167
86
K3:
ADD
M
; A ← [(HL)]
9
2168
5F
MOV
E, A
; E ← (A)
10
2169
7A
MOV
A, D
; A ← (D)
11
216A
23
INX
H
; HL ← (HL) + 1
12
216B
8E
ADC
M
; A ← (A) + [(HL)] + (TC)
13
216C
57
MOV
D, A
; D ← (E)
14
216D
0D
DCR
C
; C ← (C) – 1
15
216E
CA
JZ
K4
; TZ = 1: PC ← 2175
16
216F
76
17
2170
80
18
2171
7B
MOV
A, E
; A ← (E)
19
2171
23
INX
H
; HL ← (HL) + 1
20
2172
C3
JMP
K3
; PC ← 2167
21
2173
67
22
2174
21
23
2175
23
K4:
INX
H
; HL ← (HL) + 1
24
2176
73
MOV
M, E
; [(HL)] ← (E)
25
2177
23
INX
H
; HL ← (HL) + 1
26
2178
72
MOV
M, D
; [(HL)] ← (D)
27
2179
FF
RST 7
;Басқару бағдарламасына қайту
Бағдарламаның дайындық кезеңінде сілтеу регистрлеріне (яғни, HL жұбына) жадының жұмысқа қажетті бірінші ұяшығының адресі жазылды (1-жол), сосын қосылатын операндтар саны микропроцессордың С регистріне енгізілді (4-жол), бұдан кейін бірбайтты командалар арқылы аккумулятор мен D және E регистрлері тазартылды (5-, 6-, 7-жолдар). Микропроцессордың D және E регистрлері жүргізілген қосу операцияларының нәтижелерін жинақтауға пайдаланылады: оның кіші байты E регистрінде, үлкен байты D регистрінде жиналады.
Бағдарламаның негізгі өңдеу жұмысын атқару бөлігі (қызмет кезеңі) 8...13 жолдар арасында орналасқан. Бұнда жанама сілтеу регистріндегі (яғни, HL жұбындағы) адрес арқылы алынған операнд аккумуляторға қосылады да (8-жол), алынған нәтиже E регистріне жіберіледі (9-жол). Бұдан кейін аккумуляторға нәтиже жинақталымының D регистріндегі үлкен байты әкелініп (10-жол), ұлғайтылған адрес (11-жол) арқылы операндтың екінші байты оған ADC командасымен қосылады (12-жол). Бұл командаға сәйкесті қосу операциясының орындалуы кезінде қосылатын сандармен қатар алдыңғы операциядан шыққан тасымал да (TC) ескеріледі. Бұл нәтиже D регистріне жіберіледі (13-жол). Сосын (тексерім кезеңінде) операнд санауышы (C регистрі) бірге кемітіліп (14-жол), операндтардың біткен-бітпегендігі тексеріледі де (15-жол), олардың біткен жағдайында бағдарлама нәтижені шығару кезеңіне ауыстырылады, ал олардың бітпеген жағдайында қажетті дайындалым арқылы (яғни аккумуляторға нәтиже жинақталымының кіші байты әкелініп) (18-жол), адрес ұлғайтылғаннан (19-жол) кейін бағдарламаның негізгі жұмысы (яғни, қосу операциялары) әрі қарай жалғастырылады (20-жол).
Бұл бағдарламада алынған және D мен C регистрлерінде жинақталған екібайтты нәтиже жадының бастапқы деректерден кейінгі ұяшықтарына байт-байтымен шығарылады (23…26 жолдар).
2.3.4. Тіке сілтемелі командалармен жұмыс істеу Жоғарыда қарастырылған бағдарламаларда арифметикалық қосу командаларының екі түрі пайдаланылды, олар тура және жанама сілтемелі ADD (тасымалсыз қосу) ADC (тасымалды қосу) командалары. Тіке сілтемелі қосу командаларының (ADI және ACI) пайдаланылуын суреттеу мақсатында 22222 (56CE16), 33333 (823516) және 44444 (AD9C16) сандарын қосу бағдарламасын қарастырайық:
; 5-бағдарлама
1
2180
3E
MVI
A, CEH
; A ← CE
2
2181
CE
3
2182
C6
ADI
35H
; A ← (A) + 35
4
2183
35
5
2184
5F
MOV
E, A
; E ← (A)
6
2185
3E
MVI
A, 56H
; A ← CE
7
2186
56
8
2187
CE
ACI
82H
; A ← (A) + 82 + (TC)
9
2188
82
10
2189
57
MOV
D, A
; D ← (A)
11
218A
7B
MOV
A, E
; A ← (E)
12
218B
C6
ADI
9CH
; A ← (A) + 9C
13
218C
9C
14
218D
5F
MOV
E, A
; E ← (A)
15
218E
7A
MOV
A, D
; A ← (D)
16
218F
CE
ACI
ADH
; A ← (A) + AD + (TC)
17
2190
AD
18
2191
FF
RST 7
;Басқару бағдарламасына қайту
Бағдарламаның басында аккумуляторға бірінші санның кіші байты енгізіліп (1-жол), сосын оған екінші санның кіші байты тасымалсыз қосушы ADI командасымен қосылады да (3-жол), нәтиже E регистріне жіберіледі (5-жол). Бұдан кейін аккумуляторға бірінші санның үлкен байты енгізіліп (6-жол), сосын оған екінші санның үлкен байты тасымалды қосушы ACI командасымен қосылады да (8-жол), нәтиже D регистріне жіберіледі (10-жол).
Келесі кезеңде E және D регистрлеріндегі алдыңғы нәтижелер аккумуляторға кезекпен әкелініп, оларға алдыңғы командалар арқылы үшінші санның сәйкесті байттары қосылады.
2.3.5. Алу командаларымен жұмыс істеу Микропроцессордың командалар жүйесінде алдыңғы бағдарламаларда пайдаланылған қосу командалары (ADD, ADC, ADI, ACI) сияқты алу командалары бар, олар – SUB, SBB, SUI, SBI командалары. Олардың пайдаланылымын суреттеу мақсатында 5-бағдарламаны жалғастырып, онда алынған (D және E регистрлерінде сақталған) саннан жадының 22C0-22C1 ұяшықтарында орналастырылған екібайтты санды және 11111 (2B6716) санын алу бағдарламасын қарастырайық:
; 6-бағдарлама
1
21A0
3A
LDA
22C0H
; A ← [22C0]
2
21A1
C0
3
21A2
22
4
21A3
4F
MOV
C, A
; C ← (A)
5
21A4
3A
LDA
22C1H
; A ← [22C1]
6
21A5
C1
7
21A6
22
8
21A7
4F
MOV
B, A
; C ← (A)
9
21A8
7B
MOV
A, E
; A ← (E)
10
21A9
91
SUB
C
; A ← (A) – (C)
11
21AA
5F
MOV
E, A
; E ← (A)
12
21AB
7A
MOV
A, D
; A ← (D)
13
21AC
98
SBB
B
; A ← (A) – (B) – (TC)
14
21AD
57
MOV
D, A
; D ← (A)
15
21AE
7B
MOV
A, E
; A ← (E)
16
21AF
D6
SUI
67H
; A ← (A) – 67
17
21B0
67
18
21B1
32
STA
22C2H
; [(22C2)] ← (A)
19
21B2
C2
20
21B3
22
21
21B4
7A
MOV
A, D
; E ← (A)
22
21B5
DE
SBI
2BH
; A ← (A) – 2B – (TC)
23
21B6
2B
24
21B7
32
STA
22C3H
; [(22C3)] ← (A)
25
21B8
C3
26
21B9
22
27
21BA
FF
RST 7
;Басқару бағдарламасына қайту
Бағдарламаның басында жадыдағы екібайтты санның жеке байттары аккумулятор арқылы C және B регистрлеріне жіберілді (1…8 жолдар). Регистрлі сілтемелі SUB және SBB командаларының біріншісі тасымалсыз, екіншісі тасымалды алу операцияларын орындайды (10-, 13-жолдар). Тіке сілтемелі SUI және SBI командаларының біріншісі тасымалсыз, екіншісі тасымалды алу операцияларын орындайды (16-, 22-жолдар).
Жүргізілген операциялар нәтижесі жадының келесі ұяшықтарына жіберіледі (18-, 24-жолдар).
2.3.6. Регистр жұптарымен жұмыс істеу Жоғарыда екібайтты сандарды қосу тасымалсыз және тасымалды қосу командаларын (ADD және ADC) тізбелеп пайдалану арқылы жүзеге асырылғанды (4-бағдарлама). Intel 8085 микропроцессорының командалар жүйесінде екібайтты сандарды тікелей қосушы командалар да бар, олар – DAD мнемоникасымен суреттелетін командалар. Жадының 22D0-ұяшығынан бастап жұптап орналастырылған (бірінші байты кіші адрес бойынша, екінші байты келесі адреске) үш санды DAD командалары арқылы қосылып, алынған қосындыны екіге көбейту бағдарламасын келесі түрде құруға болады:
; 7-бағдарлама
1
21С0
3A
LDA
22D0H
; A ← [22D0]
2
21С1
D0
3
21С2
22
4
21С3
6F
MOV
L, A
; L ← (A)
5
21С4
3A
LDA
22D1H
; A ← [22D1]
6
21С5
D1
7
21С6
22
8
21С7
67
MOV
H, A
; H ← (A)
9
21С8
3A
LDA
22D2H
; A ← [22D2]
10
21С9
D2
11
21СA
22
12
21СB
4F
MOV
C, A
; C ← (A)
13
21СC
3A
LDA
22D3H
; A ← [22D3]
14
21СD
D3
15
21СE
22
16
21СF
47
MOV
B, A
; B ← (A)
17
21D0
3A
LDA
22D4H
; A ← [22D4]
18
21D1
D4
19
21D2
22
20
21D3
5F
MOV
E, A
; E ← (A)
21
21D4
3A
LDA
22D5H
; A ← [22D5]
22
21D5
D5
23
21D6
22
24
21D7
57
MOV
D, A
; D ← (A)
25
21D8
09
DAD
B
; HL ← (HL) + (BC)
26
21D9
19
DAD
D
; HL ← (HL) + (DE)
27
21DA
29
DAD
H
; HL ← (HL) + (HL)
27
21DB
7D
MOV
A, L
; A ← (L)
28
21DC
32
STA
22D6H
; [(22D6)] ← (A)
29
21DD
D6
30
21DE
22
31
21DF
7C
MOV
A, H
; A ← (HL)
32
21E0
32
STA
22D7H
; [(22D7)] ← (A)
33
21E1
D7
34
21E2
22
35
21E3
FF
RST 7
;Басқару бағдарламасына қайту
Бағдарламаның дайындық кезеңінде (1 – 24-жолдар) жадыдағы екібайтты үш сан аккумулятор арқылы HL, BC және DE регистрлік жұптарына көшіріледі.
Бағдарламаның жұмыс кезеңі, яғни негізгі операциялардың орындалуы үш командамен ғана орындалады. Бұнда HL жұбы оналтыразрядты аккумумулятор ретінде пайдаланылып, DAD командасы арқылы оған алдымен BC жұбындағы (25-жол), сосын DE жұбындағы (26-жол) сан қосылады. Жұмыс кезеңінің соңғы командасы HL жұбын өзіне-өзін қосу арқылы екіге көбейту операциясы орындалады (27-жол).
Бағдарламаның ақырғы шығарым кезеңінде HL жұбындағы нәтиже аккумулятор арқылы жадыға шығарылады (28, 32-жолдар).
Бұл бағдарламаның ұзаққа созылған дайындық кезеңі мен шығарым кезеңін қысқарту үшін стекті пайдалану аса ыңғайлы келеді. Алдыңғы бағдарламаның осы жолмен өзгертілген түрін келесі түрде құруға болады:
; 8-бағдарлама
1
21F0
3A
LXI
SP, 22D0H
; SP ← 22D0
2
21F1
D0
3
21F2
22
4
21F3
E1
POP
H
; HL ← [(SP)],[(SP) + 1],
; SP ← (SP) + 2
5
21F4
C1
POP
B
; HL ← [(SP)],[(SP) + 1],
; SP ← (SP) + 2
6
21F5
D1
POP
D
; HL ← [(SP)],[(SP) + 1],
; SP ← (SP) + 2
7
21F6
09
DAD
B
; HL ← (HL) + (BC)
8
21F7
19
DAD
D
; HL ← (HL) + (DE)
9
21F8
29
DAD
H
; HL ← (HL) + (HL)
10
21FA
00
NOP
; Бос операция
11
21FB
25
PUSH
H
; SP ← (SP) – 2;
[(SP)];[(SP) + 1]← (HL)
12
21FC
FF
RST 7
;Басқару бағдарламасына қайту
13
21FD
C9
RET
; PC ← [(SP)]
Бұл бағдарламада LXI SP командасы арқылы стектің төбесі белгіленді де (1-жол), одан кейін POP командаларымен сәйкесті регистр жұптарына (HL, BC, DE) жадыда орналасқан екібайтты сандар енгізіліп (4…6-жолдар), алдыңғы бағдарламадағыдай қосу операциялары орындалды (7…9-жолдар). Орындалған қосу операцияларының HL регистрлік жұбындағы нәтижесі жадыға PUSH командасымен шығарылады (11-жол). Нәтиженің HL регистрлік жұбында қалдырылуы қажет жағдайында NOP командасының орнына RST 7 немесе RET командасы қойылу керек (12, 13-жолдағы).
2.3.7. Көбейту бағдарламасы Екі санды көбейту бағдарламасын құру үшін алдымен оның алгоритмін анықталық. Цифрлық жүйеде қолданылатын екілік санау жүйесі позициялық санау жүйесі болғандықтан, бұл жүйеде көбейту операциясының жүргізілу барысы өзімізге үйреншікті тәртіппен орындалады. Төменде ондық жүйедегі екі санның көбейтілу барысының үш түрлі жазылымы келтірілген:
Бірінші жазылымда көбейткіштің разряд мәндерін өзімізге үйреншіктікті оңнан солға қарай алып көбейту тәртібі келтірілген. Екінші жазылымда көбейткіштің разряд мәндерін солдан оңға қарай алып көбейту тәртібі келтірілген. Цифрлық құрылғыларда қосу операциясы екі санға ғана жүргізілетініне байланысты ондық сандардың жеке көбейтінділерінің солай қосылғаны үшінші жазылымда келтірілді. Бұнда төртразрядты сандардың көбейтіндісі сегізразрядты болатындығы ескеріліп, операция басында нәтиже нөл мәнінде алынды және ығыстыру операциясы (олар бағыттама арқылы көрсетілген) әрбір жеке көбейту операцияларының алдында жүргізіліп, жазылым қосу операцияларын орындауға ыңғайландырылды. Тап осы жазылым тәртібі екілік сандарды цифрлық құрылғыда көбейтуге ыңғайлы келеді. Сонымен, бірбайтты екілік сандарды көбейту алгоритмі келесі тәртіппен жүзеге асырылады:
сегізразрядты сандардың көбейтілу нәтижесі оналтыразрядты сан болатындықтан және жеке қосылымдардың да оналтыразрядты сандарға жүргізілетіндігіне байланысты, оналтыразрядты аккумулятор ретінде HL регистрлік жұбы алынып, ол операция басында тазартылады;
DE регистрлік жұбының E регистріне бірінші сан (көбейтілгіш), ал оның D регистріне нөл енгізіліп, көбейтілгіш қосуға ыңғайлы оналтыразрядты санға айналдырылады;
екінші сан (көбейтілгіш) оның разрядтарын ығыстырып шығару үшін аккумуляторға (сөзімізді шатыстырмас үшін, оны бұдан әрі A регистрі деп атаймыз) енгізіледі;
ығыстыру операциясының санын бақылап отыру үшін, көбейткіштің разряд саны микропроцессордың бір регистріне (мысалы, С регистріне) енгізіледі;
әрбір жеке көбейту алдында осы мезетке дейін жиналған нәтиже (HL жұбындағы) солға ығыстырылады;
ығыстыру арқылы А регистрінен шығарылған көбейткіштің кезекті разрядының мәні нөл болғанда, жеке көбейту осымен бітеді (яғни, алдыңғы ығыстырыммен);
А регистрінен шығарылған көбейткіштің кезекті разрядының мәні бір болғанда, HL жұбына DE жұбы қосылады.
Сонымен, ығыстыру операциясы сегіз рет жүргізіледі, ал қосу операциясының саны көбейткіштің құрамындағы бірліктердің санымен анықталады.
Жадының 22E0- және 22E1-ұяшықтарындағы сандарды келтірілген алгоритм бойынша көбейту бағдарламасын келесі түрде құруға болады:
; 9-бағдарлама
1
2200
3A
LDA
22E0H
; A ← [22E0]
2
2201
E0
3
2202
22
4
2203
5F
MOV
E, A
; E ← (A)
5
2204
3A
LDA
22E1H
; A ← [22E1]
6
2205
E1
7
2206
22
8
2207
16
MVI
D, 00H
; D ← 00
9
2208
00
10
2209
21
LXI
H, 0000H
; HL ← 0000
11
220A
00
12
220B
00
13
220C
0E
MVI
C, 08H
; C ← 08
14
220D
08
15
220E
29
K5:
DAD
H
; HL ← (HL) + (HL)
16
220F
07
RLC
; TC←A7
17
2210
D2
JNC
K6
; TC = 0: PC ← 2214
18
2211
14
19
2212
22
20
2213
19
DAD
D
; HL ← (HL) + (DE)
21
2214
0D
K6:
DCR
C
; C ← (C) – 1
22
2215
C2
JNZ
K5
; TZ = 0: PC ← 220E
23
2216
0E
24
2217
22
25
2218
C9
RET
; PC ← [(SP)]
Бағдарлама арқылы анықталған екі санның көбейту нәтижесі HL регистрлік жұбында қалады. Суреттелген көбейту бағдарламасын келесі бағдарламаның құрамында (10-бағдарламада) қосалқы бағдарлама ретінде пайдалану мүмкіндігін қалдыру үшін, бұл бағдарлама RET командасымен аяқталды.
2.3.8. Қосалқы бағдарламалармен жұмыс істеу Микропроцессорлық жүйенің негізгі жұмыс бағдарламасының құрамында одан шақырылатын бірнеше қосалқы бағдарламалар болады. Осындай бағдарламаның құрылымы мен жұмыс тәртібін қарастыру мақсатында жадының 22F0-ұяшығынан бастап, қатарлап орналастырылған жиырма төрт санға (ai) жүзгізілетін y = a0*a1 + a2*a3 + өрнегін есептеу бағдарламасын қарастыралық:
; 10-бағдарлама
1
2220
31
LXI
SP, 2300H
; SP ← 2300
2
2221
00
3
2222
23
4
2223
3A
LDA
22F0H
; A ← [22F0] … a0
5
2224
F0
6
2225
22
7
2226
5F
MOV
E, A
; E ← (A)
8
2227
3A
LDA
22F1H
; A ← [22F1] … a1
9
2228
F1
10
2229
22
11
222A
CD
CALL
2207H
; SP ← (PC), PC ← 2207
12
222B
07
13
222C
22
14
222D
7D
MOV
A, L
; A ← (L)
15
222E
32
STA
22A0
; [(22A0)] ← (A)
16
222F
A0
17
2230
22
18
2231
7C
MOV
A, H
; A ← (HL)
19
2232
32
STA
22A1
; [(22A1)] ← (A)
20
2233
A1
21
2234
22
22
2235
3A
LDA
22F2H
; A ← [22F2] … a2
23
2236
F2
24
2237
22
25
2238
5F
MOV
E, A
; E ← (A)
26
2239
3A
LDA
22F3H
; A ← [22F3] … a3
27
223A
F3
27
223B
22
28
223C
CD
CALL
2207H
; SP ← (PC), PC ← 2207
29
223D
07
30
223E
22
31
223F
3A
LDA
22A0H
; A ← [22A0]
32
2240
A0
33
2241
22
34
2242
4F
MOV
C, A
; C ← (A)
35
2243
3A
LDA
22A1H
; A ← [22A1]
36
2244
A1
37
2245
22
38
2246
47
MOV
B, A
; B ← (A)
39
2247
09
DAD
B
; HL ← (HL) + (BC)
40
2248
5D
MOV
E, L
; E ← (L)
41
2249
54
MOV
D, H
; D ← (H)
42
224A
0E
MVI
C, 14H
; C ← 1416 = 2010
43
224B
14
44
224C
21
LXI
H, 22F4h
; HL ← 22F4
45
224D
F4
46
224E
22
47
224F
CD
CALL
2144H
; SP ← (PC), PC ← 8044
48
2250
44
49
2251
21
50
2252
6F
MOV
L, A
; L ← (A)
51
2253
60
MOV
H, B
; H ← (B)
52
2254
19
DAD
D
; HL ← (HL) + (DE)
53
2255
FF
RST 7
;Басқару бағдарламасына қайту
Бұл бағдарлама қосалқы бағдарламалармен жұмыс істейтін болғандықтан оларға ауысу кезінде негізгі бағдарламаға қайту мүмкіндігін қамтамасыз ету үшін бағдарлама басында (1-жол) жадының нақтылы аймағы стекке бөлініп, оның түбі (SP) белгіленді.
Бірінші көбейтілетін екі сан (a0, a1) E және A регистрлеріне енгізіліп (1…8-жолдар), оларды көбейту үшін қосалқы бағдарлама (9-бағдарлама) шақырылып (11-жол), сол арқылы жүзеге асырылады да, алынған екібайтты нәтиже жады ұяшықтарына уақытша сақтауға жіберіледі (14…19-жолдар). Сосын келесі екі сан (a2, a3) E және A регистрлеріне енгізіліп (22…26-жолдар), олар да қосалқы бағдарлама арқылы көбейтіледі де (28-жол), екібайтты нәтиже HL регистрлік жұбында қалды. Бұдан кейін, жадыда уақытша сақталған алдыңғы көбейтінді BC регистрлік жұбына енгізіліп (31…38-жолдар), DAD командасы арқылы екі көбейтіндінің қосындысы анықталады да (39-жол), бұл нәтиже DE регистрлік жұбына уақытша сақтауға жіберіледі (40-, 41-жолдар). Келесі кезеңде қосылатын сандардың саны (1416 = 2010 ) С регистріне (42-жол), бірінші санның адресі, бұл жерде жанама сілтеу адресінің регистрі ретінде пайдаланылатын, HL регистрлік жұбына енгізіліп (44-жол), көп санды қосуға арналған қосалқы бағдарлама (3-бағдарлама) шақырылады (47-жол). Бұл кезде алынған BC регистрлік жұбындағы нәтиже HL регистрлік жұбына көшіріліп (50-, 51-жолдар), оған алдыңғы DE регистрлік жұбындағы екі көбейтіндінің қосындысы қосылып (52-жол), ақырғы нәтиже алынады.
2.3.9. Шешім қабылдау бағдарламалары Микропроцессорлық басқару жүйелері, негізінде, оның ішінде туған немесе оған сырттан түскен сигналдардың мәніне байланысты шешім қабылдап, сәйкесті құрылғыларды іске қосу немесе оларды жүйе желісінен ажырату арқылы жұмыс істейді. Бұндай жағдайларды суреттейтін бірнеше мысал келтірелік:
алшақ орналасқан екі құрылғының арасында тізбелі түрде жіберілген информацияның дұрыс жеткендігі міндетті түрде жұптық белгісі арқылы тексеріледі;
микропроцессордың RSTn кірістеріне сыртқы құрылғылардың біреуінен түскен үзіліс сұранысына байланысты қосалқы бағдарламаға ауысу туралы шешім үзілістерге жалпы рұқсаттың алдын ала берілгендігіне (EI (Enable Interrupt) командасымен қойылған) немесе оларға тиым салынғандығына (DI (Disable Interrupt) командасымен қойылған) байланысты қабылданады. Үзіліс сұранысының жұмысына рұқсат берілген жағдайда, сәйкесті қосалқы бағдарламаның бастапқы адресі кіріс нөмірінің мәніне (n = 5,5; 6,5; 7,5) байланысты (8n) анықталады (002СН, 0034Н немесе ООЗСН);
параллель адаптердің қай портының (PA, PB, PCH, PCL) іске қосылатындығы, оның қай бағытта (енгізу немесе шығару) дерек жіберетіндігі және қандай режимде (0, 1, 2) істейтіндігі оған жіберілген режимдік басқару сөзінің (БС1) сәйкесті разрядтарының мәндеріне байланысты анықталады. Екінші басқару сөзімен (БС2, ол қою/тазарту сөзі деп аталады) С портының жолдары арқылы жіберілетін басқару сигналдарының деңгейлері (0 немесе 1) қойылады. Басқару сөздерінің қайсысы (БС1 немесе БС2) келгендігі оның екілік кодының жетінші разрядының мәніне байланысты анықталады. Және т.б.
Бағдарламалы шешімдер көптеген жағдайда логикалық командалар арқылы жүзеге асырылады. Олардың орындалу тәртібін суреттеу мақсатында жадының 2300-ұяшығынан бастап орналастырылған таңбалы жетіразрядты 50 санға келесі операциялардың орындалу керек:
a) жұп мәнді теріс сандардың үлкен тетрадасының разряд мәндерін нөлге айналдыру керек;
b) тақ мәнді теріс сандардың үлкен тетрадасының разряд мәндерін бірге айналдыру керек;
c) жұп мәнді оң сандардың кіші тетрадасының разряд мәндерін бірге айналдыру керек;
d) тақ мәнді оң сандардың барлық разряд мәнін терістеу керек.
Әртүрлі сілтемелі логикалық командаларды пайдалану арқылы қойылған мәселелердің орындалуын келесі бағдарламамен жүзеге асыруға болады:
; 11-бағдарлама
1
2260
31
LXI
SP, 2400H
; HL ← 2400
2
2261
00
3
2262
24
4
2263
21
LXI
H, 23A0
; HL ← 2300
5
2264
00
6
2265
23
7
2266
0E
MVI
C, 32H
; C← 3216 = 5010
8
2267
32
9
2268
16
MVI
D, 0FH
; D ← 0F16 = 000011112
10
2269
0F
11
226A
1D
MVI
E, F0H
; E ← F016 = 111100002
12
226B
F0
13
226C
7E
K7:
MOV
A, M
; A ← [(HL)]
14
226D
47
MOV
B, A
; B ← (A)
15
226E
07
RLC
; A7-1 ← (A6-0), A0 ← (A7),
; TC←A7
16
226F
0F
RRC
; A6-0 ← (A7-1), A7 ← (TC),
; TC←A0
17
2270
DC
CС
2280H
; TC = 1: SP ← (PC),PC ← 2280
18
2271
80
19
2272
22
20
2273
DA
JC
K8
; TC = 1: PC ← 2279
21
2274
79
22
2275
22
23
2276
CD
CALL
2290H
; SP ← (PC), PC ← 2290
24
2277
90
25
2278
22
26
2279
77
K8:
MOV
M, A
; [(HL)] ← (A)
27
227A
0C
INR
C
; C ← (C) – 1
27
227B
C2
JNZ
K7
; TZ = 0: PC ← 226C
28
227C
6A
29
227D
22
30
227E
76
HLT
; Тоқтатылым
31
227F
32
2280
E6
ANI
01
; A ← (A) ۸ 01
33
2281
01
34
2282
CA
JZ
K9
; TZ = 1: PC ← 228A
35
2283
8A
36
2284
22
37
2285
78
MOV
A, B
; A ← (B)
38
2286
A2
ANA
D
; A ← (A) ۸ (D)
39
2287
CA
JMP
KA
; PC ← 228C
40
2288
8C
41
2289
22
42
228A
78
K9:
MOV
A, B
; A ← (B)
43
228B
B3
ORA
E
; A ← (A) ۷ (E)
44
228C
C9
KA:
RET
; PC ← [(SP)]
45
228D
46
228E
47
228F
48
2290
E6
ANI
01
; A ← (A) ۸ 01
49
2291
01
50
2292
CA
JZ
KC
; TZ = 1: PC ← 229B
51
2293
9B
52
2294
22
53
2295
78
MOV
A, B
; A ← (B)
54
2296
F6
ORI
0FH
; A ← (A) ۷ 0F
55
2297
0F
56
2298
C3
JMP
KD
; PC ← 229E
57
2299
9E
58
229A
22
59
229B
78
KC:
MOV
A, B
; A ← (B)
60
229C
EE
XRI
FF
; A ← (A) FF
61
229D
FF
62
229E
C9
KD:
RET
; PC ← [(SP)]
Бұл бағдарлама қосалқы бағдарламалармен жұмыс істейтін болғандықтан, оларға ауысу кезінде негізгі бағдарламаға қайту мүмкіндігін қамтамасыз ету үшін негізгі бағдарламаның дайындық кезеңінің басында (1-жол) жадының нақтылы аймағы стекке бөлініп, оның түбі (SP) белгіленді.
Жанама сілтеу регистрлеріне (яғни, HL жұбына) бірінші операндтың адресі енгізіліп (4-жол), С регистріне жадыдан шығарылатын операндтардың саны жазылды (7-жол). Сосын D және E регистрлеріне болашақ операцияларға қажетті тұрақты операндтар енгізілді (9-, 11-жолдар).
Негізгі бағдарламаның қызмет кезеңінде кезекті сан аккумуляторға (13-жол) және В регистріне енгізілді (14-жол). Аккумулятор солға ығыстырылып (15-жол), оның ығысып шыққан 7-разрядының мәні (TC) арқылы бұл санның таңбасы анықталады да (TC = 0 – оң сан, TC = 1 – теріс сан), сәйкесті қосалқы бағдарлама шақырылады (17-, 23-жолдар).
Бірінші қосалқы бағдарламада (32…44-жолдар) теріс санға байланысты мәселелер шешіледі. Санның жұптығы (немесе тақтығы) оның кіші разрядының мәніне (0 – жұп сан, 1 – тақ сан) байланысты анықталады (32-жол).
D регистріндегі тұрақтымен (00001111) жүргізілген логикалық көбейту операциясы (38-жол) жұп санның үлкен тетрадасының разряд мәндерін нөлге айналдырады, ал E регистріндегі тұрақтымен (11110000) жүргізілген логикалық қосу операциясы (43-жол) жұп санның үлкен тетрадасының разряд мәндерін бірге айналдырады.
Екінші қосалқы бағдарламада (48…62-жолдар) оң санға байланысты мәселелер шешіледі. Санның жұптығы (немесе тақтығы) алдыңғы қосалқы бағдарламадағыдай анықталады (48-жол).
Тіке сілтемелі ORI командасы арқылы 0F (00001111) тұрақтысымен жүргізілген логикалық қосу операциясы (54-жол) тақ санның үлкен тетрадасының разряд мәндерін бірге айналдырады, ал XRI командасы арқылы FF (11111111) тұрақтысымен жүргізілген екілік қосу операциясы (60-жол) тақ санның барлық разряд мәнін терістейді.
Жоғарыда келтірілген бағдарламаларды (яғни, олардың екінші (жады ұяшығының адрестері) және үшінші (команда кодтары мен операндтар) бағаналарындағы мәліметтерді) оқу жүйесінде пайдаланылатын микропроцессорлық жүйелердің зертханалық құрылымдарының жадысына енгізіп, олардың жұмысын тексеруге болады. Тексерімді (яғни, микропроцессордың регистрлері мен жады ұяшықтарындағы өзгерістерді) бағдарлама жұмысы толықтай біткен кезде немесе әрбір команданың орындалғанынан кейін (ол қадамдық режим деп аталады) жүргізуге болады. Зертханалық құрылымның құрамында ассемблер тілінде құрылған бағдарламаларды машина тіліне аударушы Ассемблер бағдарламасы болған жағдайда, әрине, оларға бағдарлама мнемоникалық жазылым түрінде енгізіледі.
Әдебиеттер тізімі 1. Токхейм Р. Основы цифровой электроники: Пер. с. англ. – М.: Мир, 1988.
2. Токхейм Р. Микропроцессоры. Курс и упражнения: Пер. с. англ. – М.: Мир, 1988.
3. Уэйкерли Дж. Ф. Проектирование цифровых устройств: Пер. с. англ. – М.: Постмаркет, 2002.
4. Опадчий Ю. Ф., Глудкин О. П., Гуров А. И. Аналоговая и цифровая электроника / Под ред. О.П. Глудкина. – М.: Радио и связь, 2003.
5. Хамахер К. И др. Организация ЭВМ. Пер. с. англ. – СПб.: Питер, 2003.
6. Угрюмов Е. П. Цифровая схемотехника. – СПб.: БХВ-Петербург, 2004.
7. Бойко В.И. и др. Схемотехника электронных устройств. Цифровые устройства. – СПб.: БХВ-Петербург, 2004.
8. Бойко В.И. и др. Схемотехника электронных устройств. Микропроцессоры и микроконтроллеры. – СПб.: БХВ-Петербург, 2004.
9. Сугано Т. Дж., Уидмер Н. С. Цифровые системы. Теория и практика: Пер. с англ. – М.: Издательский дом “Вильямс”, 2004.
10. Бураханова З.М., Шанаев О.Т. Аналогты және цифрлы электрондық құрылғылар / Оқу құралы. – Алматы: АЭИ, 1992.
11. Бураханова З.М., Шанаев О.Т. Электрондық тізбектер / Оқу құралы. – Алматы: АЭИ, 1996.
12. Бураханова З.М. Дербес ЭЕМ арқылы схемақұралыстық моделдеу / Оқу құралы. – Алматы: АЭжБИ, 1999.
13. Шанаев У.Т. Основы цифровой техники / Учебное пособие. – Алматы: АГУ, 1999.
14. Шанаев О.Т. Цифрлық құрылғылар және микропроцессорлар. Зертханалық жұмыстарға арналған әдістемелік нұсқаулар. – Алматы: АИЭС, 2008.
15. Шанаев О.Т. Цифрлық құрылғылар және микропроцессорлар. Курстық жұмыстарды орындауға арналған әдістемелік нұсқаулар. – Алматы: АИЭС, 2008.
16. Шанаев О.Т. Микропроцессорлық жүйелердің құрылғылары. Зертханалық жұмыстарды орындауға арналған әдістемелік нұсқаулар. – Алматы: АИЭС, 2009.
17. Шанаев О.Т. Electronic Workbench моделдеу жүйесі / казақ және орыс тілдерінде. – Алматы, 2003.
Мазмұны Кіріспе 1 Цифрлық құрылғылар 1.1 Цифрлық құрылғылардың математикалық негіздері 1.1.1 Екілік санау жүйесі 1.1.2.1 Сандардың түрлендірілімі 1.1.1.1.1 Ондық санның екілік санға түрлендірілуі 1.1.1.1.2 Екілік санның ондық санға түрлендірілуі 1.1.1.1.3 Санның оналтылық жазылымы 1.1.2 Логикалық функциялар 1.1.2.1 Негізгі функциялар 1.1.2.2 Әмбебап функциялар 1.1.2.3 Теңдік және теңсіздік функциялары 1.1.3 Логика алгебрасының заңдары мен заңдылықтары 1.1.4 Күрделі функциялар 1.1.4.1 Логикалық функцияларды минимизизациялау 1.1.4.1.1 Тікелей түрлендіру тәсілі 1.1.4.1.2 Карно картасы арқылы түрлендіру 1.1.4.1.3 Арнайы түрлендіргішті пайдалану 1.2 Қиыстырма құрылғылар 1.2.1 Логикалық элементтер 1.2.1.1 Логикалық элементтердің тез әрекеттілігі 1.2.2 Қиыстырма құрылғыларды құру тәртібі 1.2.3 Қалыпты қиыстырма құрылғылар 1.2.3.1 Шифраторлар 1.2.3.1.1 Шифратордың өлшемін ұлғайту 1.2.3.2 Дешифраторлар 1.2.3.2.1 Дешифратор негізінде қиыстырма құрылғы құру 1.2.3.3 Мультиплексорлар 1.2.3.3.1 Мультиплексор негізінде қиыстырма құрылғы құру 1.2.3.4 Демультиплексорлар 1.2.3.5 Қосуыштар 1.2.3.5.1 Бірразрядты қосуыштар 1.2.3.5.2 Көпразрядты қосуыштар 1.3 Тізбектеме құрылғылар 1.3.1 Триггерлер 1.3.1.1 Асинхронды RS-триггерлер 1.3.1.1.1 Тура кірісті RS-триггер 1.3.1.1.2 Теріс кірісті RS-триггер 1.3.1.2 Синхронды триггерлер 1.3.1.2.1 Синхронды RS-триггер 1.3.1.2.2 Статикалы басқарылымды D-триггер 1.3.1.2.3 Динамикалы басқарылымды триггерлер 1.3.2 Регистрлер 1.3.3 Санауыштар 1.4 Жадылық құрылғылар 1.4.1 Жадылық құрылғылардың басқару сигналдары 1.4.2 Жадылық құрылғылардың басты параметрлері 1.4.3 Жадылық құрылғылардың негізгі түрлері 1.4.4 Жадылық құрылғылардың негізгі құрылымдары 1.4.4.12D құрылымы 1.4.4.2 3D құрылымы 1.4.4.32DM құрылымы 1.4.5 Тұрақты жадылық құрылғылардың байланыс элементтері 1.4.5.1 ROM(M) құрылғылары 1.4.5.2 PROM құрылғылары 1.4.5.3 EPROM және EEPROM құрылғылары 2 Микропроцессорлар және микропроцессорлық жүйелер 2.1 Микропроцессорлық жүйелердің құрылым принциптері 2.2 Intel 8085 микропроцессоры 2.2.1. Микропроцессордың құрылымы 2.2.2. Микропроцессордың басқару сигналдары 2.2.3. Микропроцессордың жұмыс тәртібі 2.2.4. Микропроцессордың үзіліс жүйесі 2.2.5. Микропроцессордың тізбекті енгізу/шығару жүйесі 2.2.6. Микропроцессордың командалар жүйесі 2.2.7. Микропроцессорда қолданылатын сілтеу тәсілдері 2.3 Микропроцессорлық жүйенің жұмысын бағдарлау 2.3.1. Тізбелі бағдарламалар 2.3.2. Тарамдалымды бағдарламалар 2.3.3. Екібайтты сандарды қосу бағдарламасы 2.3.4. Тіке сілтемелі командалармен жұмыс істеу 2.3.5. Алу командаларымен жұмыс істеу 2.3.6. Регистр жұптарымен жұмыс істеу 2.3.7. Көбейту бағдарламасы 2.3.8. Қосалқы бағдарламалармен жұмыс істеу 2.3.9. Шешім қабылдау бағдарламалары Әдебиеттер тізімі