КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
дәріс. Корытынды.Ассемблер тілінде бағдарламаларды құрылымды жобалаудың негізгі принципте-рі.⇐ ПредыдущаяСтр 18 из 18 Қолданбалы программаларда жүйелік функцияларды қолдану.DOS және BІOS функцияларына қатынас құру программалық үзу командаларының көмегімен орындалады (ІNT командасы). ІBM PC типіндегі машиналардың үзу жүйесінің басқа жүйден айырмашылығы болмайды. Жедел жадының 0000h-тан 03FFh-қа дейін бастапқы төртбайттық аймақтарының адресі үзу векторларына бөлінеді – онда үзулерді өңдеу программаларының (ҮӨП) адресі сақталады. Әрбір вектордың екі үлкен байтына ҮӨП сегменттік адресі жазылады, ал екі кіші байтқа – сегменттегі ҮӨП кіріс нүктесінің салыстырмалы адресі жазылады. Векторлар, оларға сәйкес үзулер сияқты, нөмерлерден тұрады, оларды типтер деп атаймыз, мысалы, 0 нөмірдегі вектор (0 типтегі вектор) 0 адрестен басталады, 1 типтегі вектор - 4 адрестен басталады, 2 типтегі вектор – 8 адрестен басталады т.б.с.с. Сонымен N нөміріндегі вектор, Nä4 –ден Nä4+3-ке дейін жады байттарында орын алады. Барлығы вектор үшін жады аймағында 256 вектор орын бөлінген. Қолданбалы программадан жүйелік функцияға қатынау біркелкі орындалады. AH регистріне функция нөмірі орналастырылады (үзу типімен ауыстырып алмаңыз!), ал басқа регистрлерге – керекті жүйелік программаны орындауға арналған деректер орналастырылады. Бұдан кейін сандық аргументі бар INT командасы орындалады, мұнда үзу типі (нөмері) орналасады, мысалы, INT 21h. DOS функцияларының көбі және BIOS функцияларының көбі CF тасымал белгісінде аяқтау кодын қайтарады. Егер функция дұрыс орындалса онда, CF=0, ал қате болса CF=1. Соңғы жағдайда регистрлердің бірінде (көпінесе АХ) қате коды қайтарылады. Сонымен, жүйелік құралдарға қатынаудың қарапайым процедурасы келесідегі түрде болады: mov AH,func ; func – функция нөмірі ; Регистрлерді толтыру (AL, BX, ES, BP және т.б.) ; берілген функцияны орындау үшін параметрлер … int 21h ;MS-DOS өту jc error ; Жол бірден орындалады ; DOS қайтқасын ; Программа жалғасы … error cmp AX,1 ;Аяқтау кодының анализі je err1 cmp AX2 je err2 … BIOS функциялары да осылай шақырылады. Пернетақтадан деректерді енгізу жүйелік құралдары.Операциялық жүйе пернетақтадан деректерді енгізудің бірнеше әдістерін ұсынады: - пернетақтаға, файлға қатынағандай қатынас құру, DOS-тың INT 21h үзуінің 3Fh функциясы; -DOS INT 21h -тағы 1…Ch –қа дейінгі функциялар тобын қолдану, пернетақтадан әртүрлі режимде бір символдап енгізуді орындайды; - бір символдап енгізуді DOS арқыле емес, BIOS драйверлері арқылы орындау, INT 16h үзуінің көмегімен орындалады. Файлдық жүйе (INT 21h, 3Fh функциясы) құралдарымен пернетақтадан енгізу, файлдан оқумен бірдей орындалады. Әдетте алдын ала анықталған, стандартты енгізу құралына бекітілген (үнсіздікпен пернетақта алынады) 0 дескриптор қолданылады. Енгізілетін символдар саны СХ регистрінде көрсетіледі, бірақ енгізу қанша символ енгізілгенге байланысты емес <Enter> басқышы басылған кезде ғана тоқтатылады. Сондықтан симводарды енгізген кезде алдын ала ұзындығын көрсетпесе де болады. Кез-келген жағдайда АХ регистріне нақты енгізілген символдардың саны қайтарылады, бұл кезде екі байт (0Аh және 0Dh) <Enter> басқышының да саны есептелінеді Программаға пернетақтадан деректерді енгізудің екінші әдісі, DOS-тың 1…Ch дейінгі функцияларының көмегімен орындалады. Енгізу үшін INT 21h үзуінің жеті функциясын қолдануға болады: 01h – символды бейнесімен шығару; 06h – тікелей енгізу – консоль арқылы шығару; 07h – символды бейнесіз енгізу және Ctrl/C тексерілмейді; 08h – символды бейнесіз енгізу және Ctrl/C тексеріледі; 0Аh – буфер арқылы бейнесі бар жолды енгізу; 0Bh – стандартты құрылғы күйін тексеру; 0Ch – кіріс буферін тазарту және енгізу. 01h, 06h, 07h және 08h функциялары программадаға әрбір шақыру сайын бір символды енгізеді; символдар тобын (жол) енгізу үшін функция циклды қолдану керек. Бұл фунцкциялар символды бейнелейді немесе бейнелемейдімен ерекшеленеді, сондай-ақ < Ctrl> /C басқыштарының тексерілуіне не тексерілмеуіне байланысты болады. 01h және 0Аh функциялары енгізілген символдарды экранға шығарады (эхо); 07h және 08h функциялары бұны жасамайды, бұл командалар жасырын деректерді енгізуге мүмкіндік береді ( мысалы, пароль немесе кілт). Бұл функциялардың екінші маңызды ерекшелікгі ол < Ctrl> /C басқыштарының тексерілуіне не тексерілмеуіне байланысты. 01h және 08h функцияларының орындалуы кезінде DOS әрбір енгізілген символды тексереді, кіріс ағымында < Ctrl> /C (03 h) кодын көрген кезде, программа жұмысын апатты түрде тоқтатады. 06h және 07h функциялары бұл кодты < Ctrl> /C программаға оған ешқандай әрекет жасамай жібереді. Бұл әдіс қолданбалы программалармен программаны аяқтамастан бұрын қандай да бір программалық әрекет жасау керек болса қолданылады ( буферді дискке орналастыру, файлдар модификациясы және т.б.). Мұндай < Ctrl> /C тексеретін программаларды DOS құралдарымен орындау мүмкін емес. 0Аh функциясы пайдаланушы буферіне пернетақтадан енгізілген жолды орналастырады; жол <Enter> басқышымен аяқталуы керек. Жол ұзындығы 254 символға дейін болуы мүмкін. Енгізілген символдар экранда бейнеленеді; < Ctrl> /C басқыштарының басылуы программа жұмысын апатты аяқтауға мәжбүр етеді. 0Bh функциясы енгізілетін күтіліп тұрған символдардың буферде болуын тексеруді орныдайды. Егер олар бар болса, онда енгізу функцияларының бірімен оны шығаруды орындайды, егер ол болмаса, онда программа орындалуын ары қарай жалғастырады. 0Bh функциясы < Ctrl> /C тексереді. 0Ch функциясы алдын ала буферді тазалап барып енгізуді орындайды. Барлық функциялар, 0Ch басқа, барлық бұрын жиналған символдармен қоса шығарады. 0Ch функциясы ғана бірінші тазалап барып сосын пернетақтадан енгізуді күтеді. Нәтижеде бұрын енгізілген басқыштардың кодтар (абайсызда) жоғалтылады. Сонымен енгізу режимі (бейнесіз немесе бейнемен және т.б.) (01h, 07h, 08h немесе 0Аh) 0Ch функциясының ішінде қолданылған функцияға байланысты болады. 01h, 07h, 08h және 0Аh функциялары синхронды болып табылады, яғни буферде символ болмаған жағдайда оның енгізілуін күтеді. 06h функциясы буфер күйін анықтау үшін немесе онда код болған жағдайда ол кодты шығарып оны өңдеу үшін, ал код болмаған жағдайда программаның орындалуын жалғастыру үшін қолданылады. 01h, 06h, 07h және 08h функциялары программаға кеңейтілген ASCII кодтарын енгізуге мүмкіндік береді. Ол үшін енгізілген ASCII код нөлге тең екендігін көрген кезде функцияны қайтадан орындау керек. Бұл қолданбалы программаларды функциональды басқыштар арқылы және <Alt>/ сан, <Alt>/ әріп және т.б. қосылыстарын бірге пайдалана отырып басқаруға мүмкіндік береді. BIOS (INT 16h) деңгейінде пернетақтамен жұмыс жасау. Яғни енгізу буферіне түсетін екібайттық кодтарды оқу (ASCII код + скен-код) және пернетақта сөзінің белгісін анализдеу (<Shift>, <Caps Lock> және т.б. басқыштарын басу) үшін қолданылады. Енгізу үшін келесі INT 16h үзуінің функциялары қолданылады: 00h – буферден екібайттық кодты оқу; 01h – пернетақта күйін және буферден шығармай екібайттық кодты оқу 02h – пернетақта белгісін оқу. 00h функциясы бір әрекеттен басылған бір басқыштың немесе бірнеше басқыштардың екібайттық кодын, соның ішінде олардың скен-кодын (кейбір программалар ASCIIкодты емес, скен-кодты сұрайды), және кеңейтілген ASCII кодын (функциональды басқыштар басылған кезде) ала алатын мүмкіндіктері қаралдған. 00h функциясы синхронды болып табылады: орындалу кезінде программа жұмысын белгілі бір басқыш басылғанға дейін күтеді. 01h функциясы асинхронды үзулер жолына жатады: пернетақта күйін анықтап болғаннан кейін (нақтырақ енгізу буферін), ол басқаруды программаға береді. Буфер күйі ZF белгісіне қайтарылады: егер буферде программаға енгізілетін символдар болса , онда ZF=0, егер буфер бос болса, онда ZF=1. Буферде символ коды орналасқан болса оны анализдеуге болады, өйткені ол функциямен AX (AH=скен-код, AL= ASCII код) регистріне қайтарылады. Бірақ есте сақтау керек, 01h функциясы екібайттық кодты АХ регистріне көшіреді, бұл кезед буфер тазартылмайды. Бұл функция арқылы символды алып кеткеннен кейін 00h функциясымен буферді тазалаған дұрыс. 02h функциясы – пернетақта белгілерін оқу – программаға белгілер сөзінің құрамын береді (417h ұяшық). Бұл функция скен-код деңгейінде жұмыс жасайтын программалармен <Shift>, <Caps Lock> және т.б. басқыштарының күйін анықтау үшін қолданылады. Негізгі әдебиеттер: 4[12-20]; 5[10-43] Бақылау сұрақтары: 1. Пернетақтадан енгізу үшін DOS функциялары 2. Пернетақтадан енгізу үшін BIOS функциялары 3. Экранға бейнесін шығармай пернетақтадан енгізу функцияларын атаңыз?
|