Шартқа байланысты компиляция директивалары

Берілген директивалар программалық код фрагменттерін таңдау арқылы трансляциялауды ұйымдастыру үшін қолданылады. Мұндай таңдау копиляциясы макроанықтағыштағы барлық жолдар макрокеңейтуге кірмейтіндігін білдіреді, оларды шартқа байланысты орындайды. Ал нақты қандай шартар болатындығы шартты директива типімен анықталады.

Барлығы мұндай шартты компиляция директиваларының 10 типі кездеседі:

- IF және IFE директивалары — логикалық өрнекті есептеу нәтижесіне байланысты шартты трансляция.

- IFDEF және IFNDEF директивалары— символдық атын анықтау фактіне байланысты шартты трансляция.

- IFB және IFNB директивасы— макрокоманданы шақыру кезінде нақты аргументті анықтау фактіне байланысты шартты трансляция.

- IFIDN, IFIDNI, IFDIF және IFDIFI директивалары— жолдар символын салыстыру нәтижесіне байланысты шартты трансляция.

Шартқа байланысты компиляция директиваларының жалпы синтаксисі келесі құрамдағы синтаксистік конструкцияда берілген:

IFxxx логикалық_өрнек_немесе_аргумент

программа_1_фрагменті

ELSE

программа_2_фрагменті

ENDIF

Негізгі әдебиеттер: 2[12-20]; 3[10-43]

Бақылау сұрақтары:

1. Объектілік модуль объектілік модулдер кітапханасына қалай қосылады?

2. Макрокоманда қызметі?

3. Қайталау макродирективалары қалай қолданылады?

4. Шартты копиляция макродирективаларын атаңыз?

Дәріс № 12. MS DOS үшін программалау негізі

Қолданбалы программаларда жүйелік функцияларды қолдану

 

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> және т.б. басқыштарының күйін анықтау үшін қолданылады.

 

Негізгі әдебиеттер: 2[12-20]; 3[10-43]

Бақылау сұрақтары:

1. Пернетақтадан енгізу үшін DOS функциялары

2. Пернетақтадан енгізу үшін BIOS функциялары

3. Экранға бейнесін шығармай пернетақтадан енгізу функцияларын атаңыз?

 

Дәріс № 13. Файлдармен жұмыс

 

Ашық файлға қатынау (файл түрін өзгерту жазу, оқу және т.б.) оған меншіктелген дескриптордың көмегімен орындалады; ашыдмаған файлдың дескрипторы болмайды және жүйе онымен жұмыс жасамайды. Соңында, файл жабылған кезде ол файлдың түсінік блогымен қоса оның дескриторын босатады.

Файлдармен жүргізілетін операциялар декрипторларды қолданады (файлдық индекстер, файлдық түсініктер).

Файлға қатынау процедурасы жалпы жағдайда келесі операциялармен орындалады:

Көсетілген каталогтан берілген аты бойынша файл құру немесе егер ол бұрын құрылған болса файлды ашу;

Файлдың барлық құрамын немесе бір бөлігін файлға жазу немесе оқу;

Файлды жабу.

Ашылған файлға қатынау (жазу, оқу, файл мазмұнын өзгерту және т.б.) оған меншіктелгн дескриптор арқылы жүзеге асады; ал әлі ашылмаған файлдың дескрипторы болмайды және жүйе онымен жұмыс жасамайды. Сонымен файлды жабу кезінде оған бөлінген файлдың түсінік блогы дескрипторымен бірге босатылады.

DOS файлдық функцияларын дескриптор арқылы оқуға және жазуға болатын болғандықтан, оларды компьютердің стандартты құрылғылары арқылы енгізу және шығаруға да қолдануға болады. Ол стандартты құрылғылармен жұмыс жасау үшін DOS алдан ала анықталған бес дескрипторды ұсынады:

0 – стандартты енгізу (CON);

1 – стандартты шығару (CON);

2 – стандартты қате (CON);

3 – стандартты көмекші порт ( AUX);

4 - стандартты принтер (PRN).

0 дескрипторын біз пернетақтадан енгізуге қолдануымызға болады, ал 1 немесе 2 дескрипторларын экранға шығару үшін қолдануға болады.

