MASM
MODEL small
STACK 256
.data
fnd db 0ah,0dh,'Символ найден! ','$'
nochar db 0ah,0dh,'Символ не найден.','$'
string db 'Поиск символа в этой строке.',0ah,0dh,'$'
.code
ASSUME ds:@data,es:@data
main:
mov ax,@data
mov ds,ax
mov es,ax
mov ah,09h
lea dx, string
int 21h
mov al,'a'
cld
lea di, string
mov cx,29
repne seas string
je found
failed:
mov ah,09h
lea dx,nochar
int 21h
jmp exit
found:
mov ah,09h
lea dx,fnd
int 21h
dec di
exit:
mov ax,4c00h
int 21h
end main
5. Бұл амал-примитив тізбектен элементті алады және оны а1, ах не еах регистр-аккумулятор орналастырады.
6. Бұл амал-примитив lods командасына керісінше. TASM программистке тізбекке регистр - аккумулятордан элементті тізбекке сақтайды.
Мысал. stos командасы арқылы клавиатурадан енгізілетін символды ауыстырады.
MASM
MODEL small
STACK 256
.data
fnd db 0ah,0dh,'Символ найден','$'
nochar db 0ah,0dh,'Cимвoл не найден.','$'
mesl db 0ah,0dh,'Исходная строка:','$'
string db 'Поиск символа в этой строке',0ah,0dh,'$'
mes2 db 0ah,0dh,'Введите символ, на который следует заменить 'найденный', 0ah,0dh,'$'
mes3 db 13,10,'Новая строка: ','$'
.code
assume ds:@data,es:@data
main:
mov ax,@data
mov ds,ax
mov es,ax
mov ah,09h
lea dx,mesl
int 21h
lea dx,string
int 21h
mov al,'a'
cld
lea di,string
mov cx,29
cycl:
repne seas string
je found
failed:
mov ah,09h
lea dx, nochar
int 21h
jmp exit
found:
mov ah,09h
lea dx,fnd
int 21h
dec di
new_char:
mov ah,09h
lea dx,mes2
int 21h
mov ah,01h
int 21h
stos string
mov ah,09h
lea dx,mes3
int 21h
lea dx,string
int 21h
inc di
jmp cycl
exit:
mov ax,4c00h
int 21h
end main
Int10h, 00һ функциясы.Бейнережимді орнату.
шақыру кезінде: АН=00h
қайтару кезінде: AL=бейнережим: 03һ-текстік, 10һ-графикалық
Int 10h, 01һ функциясы. Курсордың орнату.
шақыру кезінде: АН=01h
СН биттер = курсордың бастапқы жолы
СL биттер = курсордың соңғы жолы
Int 10h, 02һ функциясы. Курсордың орнын орнату.
шақыру кезінде: АН=02h
ВН = бет
DH= жол
DL= баған
Int 10h, 02һ функциясы. Курсордың орнын алу.
шақыру кезінде: АН=03h
ВН = бет
қайтару кезінде:
СН= курсордың бастапқы жолы
СL= курсордың соңғы жолы
DH= жол
DL= баған
CMP операнд1, операнд2 - екі операнданы салыстыру.
Төменде шартты өту командаларының флагтары мен қисын шарттару берілген.
Команда
| Тексерілетін флагтардың күйі | Өту шарты |
JA
|
CF = 0 и ZF = 0
|
егер жоғары
|
JAE
|
CF = 0
|
Егер жоғары не тең
|
JB
|
CF = 1
|
Егер төмен
|
JBE
|
CF = 1 или ZF = 1
|
Егре төмен не тең
|
JC
|
CF = 1
|
Егер өту
|
JE
| ZF = 1 |
Егер тең
|
JZ
|
ZF = 1
|
Егер 0
|
JG
|
ZF = 0 и SF = OF
|
Егер үлкен
|
JGE
|
SF = OF
|
Егер үлкен не тең
|
JL
|
SF <> OF
|
Егер кіші
|
JLE
|
ZF=1 или SF <> OF
|
Егер кіші не тең
|
JNA
|
CF = 1 и ZF = 1
|
Егер биік емес
|
JZ
|
ZF = 1
|
Егер нөл
|
Әдебиеті:
1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
2 К. Г. Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
"Радио и связь", 1995.
Бақылау сұрақтары:
1 Тізбекті командалар дегеніміз не?
2 Символдар жолы деп нені айтамыз?
3 Тізбекті командалары қандай амалдарды жүргізеді?
4 Тізбекті жіберу командасын ата.
Тақырыбы 9 Логикалық командалар.
Мақсаты: Ассемблер тілінде логикалық командаларымен таныстыру. Әр
түрлі есептерді шығарғанда логикалық командаларды
қолдануды үйрету.
Дәріс сұрақтары:
1. Логикалық мәліметтер.
2. Логикалық командалар.
3. Шегу командалары.
1. Логикалық дегеніміз формальды логика негізінде мәліметтерді түрлендіруді айтамыз.
Формальды логика ақиқат және жалған деген тұжырымдама негізінде жұмыс жасайды. Микропроцессор үшін ол сәйкесінше 1 және 0.
Мәліметтерді логикалық түрде өңдеудің теориялық базасы формальды логикаға жатады. Логиканың бірнеше жүйелері бар. Ең танымалы – ол сөйлемдерді есептеу. Сөйлем – бұл ақиқат не жалған туралы айтатын кез келген тұжырымдама.
Логикалық шылаулар математикалық логикада күрделі пайымдауларды сипаттайтын логикалық амалдар болып табылады. Математикалық логикадағы ЖӘНЕ, НЕМЕСЕ, ЕМЕС логикалық амалдары ақиқаттық кестесімен анықталады.
-
«ЖӘНЕ»
|
Коньюнкция (көбейту)
|
А және В
|
«НЕМЕСЕ»
|
Дизьюнкция(қосу)
|
А немесе В
|
«ЕМЕС»
|
Теріске шығару
|
А емес
|
Логикалық көбейту
Және шылауының көмегімен бір құрамдасқа екі қарапайым А және В пайымдауларының бірігуі логикалық көбейту немесе коньюнкция деп аталады, ол амалдың нәтежесі – логикалық көбейтінді.
ЖӘНЕ (коньюнкция) логикалық амалы үшін ақиқаттық кесте мынандай:
А
|
В
|
А және В
|
Иә
|
Иә
|
Иә
|
Иә
|
Жоқ
|
Жоқ
|
Жоқ
|
Иә
|
Жоқ
|
Жоқ
|
Жоқ
|
Жоқ
|
Мұндағы А және В – иә немесе жоқ мәнін қабылдай алатын екі пайым.
Мысалы, деректері қарапайым айтылымдар болсын: А – «Астана – Қазақстанның астанасы», В – «Астанада 300 мыңнан астам адам тұрады».
Онда осы айтылғандардың логикалық көбейтіндісі, немесе коньюнкциясы, құрамды пайымдау болады: «Астана Қазақстанның астанасы және Астанада 300 мыңнан астам адам тұрады» пайымдаулардың ақиқат мәніне байланысты иә немесе жоқ мәнін қабылдағанда «А мен В» құрамды пайымдауы да иә мәнін қабылдайтынны кестеден көреміз.
Ақиқат кестесінен:
Пікірдің екеуі де ақиқат болғанда, А және В коньюнкциясы ақиқат; А немесе В пікірлерінің біреуі немесе екеуі де жалған болғанда, А және В коньюнкциясы жалған болатындығын көреміз.
Логикалық қосу
Біріктіруші мағыналда қолданылатын НЕМЕСЕ шылауының көмегімен бір құрамдасқа екі қарапайым А және В айтылымдарының бірігуі логикалық қосу немесе дизьюнкция деп аталады, ал амалдың нәтежесі – логикалық қосынды.
НЕМЕСЕ логикалық амалы үшін ақиқаттық кесте мынадай түрде болады:
А
|
В
|
А және В
|
Иә
|
Иә
|
Иә
|
Иә
|
Жоқ
|
Жоқ
|
Жоқ
|
Иә
|
Жоқ
|
Жоқ
|
Жоқ
|
Жоқ
|
Мысалы, «Күзде ағаштардың жапырақтары жасыл және сары» құрамды пікірі үш жағдайда иә логикалық мағынасын қабылдайды: «Күзде ағаштардың жапырақтары жасыл» не Күзде ағаштардың жапырақтары сары » не«Күзде ағаштардың жапырақтары жасыл және сары» болғанда. Бұл амалдың ақиқаттық кестесінен, егер А да, В да иә мәніне ие болса; не тек қана А, не тек қана В иә мәніне ие болса, онда
«А немесе В» айтылымы иә мәніне ие болатындығы көрінеді. Және керісінше, егер А да, В да жоқ мәніне болса, онда «А немесе В» айтылымы жоқ мәніне ие болады.
Егер А немесе В пікірлерінің тек біреуі ғана ақиқат болса, А және В дизьюнкциясы ақиқат.
А және В пікірлерінің екеуі де жалған болғанда, А және В дизьюнкциясы жалған.
Логикалық теріске шығару
Қарапайым А айтылымына ЕМЕС шылауын қосу логикалық теріске шығару амалы деп аталады, амалджы орындағаннан кейінгі нәтеже жаңа айтылымды береді.
ЕМЕС (теріске шағару) логикалық амалы үшін ақиқаттық кесте мынадай:
Мұндағы А кейбір еркін айтылымдар.
Мысалы, «Бүгін күн ыстық» айтылымы теріке шығру болады.Кей жағайларда барлық айтылымдарға «...жалған» сөзін қолдануға болады. Сонда «Сен жақсы баға алдың» айтылымын «Сенің жақсы баға алғаның жалған» айтылымы теріске шығару болады. Бұл амалдың ақиқаттық кестесінен, егер бастапқы А айтылымы жалған болса, онда А емес (А емес, ақиқат) теріске шығаруы жоқ мәніне ие болады.
2. Микропроцессор командалар жүйесінде логикалық мәліметтермен жұмыс жасайтын командалар жинағы бар:
and операнд_1, операнд_2 – логикалық көбейту амалы.
Команда операнд_1 және операнд_2 операндалар биттерімен И (ЖӘНЕ) амалын (конъюнкция) орындайды. Нәтижесі операнд_1 орнына жазылады.
or операнд_1, операнд_2 — логикалық қосу амалы.
хог операнд_1, операнд_2 — логикалық қосуды болдырмайтын амал.
test операнд_1, операнд_2 — «тексеру» амалы.
not операнд — логикалық «емес» амалы.
3. Бұл топтың командалары операндалар биттерімен жұмыс жасауды қамтамасыз етеді. Барлық шегу командалары не солға, не оңға қарай шегиді, амалдар кодына байланысты. Шегудің барлық командалары бірдей құрылымнан тұрады:
коп операнд, шегу_санауышы
Әдебиеті:
1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
2 К. Г. Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
"Радио и связь", 1995.
Бақылау сұрақтары:
1 Формальды логика туралы айтыңыз.
2 Логикалық командаларды атаңыз.
3 Шегу командалары дегеніміз не?
Тақырыбы 10 Арифметикалық командалар.
Мақсаты: Ассемблер тілінде арифметикалық командаларымен
таныстыру. Әр түрлі есептерді шығарғанда арифметикалық
командаларды қолдануды үйрету.
Дәріс сұрақтары:
1. Арифметикалық командалардың нысандары.
2. Екілік сандармен арифметикалық амалдарды жүргізу.
1. Бүтін екілік сан – бұл екілік санау жүйесінде кодталған сан. Бүтін екілік санның өлшемділігі 8,16 не 32 бит болуы мүмкін.
Ондық сандар — сандық ақпаратты көрсететін арнайы көрінісі. Оның негізінде санның әр ондық цифрін кодтау.
Per_1 db 2,3,4,6,8,2 ; жинақталмаған BCD – саны 286432
Per_2 dt 9875645 ; жинақталған BCD – саны 9875645
2. Микропроцессор операндаларды қосады екілік сандарды қосу принципіне байланысты. Микропроцессор командалар жүйесінде екілік қосудың үш командасы бар:
-
inc операнд — инкремент амалы, яғни операнд мәнін 1-ге көбейтеді;
-
add операнд_1, операнд_2 — операнд_1 = операнд_1 + операнд_2 әрекет принципіне байланысты қосу амалы орындалады;
-
adc операнд_1,операнд_2 — cf көшу флагын есепке алып қосу амалы. Команданың принципі: операнд_1 = операнд_1 + операнд_2 + с£_мәні;
Мысал: Санадрдың саның қосу
masm
.model small
.stack 256
.data
a db 254
.code
main:
xor ax,ax
add al,17
add al,a
jnc ml
adc ah,0
ml: ...
exit:
end main
Таңбасыз екілік сандарды алу.
Алу командаларына келесі жатады:
-
dec операнд —декремент амалы, яғни операнд мәнін 1-ге кішірейтеді;
-
sub операнд_1, операнд_2 — алу командасы; оның жұмыс принципі: операнд_1 = операнд_1 - операнд_2
-
sbb операнд_1, операнд_2 — (cf флагы) зайыммен алу командасы: операнд_1 = операнд_1 - операнд_2 – cf_мәні;
Мысал: Сандарды алу
masm
model small
.stack 256
.data
.code
main:
xor ax,ax
mov al,5
sub al,10
jnc m1
neg al
ml:...
exit:
end main
Таңбасыз сандарды көбейту.
Таңбасыз сандарды көбейту үшін кеелсі команда қолданылады:
mul көбейткіш_1.
-
Егер нәтиженің үлкен бөлігі нөлдік болса, онда cf = 0 және of = 0;
-
Егре бұл флагтар нөлдік болмаса, онда көбейтудің нәтижесі кіші бөліктің сыртында деп түсінуге болады.
Таңбасыз сандарды бөлу
Таңбасыз сандарды бөлу үшін div командасы қолданылады.
Таңбамен сандарды бөлу
Таңбамен сандарды бөлу үшін іdiv командасы қолданылады.
Әдебиеті:
1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
2 К. Г. Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
"Радио и связь", 1995.
Бақылау сұрақтары:
1 Арифметикалық командалар дегеніміз не?
2 Микропроцессор жүйесінде екілік қосудың неше командасы бар?
Тақырыбы 11 Файлдармен, каталогтармен және дискілермен жұмыс.
Мақсаты: Ассемблер тілінде файлдармен, каталогтармен жұмысты
таныстыру.
Дәріс сұрақтары:
1. MS DOS файлдық жүйесінің негізгі сипаттамалары.
2. Дискілер мен файлдар жұмысын қамтамасыз ететін жүйелік құралдар.
1. IBM PC типтес машиналарда магниттік дискіге қатынаудың екі деңгейі ұйымдастырылған. Төмеңгі деңгейде программалау кезінде қолданушы BIOS INT 13h арқылы дискіге тікелей қатынай алады. Осы деңгейдің дәстүрлі амалдарына келесі жатады:
- секторды оқу не жазу;
- бас түтектің орыны;
- жолды форматтау.
Жоғары деңгей DOS INT 21h үзілімі арқылы ұйымдастырылады. Программист физикалық дискімен жұмыс жасамайды, а DOS файлдық жүйесімен.
DOS-та каталогтардың ағаш тәріздес құрылымы қолданылады. Келесі кестелерде каталогтар туралы ақпарат көрсетілген:
Кесте 1 – каталогты жазу форматы
Ығысу
|
Байт саны
|
Мазмұны
|
00h
|
8
|
ASCII кодында файл атауы
|
08h
|
3
|
ASCII кодында файл атауының кеңейтілуі
|
0Bh
|
1
|
Файл атрибутының байты
|
0Ch
|
10
|
Резервте
|
16h
|
2
|
Файлдың құрылуы және өзгеруі уақыты
|
18h
|
2
|
Файлдың құрылуы және өзгеруі күні
|
1Ah
|
2
|
Дискіде файл басталатын кластер нөмірі
|
1Ch
|
4
|
Файлдың нақты ұзындығы (байт)
|
Кесте 2 – файл атрибуттары
Атрибут
|
Қызметі
|
01h
|
Тек оқу үшін файл. Файлды өзгерту не өшіруге тыйым салынады.
|
02h
|
Көрстелімейтін файл
|
04h
|
Жүйелік файл
|
08h
|
Файл туралы жазба том меткасын көрсетеді.
|
10h
|
Файл өзімен каталогты көрсетеді.
|
20h
|
Файл құрылғаннан кейін архивтелмеген.
|
2. DOS деңгейінде дискімен жұмыс жасағанда біз файлдарға олардың аттары арқылы қатынай аламыз.
3еһ: Файлды жабу
Файл жазылғаннан кейін, ВХ регистріне файлдық нөмер орнатылады, ал DOS 3еһ функциясы пайдалынылатын файлды жабады. Бұл амал қалған барлық деректерді буферден дискіге жазып, тақырып пен FAT кестесін дұрыстайды.
Mov ah, 3eh ;файлды жазуға сұраныс
Mov bx, handle1 ;файлдық нөмер
Int 21h
Дискілік файлды оқу
3dh: файлды ашу
Бул амал файлдың атын мен дискідегі орнын тексереді. Ашу кезінде dx регистрінде – қажетті ASCIIZ – жолдың адресі болу керек, ал AL – регистрінде қатынау коды:
0 енгізу үшін файлды ашу
1 шығару үшін үшін файлды ашу
2 енгізу-шығару үшін файлды ашу
Мысал:
Mov ah, 3dh ;файлды ашуға сұрату
Mov al, 00 ;тек қана оқу
Lea dx, pathnm1 ; ASCIIZ – жолы
Int 21h
Jc error4 ;қате бойынша шығу
Mov handle2, ax ;нөмерді сақтау
Әдебиеті:
1 В. Юров, С. Хорошенко "Ассемблер". - С-П: "ПитерКом", 1999.
2 К. Г. Финогенов "Самоучитель по системным функциям MS-DOS".- М.:
"Радио и связь", 1995.
Бақылау сұрақтары:
1 Файлдармен жұмыс қалай ұйымдастырылады?
2 DOS-та каталогтардың қандай құрылымы қолданылады?
Тақырыбы 12 Клавиатура терминалынан информация енгізу.
Мақсаты: Ассемблер тілінде клавиатура терминалымен жұмысты
таныстыру.
Дәріс сұрақтары:
1. Клавиатура үзілімдерін өңдейтін жүйелік процедуралар.
2. Клавиатурадан деректі енгізу үшін қолданылатын жүйелік құралдар.
1. Компьютермен жұмыс жасағасын қолданушыға клавиатура арқылы командалар мен мәліметтерді енгізу керек. Клавиатураның жұмысын арнайы элетронды схема – клавиатура контроллері басқарады.
Клавиатура 3 негізгі клавишалар типтерден тұрады:
1) символдық (А-дан Z-қа дейін), 0-9, %, $, # және т.б.
2) функционалдық клавишалар (HOME, END, RETURN, DEL, INS, PgUp,
PgDown F1-F12)
3) Басқару клавишалары: Alt, CTRL, SHIFT
Оның қызметіне келесі жұмыстар кіреді: басылған клавишаны тану, оған бекітілген кодты өзінің шығу регистріне (порт) орналастыру (әдетте, 60h). Клавиша коды және порт скан-код деп аталады (реттік нөмері).
Әр клавишаның жеке скан-коды бар (1(Esc)-83(del)) немесе (01h-53h).
2. Операциялық жүйе клавиатурамен енгізудің бірнеше тәсілдерімен қамтамасыз етеді:
- DOS INT 21h үзілімнің 3Fh функциясы арқылы клавиатураға файлға сияқты қатынау;
- әр түрлі режимде 1..Сһ аралығында DOS INT 21h үзілімнің функцияларының көмегімен символ бойынша клавиатураға енгізу.
Особая ситуация возникает, если попытаться ввести больше символов, чем затребовано функцией 3Fh. В процессе выполнения этой функции все вводимые символы тут же извлекаются из кольцевого буфера ввода и пересылаются в буфер DOS. Обнаружив во входном потоке коды клавиши , DOS пересылает из этого буфера в буфер пользователя в программе точно затребованное число символов. Остальные символы остаются в буфере DOS, готовые к вводу. Фактически, если не принять специальных мер к очистке буфера, они поступят в программу при очередном запросе 3Fh, даже если оператор еще не начал вводить очередную порцию данных. Очевидно, что в этом случае будет нарушена синхронизация хода выполнения программы с работой оператора.
Клавиатурадан енгізу үшін INT 21h үзілімнің жеті функциясын пайдалануға болады:
0lh – эхомен символды енгізу;
06h – консольдің көмегімен тікелей енгізу-шығару;
07h – эхосыз және Ctrl/C өңдеусіз символды енгізу;
08h – эхосыз және Ctrl/C өңдеуімен символды енгізу;
0Ah – эхомен жолды буферлеп енгізу;
0Bh – стандартты құрылғы енгізудің қалыпын тексеру;
0Сh – ішкі буферді тастап енгізу.
Достарыңызбен бөлісу: |