Практикалық дағдыларды қалыптастыруға арналған программа
Барлық ASCII-символдарын экранға шығаратын программа (16 жол, әр жолда 16 символдан баспаға беру).
org 100h
|
; СОМ – файлдың бастамасы
|
1
|
2
|
begin:
|
; программа кодының басталу белгісі
|
mov cx,256
|
; санағыш мәнін береміз (256 символ)
|
mov dl,0
|
; бірінші символ – 00 кодымен
|
mov ah,2
|
; «символды шығару» функциясы
|
cloop: int 21h
|
; шақыру
|
inc dl
|
; DL регистрінің мәнін 1-ге арттыру – келесі символ
|
test dl,0Fh
|
; егер DL регистрі 16-ға еселі болмаса
|
jnz continue_loop;
|
; циклді жалғастыру
|
push dx
|
; басқа жағдайда: символды сақтау
|
mov dl,0Dh
|
; CR баспаға беру
|
int 21h
|
; DOS шақыру
|
mov dl,0Ah
|
; LF баспаға беру
|
152
1
|
2
|
int 21h
|
; DOS шақыру
|
pop dx
|
; ағымдағы символ қалыпқа келтіру
|
continue_loop:
|
; белгі
|
loop cloop
|
; циклді жалғастыру
|
ret
|
; СОМ-файлды аяқтау
|
end begin
|
; программа кодының аяқталу белгісі
|
82-сурет. Программаның орындалу нәтижесі
Тапсырмалар:
- Зертханалық жұмыста келтірілген барлық мысалдарды орындаңыз.
- Практика үшін берілген мысалдың құрылымын талдаңыз.
- Ассемблер тіліндегі циклдік ауысуларды ұйымдастырудың шарттарын үйреніңіз.
- Экранға «!!!!!!!!!! Hello!!!!!!!!!!» сөзін баспаға беретін программа ко-
дын жазыңыз (3 әдіс бойынша).
№
|
Шығарылатын мәліметтер
|
Есептеу формуласы
|
А
|
B
|
С
| |
Циклдік ауысу
|
D=A+B+C
|
101
|
345
|
121
| |
Hello world
|
D=A-B+C
|
578
|
152
|
149
| |
Good Bye
|
D=A+B-C
|
333
|
223
|
16
| |
Группа
|
D=A-B+C
|
1502
|
834
|
1
| |
Зертханалық жұмыс
|
D=A-B-C
|
1056
|
33
|
125
|
153
Бақылау сұрақтары:
- Loop командасы арқылы циклді ұйымдастыру?
- Cx регистрінің маңызы?
- Cx регистрінің командаларды максималды қайталау саны?
- Jmp командасы арқылы циклді ұйымдастыру ерекшелігі?
- Jmp командаларының түрлері?
- dec және jnz командалары арқылы циклдерді ұйымдастыру ерекшелігі?
Тапсырмалар нұсқалары:
(K 1) * 4, N 2
2 * N 1,
1. M N - 3 * K I/2, 2 N 4
N 4
I 3
(I * I * I)/(I * I 2), 1 I 3
2. M I * I 4 * I - 7, I 1
4 * I - 7,
I * 4 J,
I 4 * J,
I J
3. M 2 * I - (J J/2), I J
I J
N 7
N 20
K * 4,
4. M - K)/2,
(N
N 1,
7 N 20
5. M I * 2 J * J/4, I 1
2 * N 1, - 2 I 1
I * K K/2, I 2
(J I) * 3,
I 2
6. M 2 * I * I K, I 0
3* I/5 - 2, I* I 16
5* I* I -1, 5 I* I 16
3 * I * I * I - K, 0 I 2
2 * I* I I, I* I 5
7. M
3.9. Сандарды баспаға шығарудың әдістері мен тәсілдері
Жұмыстың мақсаты: сандарды екілік, он алтылық және ондық кодта шығару әдістерін игеру.
1. DH регистріне жазылған екілік кодтағы санды шығару.
Орындалу әдістемесі
Сандағы биттерді тізбектей отырып талдау керек. Бұл жұ- мыста тек DH ‘0’-ді (егер шығарып тасталса) шығару, егер орна- тылған болса, онда ‘1’ болады.
Есептерді шешу алгоритмі:
- бір биттің мәнін талдау;
- биттің мәнін баспаға беру;
- келесі битке көшу. Сонымен, 8 рет (БАЙТ) – ЦИКЛ.
Битті талдау: мәндерді талдау барысында программистер, әдетте TEST командасын пайдаланады, бірақ қазіргі зертхана- лық жұмыста SHL командасын пайдаланамыз.
154
8. M J * (I 1), I J
J I * I/J, I J
- 2 * J * J 2, J 2
7 * J 8, 2 J 5
2 * J - I, I J
2 * J * J 3, J 5
9. M
2 * I * I * J, I 1
10. M 4 * I - 6, 1 I 7
3 * I - J 3, (J I) 5
3 * I J/2, I 7
J 2,
11. M I * J,
7 * K J,
5 * J K, J K
J K
2 (J I) 5 (J I) 2
J K
K,
12. M
155
SHL командасы операндтың барлық биттерін сол жаққа ығыстыру орындалады. Операндтың үлкен биті CF флагына тү- седі. Команда келесі форматта жазылады:
SHL операнд, 1
1 битке ығыстырылады. Операндтың кіші битіне 0 жүктеле- ді. Онда команда келесі форматта:
SHL операнд,CL
жазыла алады.
CL регистр санағышта көрсетілген биттердің санына ығыс- тыру орындалады, CF флагынан өткенде операндтың үлкен бит- тері ығыстыру нәтижесінде жоғалады, ал кішілері нөлмен то- лықтырылады. SHL командасының операнды ретінде кез келген регистр (сегменттіктен басқа) немесе байт және сөз өлшемді жа- ды ұяшығы пайдаланылады. Операнд ретінде тікелей мәнін қоюға болмайды. Әрбір солға қарай ығыстыру таңбалы санды 2-ге көбейткенге тең, сондықтан SHL командасын 2 дәрежесіне шығару үшін пайдаланған ыңғайлы. Команда келесі флагтарға: OF, SF, ZF, PF және CF әсер етеді. Егер CF флагы нөл болса, белгіге көшу, ал басқа жағдайда осы командадан кейін келе жат- қан команда орындалады.
Мысал:
org 100h
|
; СОМ – файлдың басталуы
|
1
|
2
|
begin:
|
; программа кодының басталу белгісі
|
mov DH,<55>
|
; dh регистріне кез келген ASCII-кодының символын енгіземіз
|
mov AH,2
|
; АН регистріне «(2) жолды шығар» функциясының нө- мірін орналастырамыз
|
mov CX,8
|
; цикл айнымалысын инициализациялау
|
@1: mov DL,'0'
|
; DL регистріне '0' символының кодын жазамыз
|
shl DH, 1
|
; 1 битке жылжу
|
jnc @2
|
; егер '0' болса, көшу
|
inc DL
|
; '1' символының коды '0' символының кодынан бірге артық деген фактіні пайдаланамыз
|
55>
Достарыңызбен бөлісу: |