DOS функцияларының ішінде белгілі бір бағытта жұмыс жасау үшін, келесі файлдармен, каталогтармен және дискілермен операцияларды бөліп айтуға болады:.

1. Файлды құру, ашу және жабу.

3CH - файлды құру

5AH - уақытша файлды құру

5BH - жаңа файлды құру

3DH - файлды ашу

3EH - файлды жабу

68H - файлды дискіге жазып кету

41H - файлды жою

2. Деректерді жазу және оқу.

42H - нұсқағышты орнату

3FH - файлды оқу немесе құрылғыдан енгізу

40H - файлды жазу немесе құрылғыға шығару

3. Файлдың сипаттамасын өзгерту.

43H - файлдың атрибутын алу және орнату

56H - файлға басқа ат беру

57H - файлдан құрылған уақыт пен күнін алу немесе орнату.

4.Файлды іздеу:

1Ah – деректерді беру аймағының адресін орнату (DTA);

2Fh - деректерді беру аймағының адресін алу (DTA);

4Eh – бірінші файлды табу;

4Fh – келесі файлды табу.

5.Операции над каталогами:

39h – каталог құру;

3Ah – каталогты жою;

3Bh – ағымдағы каталогты ауыстыру;

47h – ағымдағы каталогты алу;

6.Операции над дисками:

19h – ағымдағы дискті алу;

0Eh – ағымдағы дискті өзгерту;

36h - диск жайында ақпарат алу.

3CH пен 5BH функциясы файлды берілген спецификациямен құруға мүмкіндік береді. Файл спецификациясы, яғни файлдың аты мен оның кеңейтілуі символдық жол түрінде көрсетіледі және екілік нөлмен аяқталады ("ASCIIZ жолдар"). Бұл жолдар адресі DS:DX регистріне орнатылады. СХ регистрінде құрылатын файл атрибутының коды беріледі: 0 – атрибуты жоқ, 1 – тек оқу үшін, 2 - жасырын, 4 - жүйелік, 8 – том таңбасы, 20h – архив атрибуты. Сонымен бұл функциялардың көмегімен "шын" файл, том таңбасын (дискінің түпкі каталогынан) және т.б. құруға болады. АХ регистріне құрылған файл дескрипторы қайтарылады, оны сосын жазу не оқу үшін қолдануға болады. Бұл функциялардың айырмашылығы: 3CH функциясы бар файлды жояды да және осы атпен жаңа файл құрады, ал 5BH функциясы - егер осындай аты бар файл болса, онда CF=1 болып бітеді.

5Ah функциясы уақытша файл құру үшін қолданылады, оған атты (ағымдаға уақыт функциясы болып табылатын) жүйе береді. DS:DX регистрлерінде ASCIIZ жол түрінде файл жолының адресі көрсетіледі (файл аты емес!), оның соңында 13 бос байт орын қалуы тиіс, DOS онда екілік нөлмен бітетін құрылып отырған файл аты мен қисық сызық (/) белгісін орналастырады. Керек болса файлға том таңбасынан басқа кез-келген атрибутты беруге болады.

Әдетте уақытша файл программа жұмысы аяқталар алдында бітеді, бірақ оны программалаушы өзі жасауы керек (автоматты түрде файл жойылмайды). Уақытша құрылған файлға жазу үшін дескрипторды қолданған дұрыс, ол 5Ah функциясымен АХ регистріне қайтарылады.

Әрбір ашылған файл үшін DOS көрсеткіш құрады, онда деректерді жазу және оқу орындалатын файлдағы байттың салыстырмалы нөмірі көрсетіледі. Жаңадан ашылған немесе жаңа ғана құрылған файлдың көрсеткіші жүйемен файлдың басына орналастырылады, ал жазу немесе оқу функциялары оны жазылған немесе оқылған байтар санына ығыстырады. Сонымен, жазу немесе оқу функцияларын қатйдан қолдану фалға тізбектей қатынауды таратады. Файлдың кез-келген жеріне тікелей қатынау үшін 42h функциясын пайдалануға болады, ол файлдың көсеткіші орналасқан жерін салыстырмалы түрде, файлдың басын ( ол үшін AL =0 деп беру керек), файлдың соңын (AL =2) немесе көрсеткіштің ағамдағы орнын (AL =1) көрсетіп бере алады. Көрсеткіштің ығысуының өз мәні (таңбасы бар) СХ (үлкен бөлігі) DX (кіші бөлігі) регистрлеріне орналастырылады.

