«ЖҮйелік бағдарламалау» ПӘнінің ОҚу -әдістемелік кешені



бет2/3
Дата14.06.2016
өлшемі0.56 Mb.
#135100
1   2   3

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 – ішкі буферді тастап енгізу.



Достарыңызбен бөлісу:
1   2   3




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет