Тақырыбы: Логикалық амалдар.
Жоспары:
1. Логикалық амалдар.
Алдынғы процедурада біз -ші екі цифралы 16-лық санды енгіздік. Енді екі сифралы сол санды белгілеп енгізу керек. Бұл жерде біз білеміз қалай 0-ге теңдеу керек, алдынғы (әлі жылжымаған) санды үлкен 4 Bit-ti, DL кіші төрт Bit-ке теңестіріп қалдырамыз. Үлкен 4- Bit инструкция арқылы 0-ге тең болады. AND атты (логикалық “И”) бұл инструкция логикалық инструкцияға келеді. Олар өзінің басын формальді логикадан алады. Формальді логика туралы айта кетсен “А-истина егер “В“ –да “С” – да истина болады”. Егео немесе В және С жалған болса онда А-да жалған болады.Егер біз осы анықтаманыалсаң “ақиқат” орнына бір қойсақ 0-ді жалған орнына қойсақ онда әр түрлі комбинацияларға А,В және С біз “ақиқат” кестесін құра аламыз. АND операциясына “ақиқат” кестесі 2- Bit туындысы келтірілген.
AND FT AND 01
F FT 0 00
T FT 01
Сол жақта және жоғарыда 2- Bit-тің мағынасы келтірілген жауабы кестеде көрсетілген. Мысалы: Сіздер көріп түрсыздар “OAND1” 0-ге береді, AND инструкциясы байттармен және сөздермен жұмыс істейді. AND операциясы бірдей орналасқан Bit-терге әр Bit-қа немесе сөзге орындалады. Мысалы: “AND BL, CL” AND операциясын орындайды. 1-ші 0- Bit пен BL және CL регистрі одан соң 1- Bit, 2- Bit т.с. жауабын BL орнатады.
Мысалы: 2-лік түрде көрейік.
1011 0101
0111 0110
AND 0011 0100
AND операциясын орындай отырып OFR және 1-санмен 0-ге тең дейміз. Сол саннын үлкен Bit-тің
1011 0101
0111 0110
AND 0011 0100
Бұл логиканы кіші программада қолданайық BL деп санды алатын кіші 16-лық санды белгілейді.
AND операциясын OFR ты орындай отырып үлкен 4- Bit термен содан-соң жауабын ASCIIсимволы сияқты етіп шығарады. Бұл программаның кодын 16-санды экранға шығарғанда көрдік. Бұл жерде жаңа инструкцияда. AND инструкциясы.
3985: 0100 В 402 MOV AH, 02
3985 : 0102 88DA MOV DL, BL
3985 : 0104 80E20F AND DL, OF
3985 : 0107 80C290 ADD DL, 30
3985 : 010A 80FAЗA CMD DL, 3A
3985: 010D 7СОЗ J L 0112
3985: 010F 80C207 ADD DL,07
3985: 0112 CD21 IMI 21
3985: 0114 CD20 IMI 20
Әр бөлімді программаны жинағаннан алдын 0-мен жұмыс істеп көрейік, К, BL-ге 2-лік 16-лық санды енгізе сіздер оң жақтағы 16-лық санды көре аласыздар BL ригистіріне енген.
Әдебиеттер:
-
Язык ассемблера для IBM PC автор П. Нортон, Д. Соухэ Москва 1993
2. Assembler автор В. Юров Москва 2001
Лекция19-20.
Тақырыбы: Символдарды клавиатура жәрдемінде енгізу.
Жоспары:
-
Символдарды клавиатура жәржемінде енгізу.
-
Бір символды енгізу.
Оналтылық санау жүйеде байтті енгізуін біле, біз жұмысымызды тіке бастаймыз. Клавиатурадан оналтылық сандарды екі символ оқу және оларды бір байтқа ауыстыру.
Бір символды енгізу.
DOS- та “INT 21h” функциясын шақырамыз біз қолданып отырған функцияның номері 1, клавиатурадан енген символды оқиды. Функцияларды шақыру амалын өткенде, біз көрдік функцияның номері AH регистріне ену керек “INT 21h” шақырғаннан алдын. “INT 21h” функция 1 жұмыс істеп көрейік “INT21h” 0100h: адресіне енгізейік:
396F: 0100 CD21 INT21
Одаң соң 01h ті AH регистріне қойыңыз содаң соң “G102” немесе “Р” ендіріңіз бұл инструкцияны орындау үшін. Еш нәрсе болған жоқ? Тек жанып өшіп тұрған курсорды көріп тұрмыз. Бірақ DOS күтіп тұр сіз клавишаңызды басатыңызды (әзірше оны істемеңіз). Оны басқан кезде, DOS ASCII басқан клавиштін символының кодын сидырады AL регистрінде. Біз бұл инструкцияны оналтылықта символдарды оқу үшін қолданамыз, бірақ қазыр кез келге клавишаны басқанда не болатының көреміз.
F1 клавишін басып көрейік. DOS AL –ге 0 –ді қайтарады, және сіз нүктелі үтірді көресіз (“;”), дефистің алдында шыққан – Debug шақырады.
Осы болды. F1 әдейі ұзайтылып жиналған кодтармен клавиштерге жатады, оларды DOS клавиштерден бөлек істейді, кәдімгі ASCII символын көрсетеді. Бұл клавиштердің әр қайсысына DOS екі символ жібереді, бірін артынан біреуін. Бірінші келген символ әрдайым ноль болады, ол білдіреді, келесі символ скэн-код (scan code) әдейі клавиш.
Екі символды өқу үшін, “INT21h” екі рет орындау керек. Бірақ біздің мысалда біз бір символды оқимыз және скэн-кодті DOS-та қалдырамыз. Debug “G102” (немесе “Р”) команданың орындалуын бітсе, ол символдарды оқуға бастайды. Бұл жерде ол оқитын бірінші символ скэн-код болады F1 клавишінен қалған: 59 деген, ASCII кодының символы “;” болады.
Кейін біз Dskpatch программасын бастасақ, біз осы расширенный (ұзайтылған) қодтарды қолданамыз курсормен және функцияларды клавишпен жұмыс істеу үшін.
Әдебиеттер:
1. Язык ассемблера для IBM PC автор П. Нортон, Д. Соухэ Москва 1993
-
Assembler автор В. Юров Москва 2001
Лекция 21.
Тақырыбы: Бір және екі цифрадан тұратын оналтылық санау жүйесін салыстырып оқу.
Жоспары:
-
Бір цифрадан тұратын оналтылық санау жүйедегі санды оқу.
-
Екі цифрадан тұратын оналтылық санау жүйедегі санды оқу.
Біз санды ауыстыру жолын қолданайық, алдағы тақырыпта айтқандай, бір оналтылық цифрадан ASCII код символы шығу үшін 0-ден 9 және А –дан F диапазонында. Бір символды аударған кезде мысалы: С немесе D сияқты оналтылықтан байтқа, бұл саннан 30h алуымыз керек (0-ден 9-ға дейін), немесе 37h (А –дан F-ке дейін).
Төменде жай программа келтірілген бір ASCII- символын оқитын және оны бір байтқа ауыстыратын.
3985:0100 B401 MOV AH,01
3985:0102 CD21 INT 21
3985:0104 2C30 SUB AL,30
3985:0106 3C09 CMP AL,09
3985:0108 7E02 JLE 010C
3985:010A 2C07 SUB AL,07
3985:010C CD20 INT 20
Программаның көп инструкциясы бізге таныс, бірақ бір жақсысы бар JLE (қысқаша ағыл. “Jump if Less or Egual to” - өту, егер кіші немесе тең болса). Біздің программада бұл инструкция өтуді білдіреді, егер AL кіші немесе тең 9h болса.
ASCII- символынан оналтылық санау жүйеге өткенде не болып жатқаның көру үшін AL регистрінің мазмұның көру керек “INT 20h” орындаудан алдын. Debug бұл инструкцияны орындап болған соң регистрлерді қайтарады, бұл жерде тағы тоқтау нүктесін қолданамыз. “G10c” енгізіңіз сіздер көресіздер AL оналтылық сан символдан болған.
Бірнеше символ енгізіп көріңіз “к” сияқты немесе “d”, оналтылық цифра емес, сіз көресіз не болатының. Сіз түсінген шығарсыз бұл программа тек цифраларға 0 -ден 9-ға дейін және А-дан F –ке дейін.
Біз қалған жетіспеушіліктерді келесі тақырыпта өзгертеміз, подпрограмма немесе процедураны өткенде. Біз тура символды енгіземіз программа дұрыс жұмыс істеу үшін.
Екі онатылық цифраны оқу бір оналтылықты оқудан қиындау. Бірақ ол көп инструкцияны қажет етеді. Біз бірінші цифраны оқудан бастайық, одан кейін оның оналтылық санын жазайық DL регистрінде және оны 16-ға көбейтеміз. Бұл көбейтуді орындау үшін біз DL регистрін солға 4 битке жылжытамыз, оналтылық ноль болу үшін (төрт нөлден бит) цифрадан он жақта қазыр ғана оқыған. “SHL DL,GL” инструкция, CL регистрін қолдана төрт саны енген он жақтан сөздерді қойып орындайды. SHL инструкцияcы (ағылш. “Shi Lett”-логикалық жылжу солға), тағы арифметикалық жылжу сияқты көбейту екіге, төртке, сегізге и т.д. CL сапталған.
Біріншіні алып солға жылжуға цифра, біз екінші оналтылық цифра енгіземіз DL санына (=бірінші цифра *16).
Программамен жұмсыс істеп түсінесіз.
3985:0100 В401 MOV AH,OL
3985:0102 CD 21 INT 21
3985:0104 88C2 MOV DL,AL
3985:0106 80 EA30 SUB DL,30
3985:0109 80FA09 CMP DL,09
3985:010C 7E03 SLE 0111
3985:010E 80EA07 SUB DL,07
3985:0111 B104 MOV CL,04
3985:0113 D2E2 SNL DL,CL
3985:0115 CD21 INT 21
3985:0117 2C30 SUB AL,30
3985:0119 3C09 CMP AL,09
3985:011B 7E02 SLE 011F
3985:011D 2C07 SUB AL,07
3985:0121 CD 20 INT 20
Бізде жұмыс істеп тұрған программа бар, границалық шартты тексеріп, программамыз дұрыс істеп жатқанын көрейік. Бұл кезде 00, 09, 0А, 0Ғ, 90, А0, Ғ0 және басқада сандар.
Мысалы: 3C “INT 20h” иниструкциясын орындамай программаны қосу үшін точку
останова қолданайық. (оналтылық санды енгізу үшін тек бас әріпті қолданайық).
Әдебиеттер:
1. Язык ассемблера для IBM PC автор П. Нортон, Д. Соухэ Москва 1993
2.Assembler автор В. Юров Москва 2001
Лекция 22.
Тақырыбы: Процедуралар.
Жоспары:
1. Процедура туралы түсінік.
2. Процедуралар.
Процедура дегеніміз ол инструкция тізімі, оны біз программаның әр түрлі жерінен шақырсақ болады, бір инструкцияларды қайта-қайта қайталамай олар керек кезде. Бейсикте бұндай тізімді подпрограмалы дейді. Бірақ біз оны процедура дейміз, себебін кешірек білеміз.
Біздің процедураға кіріп шығуымыз тура Бейсиктегідей болады.
Біз процедураны CALL инструкциясы арқылы шақырамыз, Бейсикте GOSUB операторы сияқты, ал процедурадан шығу RET инструкциясы арқылы, Бейсикте RETURN операторы сияқты жұмыс істейді.
Мына программа Бейсиктегі жай программа, бұны біз машина тіліне көшіреміз. Бұл программа подпрограмманы он рет шақырады. Әр шыққанда бір символды шығарады “А” бастап “J” бітеді.
10 A= $ H41 ASCII для “A”
20 FOR I=1 TO 10
30 COSUB 1000
40 NEXT I
50 END
1000 PRINT CHR $ (A);
1100 A=A+1
1200 RETURN
Подпрограмма Бейсіктегідей 1000 қатардан басталады, основной программаға инструкция қосуға жай қалдырады, подпрограммаға тимей. Біз процедурамен тура соны істейміз машиналық тілде жазылған 200h адресіне сиғызып, основной программалардан ары, 100h адресінен басталатын. Тағыда біз “GOSUB 1000” “CALL 200h” инструкциясына ауыстырамыз, процедураны 200h жадтағы ұяшықтан шақырады.
Бейсиктегі FOR-NEXT циклдің орнына алдағы айтқандай біз LOOP инструкциясын жазамыз. Программаның қалған бөлімі сізге таныс болуы керек.
3985 : 0100 В401 MOV DL,41
3985 : 0102 B90A00 MOV EX,000A
3985 : 0105 F8F800 CALL 0200
3985 : 0108 E2FB LOOP 0105
3985 : 010A CD20 INT 20
Бірінші инструкция 41h(ASCII-код “А”) Dl регістерінде орналасқан. “INT 21h” инструкциясы символды енгізеді. ASCII кодымен DL-де берілге.
“INT 21h” инструкциясының өзі әргерек орналасқан процедура 200h адресінде.
Мына процедураны 200h адресінде енгізу керек.
3985 : 0200 В402 MOV AH,02
3985 : 0202 СD21 INT 21
3985 : 0204 FEC2 INC DL
3985 : 0206 CE RET
Бұл жерде екі жаңа және екі ескі инструкция көрсетілген. Естерінізге саламыз, 02h AH регістерінде DOS-қа мәлімдейді DL-де символді енгізуі қажет екенің “INT 21h” инструкциясын орындағанда. “INС DL” инструкциясы біріншісі екі жаңаның, DL регістірін бірге үлкейтеді, демек DL-ге берді қосады.Жаңа инструкция екіншісі RET инструкциясы (LOOP) инструкциясына қайтарады CALL-дан кейінгі основной программаға.
“G” енгізіңіз жауабын көру үшін, одан кейін оны орындап көріңіз оның қалай жұмыс істегенің көру үшін. Естеріңізден шықпасын точку останова немесе “Р” командасын қолдану “INT 21h” инструкциясын қосу үшін.
0105 : CALL 0200
0108 : LOOP 0105
0200 : MOV AH,02
0202 : INT 21
0204 : INC DL
0206 : RET
СALL және RET инструкциясы.
Әдебиеттер:
1. Язык ассемблера для IBM PC автор П. Нортон, Д. Соухэ Москва 1993
2.Assembler автор В. Юров Москва 2001
Достарыңызбен бөлісу: |