3Fh және 40h функциялары файлдан немесе құрылғыдан оқу үшін (3Fh функциясы) және файлға немесе құрылғыға жазу үшін (40h функциясы) қолданылады. Функцияны шақырудан бұрын BX регистріне дескриптор орналастырылады, СХ регистріне – оқылатын немесе жазылатын байттар саны орналасады, ал DS:DX регистрлері – пайдаланушы программасындағы буфер адресін көсетеді.

Кейде кейбір каталогтарда орналасқан белгілі бір шартқа байланысты операцияларды орындайтын барлық файлдарды табу керек жағдайы туады (мысалы, .TXT кеңейтуіндегі немесе кеңейтуі маңызды емес EXAMPLE аты кездесетін барлық файлдарды табу керек болса), онда бұл файлдарды іздеу операциялары 4Eh (бірінші файлды табу) функциясы және 4Fh (келесі файлды табу ) функциясы арқылы жүзеге асады. Оларды қолдану үшін 1Ah функциясының көмегімен программада өлшемі 43 байттан кем болмайтын деректерді беру аймағын (Disk transfer area, DTA) ұйымдастыру керек, әйтпесе 2Fh функциясының көмегімен DOS арқылы құрылған деректерді беру аймағын алу керек. DOS DTA ретінде 80h байтынан бастап соңына дейін PSP аймағын қолданады. DOS DTA табылған файл жайындағы ақпараттарды орналастырады (атрибуты, құрылған күні мен уақыты, өлшемі және т.б.). DTA –ның 1Eh… 2Ah байттарында ASCIIZ жолдары түрінде көрсетілген файлдың аты мен кеңейтуі орналасады.

Белгілі бір операцияға байланысты файлдарды іздеу үшін бірінші 4Eh функциясы орындалады. DS:DX регистрлеріне қаралатын каталог жолымен берілген ASCIIZ жолының адресі орналасады, СХ регистріне – ізделетін файл атрибутының операциясының коды орналасады. 0 "қалыпты" файл, яғни атрибуты жоқ файл, 1 – тек оқу үшін, 2 - жасырын, 4 - жүйелік, 8 – том таңбасы, 10h - каталог, 20h – архивтеу атрибуты. Егер іздеу атрибуттары берілсе, онда қалыпты файлдарда және атрибуты берілген файлдарда ізделеді. Функция дұрыс орындалған жағдайда CF = 0 қайтарылады, ал файлдың аты мен кеңейтілуі ASCIIZ жолдарымен DTA –ның 1Eh… 2Ah байттарына орналастырылады. Файлдың атын алып болғасын, оны 3Dh функциясының көмегімен ашып көруге болады және әрі қарай басқа операциялар орындауға болады (оқу, жазу және т.б.).

Берілген операцияларды қанағаттандыратын келесі файлдарды іздеу үшін 4Fh функциясын қолдану керек, ол да 4Eh бірінші файлды іздеу функциясы сияқты қолданылады. Керек болған жағдайда 4Fh функциясын бірнеше рет қайталауға болады, CF=1 көрсеткенге дейін, яғни берілген операцияларды қанағаттандыратын файлдар бітті екендігін білдіреді.

 

Негізгі әдебиеттер: 2[12-20]; 3[10-43]

Бақылау сұрақтары:

1. Стандартты дескриптор құрылғыларын атаңыз?

2. Қандай файлдармен жұмыс функциялары орындалған кезде ОЖ дескрипторды (логикалық нөмір) файлға жүктемелейді?

3. Файлды құру функциясын шақырған кезде файл аты қандай форматта беріледі?

4. Файлдармен жұмыс үшін қолданылатын DOS функциялары.

5. Каталогтармен жұмыс үшін қолданылатын DOS функциялары.

 








Дата добавления: 2015-10-26; просмотров: 1602;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.039 сек.