sya simvolom ASCII 0. V AL nado pomestit' kod dostupa, prichem 0 otkryvaet fajl dlya chteniya, 1 - dlya zapisi, a 2 - dlya chteniya/zapisi. Pri vozvrate AX budet soder- zhat' 16-bitnyj nomer fajla, po kotoromu fajl vposledstvii identi- ficiruetsya. Fajlovyj ukazatel' ustanavlivaetsya na nachalo fajla. Razmer zapisi ustanavlivaetsya ravnym 1 bajtu - eto svyazano s tem, chto operacii pryamogo dostupa pri ispol'zovanii metoda deskriptora fajla ne imeyut special'nyh buferov: na samom dele fajly s pryamym dostupom rassmatrivayutsya kak posledovatel'nye i s nimi rabotayut odni i te zhe funkcii. |ta funkciya pozvolyaet otkryvat' kak obych- nye, tak i spryatannye fajly. Pri vozvrate flag perenosa raven 0, esli fajl otkryt uspeshno. V protivnom sluchae flag perenosa usta- navlivaetsya, a AX soderzhit 2 - esli fajl ne najden, 4 - esli programma hochet otkryt' slishkom mnogo fajlov, 6 - pri oshibke na diske i 12 - esli nepravil'no ukazan kod dostupa v AL. Vot pri- mer: ;---v segmente dannyh PATH DB 'A:LEVEL1\FILENAME.EXT',0 ;---otkryvaem fajl dlya chteniya/zapisi MOV AH,3DH ;nomer funkcii MOV AL,2 ;otkryvaem dlya chteniya/zapisi LEA DX,PATH ;DS:DX ukazyvayut na put' INT 21H ;otkryvaem fajl JC OPEN_ERROR ;uhod na obrabotku oshibok MOV HANDLE,AX ;sohranyaem nomer fajla Funkciya 3EH preryvaniya 21H zakryvaet fajl, otkrytyj metodom deskriptora fajla. Nado prosto pomestit' nomer fajla v BX i vy- polnit' funkciyu. Pri vozvrate flag perenosa raven 0, esli vse v poryadke, inache on raven 1, a AX = 6, esli ukazan nevernyj nomer fajla. ;---zakrytie fajla MOV AH,3EH ;nomer funkcii MOV BX,HANDLE ;nomer fajla INT 21H ;zakryvaem fajl JC CLOSE_ERROR ;uhod na obrabotku oshibki Funkciya 45H preryvaniya 21H sozdaet vtoroj deskriptor fajla iz sushchestvuyushchego otkrytogo deskriptora. V BX dolzhen byt' ukazan sushchestvuyushchij nomer, a v AX budet vozvrashchen novyj. Funkciya 46H preryvaniya 21H svyazyvaet vtoroj deskriptor (pomeshchaemyj v CX) s otkrytym fajlom (nomer kotorogo v BX) takim obrazom, chto pervyj budet otnosit'sya k tomu zhe fajlu i ustrojstvu, chto i poslednij. 5.3.4 Pereimenovanie fajla; izmenenie pozicii fajla v kataloge. Pereimenovanie fajla mozhet zaklyuchat'sya lish' v izmenenii pervyh 11-ti simvolov elementa kataloga. Odnako v drevovidnom kataloge ves' element kataloga mozhet byt' perenesen v drugoj podkatalog, pereopredelyaya tem samym put' k fajlu. Odna komanda mozhet kak pereimenovat' fajl, tak i perenesti ego v drugoj katalog. Vysokij uroven'. V Bejsike fajl pereimenovyvaetsya komandoj NAME. S pomoshch'yu etoj komandy on mozhet byt' takzhe perenesen v drugoj katalog. Napishite snachala sushchestvuyushchee imya, a zatem novoe imya fajla, oba zaklyuchen- nye v kavychki, naprimer NAME "OLDFILE.EXT" AS "NEWFILE.EXT". V etom sluchae budet pereimenovan fajl v kornevom kataloge. Dlya izmeneniya imen fajlov, raspolozhennyh v podkatalogah, mogut byt' ispol'zovany puti k fajlu. Naprimer, NAME "B:LEVEL1\OLDFILE.EXT" AS "B:LEVEL1\NEWFILE.EXT" izmenyaet imya fajla v podkataloge LE- VEL1. Otmetim, chto dlya novogo imeni fajla dolzhen byt' ukazan polnyj put'. Esli Vy zapishete NAME "B:LEVEL1\OLDFILE.EXT" AS "NEWFI- LE.EXT", to fajl budet ne tol'ko pereimenovan, no i perenesen v kornevoj katalog. Dlya perenosa fajla iz odnogo podkataloga v drugoj bez izmeneniya ego imeni napishite komandu NAME "A:SUBDIR1- \OLDFILE.EXT" AS "A:SUBDIR2\OLDFILE.EXT". Takim metodom nel'zya perenesti fajl s diska na disk. Poskol'ku fajly, raspolozhennye v raznyh katalogah mogut imet' odno i to zhe imya, to vozmozhna oshibka pri popytke perenosa fajlov s odinakovymi imenami. V etom sluchae budet vozvrashchen kod oshibki 58 [5.4.8]. Srednij uroven'. MS DOS mozhet pereimenovyvat' fajly, ispol'zuya kak metod uprav- lyayushchego bloka fajla, tak i metod deskriptora fajla. Pervyj iz nih mozhet primenyat'sya tol'ko k fajlam, raspolozhennym v tekushchem kata- loge. Metod FCB: Ispol'zujte funkciyu 17H preryvaniya 21H. DS:DX dolzhny ukazyvat' na otkrytyj upravlyayushchij blok fajla. Pomestite novoe imya fajla v FCB, nachinaya so smeshcheniya 11H (eto "rezervnaya" oblast' bloka). Novoe imya mozhet ispol'zovat' simvol "?", v etom sluchae simvoly, nahodyashchiesya v etih poziciyah, ne budut izmenyat'sya. Pri vozvrate, esli novoe imya uzhe sushchestvovalo v kataloge, to AL budet ravno FF, inache AL = 0. V primere imya fajla ACCOUNTS.DAT menyaetsya na DEBTS.DAT. ;---v segmente dannyh FCB DB 'FILENAMEEXT',25 DUP(0) NEWNAME DB 'NEWNAME EXT', ;11 simvolov novogo imeni ;---pomeshchaem novoe imya fajla v peremennuyu NEWNAME MOV SI,OFFSET NEWNAME ;DS:SI ukazyvayut na novoe imya MOV AX,SEG FCB ;ES:DI ukazyvayut na FCB MOV ES,AX ; MOV DI,OFFSET FCB ; ADD DI,11H ;nachinaem so smeshcheniya 11H MOV CX,11 ;imya fajla soderzhit 11 simvolov REP MOVSB ;perenosim 11 bajtov LEA DX,FCB ;DS:DX ukazyvayut na FCB MOV AH,17H ;funkciya izmeneniya imeni INT 21H ;izmenyaem imya CMP AL,0FFH ;proverka na oshibku JE RENAME_ERROR ;uhod na obrabotku oshibki Metod deskriptora fajla: Funkciya 56H preryvaniya 21H pereimenovyvaet i peremeshchaet fajly. DS:DX dolzhny ukazyvat' na stroku, dayushchuyu put' i imya pereimenuemo- go fajla (do 63-h simvolov) i zavershayushchuyusya simvolom ASCII 0. ES:DI dolzhny ukazyvat' na vtoruyu stroku, kotoraya daet novye imya i put' fajla. Imena nakopitelej, esli oni prisutstvuyut, dolzhny sovpadat'. Esli puti razlichny, to fajl perenonositsya v drugoj podkatalog. CHtoby perenesti fajl bez pereimenovaniya nado vo vto- roj stroke ukazat' to zhe samoe imya, no drugoj put'. Pri vozvrate, esli proizoshla oshibka, to ustanavlivaetsya flag perenosa, a AX budet soderzhat' 3 - esli odin iz putej ne najden, 5 - pri oshibke na diske i 17 - pri popytke perenosa mezhdu raznymi nakopitelyami. V primere fajl ACCOUNTS.DAT perenositsya iz podkataloga GAINS v podkatalog LOSSES. ;---v segmente dannyh OLDPATH DB 'A:GAINS\ACCOUNTS.DAT',0 NEWPATH DB 'A:LOSSES\ACCOUNTS.DAT',0 ;---izmenenie puti fajla LEA DX,OLDPATH ;DS:DX ukazyvayut na staryj put' MOV AX,SEG NEWPATH ;ES:DI ukazyvayut na novyj put' MOV ES,AX ; MOV DI,OFFSET NEWPATH ; MOV AH,56H ;nomer funkcii INT 21H ;perenosim fajl JC ERROR_ROUTINE ;uhod na obrabotku oshibki 5.3.5 Podgotovka k fajlovym operaciyam. YAzyki vysokogo urovnya, takie kak Bejsik, vypolnyayut podgotovi- tel'nuyu rabotu dlya fajlovyh operacij avtomaticheski. Odnako prog- rammy na yazyke assemblera imeyut dostatochno raboty pered tem kak sozdat' ili otkryt' fajl. Trebovaniya otlichayutsya, v zavisimosti ot togo ispol'zuetsya li dlya dostupa k fajlu metod upravlyayushchego bloka fajla ili metod deskriptora fajla. Dlya oboih metodov Vam neobho- dimo stroku ili blok parametrov, ukazyvayushchih na fajl i bufer dlya perenosa dannyh. MS DOS predostavlyaet razlichnye nabory funkcij chteniya/zapisi dlya dvuh metodov. Srednij uroven'. Metod upravlyayushchego bloka fajla: |tot metod dostupa k fajlam trebuet, chtoby Vy sozdali blok parametrov, kotryj pervonachal'no dolzhen soderzhat' takuyu informa- ciyu, kotoraya pozvolyaet najti fajl v kataloge. Hotya FCB imeet mnogo polej, voobshche govorya, tol'ko nekotorye iz nih dolzhny byt' zapolneny; MS DOS zapolnyaet bol'shinstvo ostal'nyh polej informa- ciej posle togo, kak fajl otkryvaetsya. Otmetim, chto k nachalu FCB mozhet dobavlyat'sya special'noe pole dlya sozdaniya rasshirennogo FCB, kotoryj ob®yanyaetsya nizhe. Vot struktura FCB: Nakopitel' (DB) CHislo, opredelyayushchee na kakom nakopitele budet iskat'sya fajl, 1 = A, 2 = B i t.d. Esli ukazan 0, to beretsya nakopitel' po umolchaniyu, a zatem sistema zamenyaet 0 na kod etogo nakopitelya. Imya i rasshirenie Vos'mibajtnoe imya fajla, vyravnennoe po (11 bajtov) levomu krayu dolzhno byt' dopolneno probelami (ASCII 32), esli ono men'she 8 bajtov. To zhe otnositsya i k trehbajtnomu rasshireniyu. Mezhdu nimi ne dolzhna stoyat' tochka. Tekushchij blok (DW) DOS organizuet fajly blokami po 128 zapisej, pronumerovannyh ot 0 do 127. Naprimer, sis- tema rassmatrivaet zapis' #129 fajla pryamogo dostupa, kak zapis' #0 bloka #1 (otschet kak dlya zapisej, tak i dlya blokov vedetsya s 0). V fajlah net special'nyh ogranichitelej ni dlya blokov ni dlya zapisej. Vmesto etogo smeshchenie dlya blokov i zapisej vychislyaetsya ishodya iz dliny zapisi, kotoraya ustanavli- vaetsya sleduyushchim polem FCB. Razmer zapisi (DW) Vse funkcii MS DOS, svyazannye s chteniem ili zapis'yu v fajl, rabotayut v terminah zapisi. Dlya fajlov pryamogo dostupa vazhno, chtoby razmer zapisi byl ustanovlen ravnym razmeru zapisej, pomeshchennyh v fajl. Dlya posledova- tel'nyh fajlov razmer zapisi ne stol' vazhen, odnako malen'kij razmer zapisi budet zamed- lyat' diskovye operacii. Poskol'ku razmer sektora 512 bajtov, to optimal'nym yavlyaetsya razmer zapisi 512 bajtov. Sistema avtomati- cheski pomeshchaet znachenie po umolchaniyu 80H (128) v pole dliny zapisi pri otkrytii faj- la. Poetomu ne zabud'te ustanovit' eto pole posle otkrytiya fajla. Razmer fajla (DD) Razmer ukazyvaetsya s tochnost'yu do bajta. |to pole zapolnyaetsya sistemoj pri otkrytii faj- la. Data fajla (DW) Data zapisyvaetsya sistemoj pri otkrytii FCB. Ee format priveden v [5.2.5]. Tekushchaya zapis' (DB) Tekushchaya zapis' ispol'zuetsya sovmestno s polem tekushchego bloka. Zapisi numeruyutsya ot 0 do 127. Zapis' pryamogo dostupa #200, raspo- lozhennaya v bloke 1, imeet nomer tekushchej zapisi ravnyj 71 ((200 - 128) - 1). Nomer zapisi prya- Vmesto togo, chtoby trebovat' ot programmy, mogo dostupa (DD) chtoby ona vychislyala tekushchie znacheniya bloka i zapisi dlya fajla pryamogo dostupa, MS DOS delaet etu rabotu sama. Pri operaciyah s fajlami pryamogo dostupa prosto pomestite nomer zapisi v eto 4-hbajtnoe pole. Pri vypolnenii operacii s fajlom pryamogo dostupa MS DOS pomestit nuzhnye znacheniya v polya teku- shchego bloka i tekushchej zapisi. Pomnite, chto starshij bajt raspolozhen v starshej yachejke. Svyaz' mezhdu polyami tekushchej zapisi, tekushchego bloka i nomer zapisi pryamogo dostupa pokazana na ris. 5-3. Prostejshij put' sozdat' FCB kak peremennuyu v segmente dannyh programmy. Esli imya otkryvaemogo fajla ne menyaetsya, to eto imya mozhet byt' pryamo zapisano v eto pole. Ostatok bloka inicializi- rujte bajtami ASCII 0. Tol'ko posle togo kak FCB budet otkryt (s pomoshch'yu funkcii 0FH preryvaniya 21H, kak pokazano v [5.3.3]) Vy dolzhny zapisat' v blok ostal'nuyu informaciyu. Otmetim, chto FCB dlya raboty s prostym posledovatel'nym fajlom s dlinoj zapisi 128 bajtov ne trebuet dal'nejshih prigotovlenij. Posle sozdaniya FCB dal'nejshie operacii trebuyut, chtoby DS:DX ukazyvali na nego. Pros- tejshaya forma ego takaya: FCB DB 1,'FILENAMEEXT',25 DUP(0) Mozhno takzhe sozdat' FCB kak strukturu: FCB STRUC DRIVE_NUM DB 0 FILE_NAME DB 8 DUP(?) FILE_EXT DB 3 DUP(?) BLOCK_NUM DW 0 RECORD_SIZE DW 0 FILE_SIZE DD 0 FILE_DATE DW 0 RESERVED DB 10 DUP(0) CURRENT_REC DB 0 RANDOM_REC DD 0 FCB ENDS Pri takom podhode programme proshche pomeshchat' dannye v FCB, poskol'- ku metki sushchestvuyut dlya kazhdogo polya. V zavisimosti ot tipa faj- lovyh operacij na polya mogut nakladyvat'sya sleduyushchie ogranicheniya: 1. Dlya fajlov pryamogo dostupa Vy dolzhny ustanovit' razmer zapisi i nomer zapisi v pole zapisi pryamogo dostupa. 2. Dlya dostupa k posledovatel'nym fajlam s nachala Vy dolzhny ustanovit' tol'ko razmer zapisi, pri uslovii, chto Vy inicializi- rovali polya tekushchego bloka i tekushchej zapisi v 0 (prosto obnulite ves' FCB, za isklyucheniem imen nakopitelya i fajla). Pri otkrytii pole razmera zapisi budet ustanovleno ravnym 128, esli eto znache- nie ustarivaet Vas, to dal'nejshaya podgotovka ne nuzhna. 3. Dlya dostupa k posledovatel'nomu fajlu s serediny ili s konca Vy dolzhny ustanovit' polya tekushchego bloka i tekushchej zapisi (v etom sluchae Vasha programma dolzhna budet proizvodit' vychisleniya sama). Prefiks programmnogo segmenta [1.3.0] imeet dostatochno bol'shoe pole, chtoby soderzhat' upravlyayushchij blok fajla. |to prostranstvo predostavlyaetsya dlya kazhdoj programmy, poetomu ekonomno ispol'zo- vat' ego, osobenno v programmah tipa .COM. Pole FCB raspolozheno so smeshcheniem 5CH v prefikse programmnogo segmenta. V programmah COM ispol'zujte ORG dlya sozdaniya FCB sleduyushchim obrazom (zdes' pomechen takzhe ispol'zuemyj po umolchaniyu DTA, kotoryj budet obsuzh- dat'sya nizhe): ;---v nachale kodovogo segmenta ORG 5CH FCB LABEL BYTE DRIVE_NUM DB 0 FILE_NAME DB 8 DUP(?) FILE_EXT DB 3 DUP(?) BLOCK_NUM DW 0 RECORD_SIZE DW 0 FILE_SIZE DD 0 FILE_DATE DW 0 RESERVED DB 10 DUP(0) CURRENT_REC DB 0 RANDOM_REC DD 0 ORG 80H DTA LABEL BYTE ORG 100H ASSUME CS:CSEG, DS:DSEG, SS:SSEG ... Rasshirennyj FCB ispol'zuetsya dlya sozdaniya ili dostupa k fajlu, imeyushchemu special'nye atributy, naprimer, k spryatannomu fajlu ili fajlu tol'ko dlya chteniya. Razlichnye atributy ob®yasneny v [5.2.6]. Rasshirennyj FCB na 7 bajtov dlinnee, prichem eti 7 bajtov pred- shetsvuyut obychnomu bloku. Pervyj bajt raven FF, chto ukazyvaet na special'nyj status. Za nim sleduyut 5 bajtov ASCII 0, a zatem bajt atributov. Pri otkrytii fajla s ispol'zovaniem rasshirennogo FCB DS:DX dolzhny ukazyvat' na pervyj iz dopolnitel'nyh semi bajtov, a ne na imya nakopitelya, kak dlya obychnogo FCB. Vot obychnaya forma, gde 2 - znachenie bajta atributov, a 1 - ukazyvaet na nakopitel': FCB DB 0FFH, 5 DUP(0),2,1,'FILENAMEEXT',25 DUP(0) Metod deskriptora fajla: |tot metod trebuet men'shej podgotovki chem metod FCB. Dlya nego Vy dolzhny tol'ko sozdat' stroku, ukazyvayushchuyu put' k fajlu, takuyu kak v standartnyh komandah DOS. Naprimer B:COMPILE\UTILITY\PASCAL ukazyvaet na fajl PASCAL v podkataloge UTILITY. Stroka ogranichena dlinoj v 63 simvola, vklyuchaya imya nakopitelya. Pri otkrytii fajla (s ispol'zovaniem funkcii 3DH preryvaniya 21H - sm. [5.3.3]), DS:DX dolzhny ukazyvat' na pervyj bajt etoj stroki. Sistema vypol- nyaet vsyu rabotu po analizu stroki i nahozhdeniyu fajla, a posle togo kak fajl otkryt ona vozvrashchaet 16-bitnyj identifikacionnyj nomer fajla v AX. Ego nazyvayut nomerom fajla i on ispol'zuetsya vo vseh posleduyushchih operaciyah s etim fajlom. Bufera dannyh: Programma dolzhna ukazat' mesto v pamyati, kuda dolzhny pomeshchat'- sya prinimaemye dannye ili otkuda dolzhny brat'sya vyvodimye. |to prostranstvo v pamyati mozhet byt' vremennym buferom, kotoryj budet ispol'zovat'sya dannymi kak promezhutochnaya stanciya. Ili eto prost- ranstvo mozhet byt' imenno tem mestom, gde dannye real'no obraba- tyvayutsya. Obychno vremennyj bufer ustanavlivaetsya razmerom v odnu zapis' i byvaet udobno opisat' ego kak strokovuyu peremennuyu v segmente dannyh, kak eto sdelano v nizheprivedennom primere. S drugoj storony, bol'shie rabochie oblasti dannyh dolzhny rasprede- lyat'sya s pomoshch'yu metodov raspredeleniya pamyati, predostavlyaemyh operacionnoj sistemoj [1.3.1]. Ved' sozdanie, naprimer, oblasti dannyh razmerom v 10000 bajt v segmente dannyh sdelaet programmu na diske na 10000 bajt dlinnee, chto sovershenno nenuzhno. Bufer ispol'zuemyj metodom FCB dostupa k fajlam nazyvaetsya oblast'yu obmena s diskom ili DTA. Na etot bufer ukazyvaet slovnyj ukazatel', kotoryj hranitsya operacionnoj sistemoj i kotoryj mozhet byt' izmenen Vashej programmoj. V firmennoj dokumentacii etot ukazatel' na DTA chasto sam nazyvayut DTA. Poskol'ku ukazano tol'ko nachalo bufera, to nichto ne meshaet dannym zanyat' oblast' prilegayu- shchuyu k DTA, poetomu Vy sami dolzhny sledit', chtoby etogo ne proi- zoshlo. Ukazatel' na DTA ustanavlivaetsya special'noj funkciej DOS i posle togo kak on ustanovlen vse funkcii chteniya/zapisi avtoma- ticheski obrashchayutsya k nemu. |to oznachaet, chto sami funkcii ne dolzhny soderzhat' adres vremennogo bufera. Kogda DTA sovpadaet s oblast'yu dannyh, v kotoroj obrabatyvayut- sya dannye, to neobhodimo postoyanno menyat' DTA, s tem chtoby fajlo- vye operacii mogli poluchat' dostup k razlichnym fragmentam dannyh. Pri prostoj operacii posledovatel'nogo chteniya ili pri operacii chteniya odnogo bloka s pryamym dostupom sistema avtomaticheski pome- shchaet v DTA odnu zapis' za drugoj. Neobhodimo otvesti prostranst- vo, dostatochnoe dlya chisla zapisej, kotorye budut zatrebovany programmoj. DTA ne mozhet imet' razmery bol'she odnogo segmenta (64K). Dlya ustanovki ukazatelya na DTA ispol'zujte funkciyu 1AH prery- vaniya 21H. DS:DX dolzhny ukazyvat' na pervyj bajt DTA, a zatem nado vypolnit' funkciyu. |to vse chto nuzhno. Vot primer: ;---v segmente dannyh DTA 256 DUP (?) ;---ustanovka DTA LEA DX,DTA ;DS:DX ukazyvayut na DTA MOV AH,1AH ;funkciya ustanovki DTA INT 21H ;ustanovka DTA Funkciya 2FH preryvaniya 21H soobshchaet tekushchuyu ustanovku ukazate- lya DTA. U nee net vhodnyh registrov. Pri vozvrate ES:BX soderzhat segment i smeshchenie DTA. Prefiks programmnogo segmenta [1.3.0] obespechivaet kazhduyu programmu 128-bajtnym vstroennym DTA, nachinaya so smeshcheniya 80H i do 9FH. Vy mozhete ispol'zovat' ego pri nehvatke pamyati. Pervona- chal'no ukazatel' na DTA ukazyvaet imenno na etot bufer, poetomu esli Vy budete ispol'zovat' ego, to net nuzhdy ustanavlivat' uka- zatel'. |tot bufer po umolchaniyu osobenno udobno ispol'zovat' s COM fajlami, gde DS ukazyvaet na nachalo prefiksa programmnogo segmenta. Dlya fajlov EXE mozhet potrebovat'sya nebol'shoj dobavochnyj kod, chtoby ispol'zovat' DTA po umolchaniyu. Otmetim, chto dlya opre- deleniya tekushchej ustanovki ukazatelya na DTA Vy dolzhny ispol'zovat' funkciyu 2FH preryvaniya 21H. U nee net vhodnyh registrov, a pri vyhode ES:BX ukazyvayut na DTA. Ukazatel' na DTA ne ispol'zuetsya pri dostupe k fajlu metodom deskriptora fajla. Funkcii chteniya ili zapisi dannyh vsegda soder- zhat adres, po kotoromu raspolozhen bufer dannyh. Celikom na Vashej sovesti lezhit opredelenie togo, budut li dannye peredavat'sya cherez vremennyj bufer ili neposredstvenno v to mesto, gde oni budut ispol'zovat'sya. 5.3.6 Analiz informacii komandnoj stroki. Pri zapuske mnogie programmy pozvolyayut pol'zovatelyu pomestit' dobavlchnuyu informaciyu v komandnoj stroke, obychno ukazyvayushchuyu imya fajla, s kotorym programma budet rabotat'. |ta informaciya zapisy- vaetsya v 128-bajtnuyu oblast', nachinayushchuyusya so smeshcheniya 80H v prefikse programmnogo segmenta [1.3.0]. (|ta zhe oblast' ispol'- zuetsya kak DTA po umolchaniyu, kak obsuzhdalos' v [5.3.5].) Pervyj bajt soderzhit dlinu stroki, a zatem idet sama stroka. Dlya programm, ispol'zuyushchih metod deskriptora fajla dlya raboty s fajlami, imya fajla, vvodimoe v komandnoj stroke, dolzhno imet' adekvatnuyu formu. Trebuetsya, chtoby pol'zovatel' programmy ispol'- zoval standartnyj protokol MS DOS dlya stroki puti. S drugoj sto- rony, upravlyayushchij blok fajla trebuet, chtoby stroka vida 'A:ACCT.- BAK' byla preobrazovana k vidu 1,'ACCT BAK'. MS DOS imeet special'nuyu funkciyu, kotoraya vypolnyaet takoe preobrazovanie nad pervoj porciej informacii, sleduyushchej za imenem programmy v ko- mandnoj stroke. |ta procedura nazyvaetsya razborom stroki (par- sing). Srednij uroven'. Imya fajla dolzhno byt' pervoj informaciej, sleduyushchej za imenem zagruzhaemoj programmy. Ono dolzhno byt' otdeleno ot imeni program- my odnim iz sleduyushchih simvolov : . ; , = + tabulyaciej ili probe- lom. Konec imeni fajla dolzhen byt' ukazan odnim iz simvolov : . ; , = + \ < > | / " [ ] tabulyaciej, probelom ili odnim iz upravlyayu- shchih simvolov (kody ASCII ot 1 do 31). Funkciya 29H preryvaniya 21H proizvodit razbor imeni fajla. DS:SI dolzhny ukazyvat' na smeshchenie 81H v PSP. Pomnite, chto pri zagruzke programmy kak DS, tak i ES ukazyvayut na nachalo PSP. ES:DI dolzhny ukazyvat' na oblast' pamyati, kotoraya budet sluzhit' upravlyayushchim blokom dlya novogo fajla. Ustanovka bitov v AL oprede- lyaet kak budet vypolnyat'sya razborka. Imeyut znachenie tol'ko bity 0-3: bit 0 1 = nachal'nyj ogranichitel' ignoriruetsya 1 1 = bajt, identificiruyushchij nakopitel', ustanavlivaetsya v FCB, tol'ko esli on ukazan v komandnoj stroke 2 1 = imya fajla v FCB menyaetsya tol'ko esli komandnaya stroka soderzhit imya fajla 3 1 = rasshirenie fajla v FCB menyaetsya tol'ko esli koman- naya stroka soderzhit rasshirenie fajla Posle togo kak eta informaciya ustanovlena, programma mozhet vyzy- vat' funkciyu. Esli v komandnoj stroke ne ukazan nakopitel', to beretsya nakopitel' po umolchaniyu. Esli otsutstvuet rasshirenie fajla, to predpolagaetsya, chto ono probel'noe (ASCII 32). Esli v imeni fajla ukazana zvezdochka, to ona zamenyaetsya na nuzhnoe chislo voprositel'nyh znakov v pole imeni fajla FCB. AL vozvrashchaet 1, esli imya fajla soderzhit * ili ? i FF, esli ukazan nevernyj nako- pitel'. Pri vozvrate DS:SI ukazyvayut na pervyj simvol, sleduyushchij za imenem fajla, kotoroe nachinaetsya so smeshcheniya 81H. Dal'nejshaya informaciya, soderzhashchayasya v komandnoj stroke dolzhna rasshifrovy- vat'sya Vashej programmoj. ES:DI ukazyvayut na pervyj bajt vnov' sformirovannogo FCB. Esli v FCB ne sozdano dopustimogo imeni fajla, to soderzhimoe ES:[DI]+1 ravno probelu. Vot primer, kotoryj pomeshchaet kod v oblast' FCB v PSP, nachinaya so smeshcheniya 5CH: ;---razbiraem komandnuyu stroku, sozdavaya FCB so smeshcheniem 5CH ;---v PSP MOV AH,29H ; MOV SI,81H ; MOV DI,5CH ; MOV AL,1111B ; INT 21H ; MOV AL,ES:[DI]+1 ; CMP AL,32 ; JE ERROR_ROUTINE ; Razdel 4. CHtenie i zapis' fajla. Imeyutsya dva osnovnyh metoda dostupa k fajlu - posledovatel'nyj i pryamoj. Hotya v vychislitel'noj literature chasto ispol'zuyut ter- miny "posledovatel'nyj" fajl i fajl "pryamogo dostupa", sami po sebe fajly hranyatsya na diske odinakovo: kak nepreryvnaya posledo- vatel'nost' bajtov. Ni v kataloge ni v kakom-libo drugom meste net indikatora, ukazyvayushchego, chto dannyj fajl yavlyaetsya posledova- tel'nym ili fajlom pryamogo dostupa. Real'no eti dva tipa fajlov razlichayutsya po raspolozheniyu dannyh v nih i po metodu dostupa k nim. K lyubomu fajlu pryamogo dostupa mozhno poluchit' posledovatel'- nyj dostup, a k lyubomu posledovatel'nomu fajlu - pryamoj dostup, hotya redko imeyutsya prichiny delat' eto, osobenno vo vtorom sluchae. Posledovatel'nye fajly pomeshchayut elementy dannyh odin za dru- gim, nezavisimo ot ih dliny, razdelyaya eti elementy paroj simvo- lov, snachala vozvratom karetki (ASCII 13), a zatem perevodom stroki (ASCII 10). YAzyki vysokogo urovnya, takie kak Bejsik, vstavlyayut eti simvoly avtomaticheski, v to vremya kak programmy na assemblere dolzhny sami zabotit'sya o vstavke etih simvolov posle zapisi kazhdoj peremennoj v fajl. V posledovatel'nyh fajlah mogut hranit'sya kak chisla, tak i stroki. Stroki trebuyut po odnomu bajtu na kazhdyj simvol stroki. CHisla po soglasheniyu zapisyvayutsya v stro- kovom vide, hotya oni mogut pisat'sya i v chislovom vide. Takim obrazom Bejsik zapisyvaet znachenie "128" v vide stroki iz treh cifr, hotya programma na assemblere mozhet zapisat' eto chislo v vide dvuhbajtnogo celogo ili dazhe odnobajtnogo koda - vse oprede- lyaetsya tem, chto pri povtornom chtenii fajla programma dolzhna poni- mat' ispol'zuemyj format. Dlya somestimosti rekomenduetsya zapisy- vat' chisla v vide strok. Neobyazatel'no, chtoby kazhdoe chislo stroki bylo otdeleno paroj vozvrat karetki/perevod stroki, odnako esli eta para opushchena, to programma dolzhna obespechit' sposob otdeleniya dannyh. Naprimer, 10 celyh chisel mogut byt' zapisany kak 20-bajtnyj element dannyh. S drugoj storony, ochen' bol'shie elementy dannyh, takie kak paragra- fy teksta, mogut byt' razdeleny na neskol'ko elementov dannyh (standartnyj tekstovyj fajl predstavlyaet iz sebya dokument, razbi- tyj na stroki udobnogo razmera, zapisannye posledovatel'no). Poskol'ku elementy dannyh imeyut peremennuyu dlinu, to nevozmozhno uznat' gde v fajle raspolozhen opredelennyj element. Poetomu dlya togo chtoby najti nuzhnyj element programma dolzhna chitat' fajl, nachinaya s nachala i otschityvaya nuzhnoe chislo par vozvrat karet- ki/perevod stroki. Po etoj prichine fajly takogo formata nazyvayut posledovatel'nymi. Kak pravilo s diska v pamyat' peredaetsya ves' takoj fajl. Fajly pryamogo dostupa zaranee otvodyat fiksirovannoe mesto pod kazhdyj element dannyh. Esli kakoj-to element dannyh ne zanimaet vse otvedennoe prostranstvo, to ostatok zapolnyaetsya probelami. Esli kazhdyj element zanimaet 10 bajtov, to legko mozhno prosmot- ret' srazu 50-j element, poskol'ku mozhno vychislit' chto on nachi- naetsya s 491-go bajta fajla (t.e. s bajta #490, poskol'ku otschet nachinaetsya s 0). Kak pravilo svyazannyj nabor elementov gruppi- ruetsya v zapis'. Kazhdaya zapis' soderzhit neskol'ko polej, kotorye sozdayut nabor nomerov bajtov, nachinaya s kotoryh pishutsya dannye elementy. Naprimer, zapis' mozhet imet' polya vozrast, ves i rost. Sootvetstvuyushchie polya mogut zanimat' 2, 3 i 5 bajtov. Vmeste oni obrazuyut zapis' dlinoj v 10 bajtov. Fajl pryamogo dostupa mozhet sostoyat' iz tysyach takih zapisej. Kazhdaya zapis' sleduet nepos- redstvenno za predshestvuyushchej bez vsyakih ogranichitelej, takih kak pary vozvrat karetki/perevod stroki, ispol'zuemye v posledova- tel'nyh fajlah. Pri etom zapisi mogut pisat'sya v lyubom poryadke i mozhno zapisat' zapis' 74, hotya zapis' 73 eshche ne byla zapisana (pri etom zapisi 73 otvedeno diskovoe prostranstvo i ona budet soderzhat' te dannye, kotorye sluchajno okazalis' v tom sektore, v kotorom otvedeno mesto dlya etoj zapisi). V otlichii ot posledova- tel'nyh fajlov fajly pryamogo dostupa ostayutsya na diske. V pamyati prisutstvuyut tol'ko opredelennye zapisi, s kotorymi idet rabota v dannyj moment vremeni. Kogda dlya pryamogo dostupa k fajlu ispol'zuetsya upravlyayushchij blok fajla, to sisteme soobshchaetsya razmer zapisi fajla (vse zapisi dannogo fajla dolzhny imet' odinakovuyu dlinu). |to pozvolyaet prog- ramme zaprosit' lyubuyu zapis' po nomeru, a MS DOS tochno vychislit gde eta zapis' raspolozhena na diske. Pri rabote s fajlami pryamogo dostupa metodom deskriptora fajla programma dolzhna sama vychislyat' polozhenie trebuemoj zapisi. Sistema hranit fajlovyj ukazatel' dlya kazhdogo bufera fajla. On ukazyvaet na n-nyj bajt fajla, opredelyaya mesto v fajle, s kotoro- go budet nachinat'sya sleduyushchaya operaciya chteniya ili zapisi. Pri posledovatel'noj operacii perezapisi fajlovyj ukazatel' pervona- chal'no ustanavlivaetsya na nachalo fajla i postoyanno sdvigaetsya po mere togo, kak vse novye i novye dannye zapisyvayutsya v fajl. Kogda dannye dobavlyayutsya k posledovatel'nomu fajlu, to fajlovyj ukazatel' pervonachal'no ustanavlivaetsya na konec fajla. Pri dos- tupe k odnoj zapisi v fajle pryamogo dostupa polozhenie zapisi vychislyaetsya v vide smeshcheniya otnositel'no nachala fajla i ukazatel' ustanavlivaetsya ravnym etomu znacheniyu; zatem nuzhnaya zapis' chi- taetsya ili pishetsya. Obychno za fajlovym ukazatelem sledit sistema, odnako programma mozhet sama upravlyat' im i manipulirovat' ukaza- telem dlya svoih special'nyh nuzhd. Edinstvennym primerom nizkogo urovnya v dannom razdele yavlyaetsya chtenie/zapis' odnogo sektora. CHtenie ili zapis' celyh fajlov sostoit v posledovatel'nosti takih chtenij ili zapisej odnogo sektora, programmiruya mikroshemu kontrollera NGMD zanovo dlya kazhdogo sektora. Polnomasshtabnye fajlovye operacii ochen' slozhny na etom urovne, chto sleduet hotya by iz bol'shih razmerov fajla COMMAND.COM. Odnako, izuchiv obsuzhdenie operacij nizkogo urovnya, a takzhe imeya informaciyu o tablice razmeshcheniya fajlov [5.1.1] i dis- kovyh katalogah [5.2.1] Vy mozhete predstavit' kak rabotaet dis- kovaya operacionnaya sistema. 5.4.1 Programmirovanie kontrollera NGMD 765 i mikroshemy pryamogo dostupa k pamyati 8237. Mikroshema kontrollera NGMD 765 firmy NEC upravlyaet motorom i golovkami nakopitelya na disketah i obrabatyvaet potoki dannyh, napravlyaemye v ili iz diskovyh sektorov. Odin kontroller, usta- novlennyj na plate adaptora diskov, mozhet obsluzhivat' do chetyreh NGMD. Za isklyucheniem sluchaev, svyazannyh s zashchitoj ot kopirovaniya, programmistam ne prihoditsya programmirovat' mikroshemu kontrolle- ra NGMD pryamo. Procedury raboty s diskami, predostavlyaemye DOS i BIOS effektivny i udobny, krome togo, ochen' riskovano pisat' svoi sobstvennye procedury, poskol'ku oshibki v nih mogut razrushit' diskovyj katalog ili tablicu razmeshcheniya fajlov, chto vyzovet pol- noe razrushenie informacii na diske. Nizhesleduyushchee obsuzhdenie sluzhit celi dat' Vam tol'ko obshchee predstavlenie. Listing ROM-BIOS, privedennyj v konce kazhdogo tehnicheskogo rukovodstva po MS DOS, soderzhit kod tshchatel'no razra- botannyh procedur dlya formatirovaniya disket, chteniya i zapisi sektorov, a takzhe sbrosa i polucheniya statusa nakopitelej. Posle togo, kak Vy usvoite privedennyj zdes' material, izuchite procedu- ry ROM-BIOS dlya prodolzheniya Vashego obrazovaniya v oblasti operacij s diskami na nizkom urovne. Vam potrebuetsya takzhe dokumentaciya po mikrosheme kontrollera NGMD 8272A firmy Intel, kotoraya analogichna mikrosheme firmy NEC. V dannoj dokumentacii perechisleny preryva- niya, generiruemye kontrollerom NGMD, v to vremya kak v dokumenta- cii po IBM PC etogo spiska net. Informaciya o mikrosheme 8272A mozhet byt' najdena vo vtorom tome Spravochnika po komponentam mikrosistem (Microsystem Components Handbook). Kontroller NGMD mozhet vypolnyat' 15 operacij, iz kotoryh zdes' budut obsuzhdat'sya tol'ko tri: operacii poiska i chteniya ili zapisi odnogo sektora. Ponimanie togo kak oni rabotayut pozvolit Vam vypolnit' lyubuyu iz ostavshihsya dvenadcati, pri uslovii, chto u Vas budet vysheupomyanutaya informaciya. CHtenie fajla sostoit v poiske ego v kataloge [5.2.1], opredelenii ego polozheniya na diske s pomoshch'yu tablicy razmeshcheniya fajlov [5.1.1] i zatem nabore operacij chteniya odnogo sektora. |ta procedura vklyuchaet 6 shagov: 1. Vklyuchenie motora i korotkoe ozhidanie, poka on naberet oboroty. 2. Vypolnenie operacii poiska i ozhidanie preryvaniya, ukazyvayushchego na zavershenie etoj operacii. 3. Inicializaciya mikroshemy DMA dlya peresylki dannyh v pamyat'. 4. Posylka komandy chteniya kontrolleru NGMD i ozhidanie preryvaniya, ukazyvayushchego, chto peresylka dannyh zavershena. 5. Poluchenie informacii o statuse kontrollera NGMD. 6. Vyklyuchenie motora. Kontroller NGMD rabotaet cherez tri porta vvoda/vyvoda. Na samom dele mikroshema imeet bol'she, chem tri registra, no dostup k bol'shinstvu iz nih osushchestvlyaetsya cherez odin port. |ti tri porta takie: 3F2H registr cifrovogo vyvoda 3F4H registr statusa 3F5H registr dannyh Pervyj shag sostoit v dostupe k registru cifrovogo vyvoda. Znachenie ego bitov sleduyushchee: bity 1-0 vybor nakopitelya, gde 00 = A 01 = B 10 = C 11 = D 2 0 = sbros kontrollera NGMD 3 1 = razreshenie preryvaniya FDC i dostupa DMA 7-4 1 = vklyuchenie motora nakopitelya D-A (bit 4 = A) |to registr tol'ko dlya zapisi, poetomu neobhodimo zabotit'sya obo vseh ego bitah. V nizheprivedennom primere ispol'zuetsya nakopitel' A, poetomu cepochka bitov dolzhna vyglyadet' 00011100. Takaya usta- novka bitov vybiraet nakopitel' A, sohranyaet ustanovlennym bit 2, razreshayushchij rabotu s NGMD i vklyuchaet motor nakopitelya A. Ne sbra- syvajte bit 2 v nol', tak kak v etom sluchae Vam pridetsya proizvo- dit' perekalibrovku nakopitelya, dejstvie, kotoroe neobhodimo ochen' redko. "Perekalibrovka" nakopitelya podrazumevaet vozvrat ego golovki na nulevuyu dorozhku. |ta operaciya osushchestvlyaetsya posylkoj prostoj posledovatel'nosti komand kontrolleru NGMD. Kontroller NGMD up- ravlyaet tekushchej poziciej golovki, za schet zapominaniya vseh izme- nenij pozicii golovki posle ee nachal'noj ustanovki na nulevuyu dorozhku. Kogda kontroller NGMD sbrasyvaetsya, za schet izmeneniya bita 2 registra cifrovogo vyvoda, to znachenie tekushchej pozicii golovki ustanavlivaetsya v nol', nezavisimo ot togo, na kakoj dorozhke nahoditsya golovka na samom dele, chto delaet neobhodimym perekalibrovku. Obychno sbros kontrollera NGMD proizvoditsya tol'ko v sluchae takoj ser'eznoj oshibki nakopitelya, posle kotoroj neiz- vestno tekushchee sostoyanie kontrollera NGMD i nakopitelya. Otmetim, chto vybor nakopitelya i vklyuchenie ego motora - eto otdel'nye dejstviya. Kontroller NGMD mozhet imet' dostup tol'ko k odnomu nakopitelyu v dannyj moment vremeni, no motry mogut byt' vklyucheny u neskol'kih. Motory mogut ostavat'sya vklyuchennymi eshche neskol'ko sekund posle zaversheniya obmena dannymi, v ozhidanii sleduyushchego dostupa k nakopitelyu. Takaya strategiya pozvolyaet izbe- zhat' poteri vremeni na povtornoe ozhidanie poka motor naberet skorost'. Naprotiv, motor nel'zya ostavlyat' postoyanno vklyuchennym, tak kak eto privedet k prezhdevremennomu iznosu disket. Rabota mikroshemy kontrollera NGMD razdelyaetsya na tri fazy: komandnaya faza, faza vypolneniya i faza rezul'tata. V komandnoj faze odin ili bolee bajtov posylayutsya v registr dannyh. Posledo- vatel'nost' bajtov strogo fiksirovana i ona menyaetsya ot komandy k komande. Zatem kontroller NGMD vypolnyaet komandu i v eto vremya on nahoditsya v faze vypolneniya. Nakonec, vo vremya fazy rezul'tata, ryad bajtov statusa schityvayutsya iz registra dannyh. Pri etom obya- zatel'no, chtoby ne bylo oshibki v chisle peredavaemyh ili schityvae- myh dannyh v registr dannyh v fazah komandnoj i rezul'tata. CHislo bajtov komandy i rezul'tata menyaetsya v zavisimosti ot vypolnyaemoj kontrollerom diskovoj operacii. V tehnicheskom ruko- vodstve po IBM PC privedeny dannye dlya vseh 15 operacij. Pervyj bajt komandy yavlyaetsya kodom, opredelyayushchim trebuemuyu operaciyu. Nomer koda soderzhitsya v mladshih 5-ti bitah bajta i v nekotoryh sluchayah v starshih treh bitah zakodirovana dobavochnaya informaciya. V bol'shinstve sluchaev vtoroj bajt komandy soderzhit nomer nakopi- telya (0-3) v mladshih dvuh bitah i nomer golovki (0 ili 1) v bite 2, vse ostal'nye bity ignoriruyutsya kontrollerom NGMD. Pri opera- cii poiska trebuetsya dopolnitel'no eshche tol'ko odin bajt, v koto- rom dolzhen soderzhat'sya nomer novoj dorozhki. CHtenie ili zapis' sektora trebuet semi dopolnitel'nyh komandnyh bajtov, kotorye identichny v etih dvuh sluchayah. Bajty s tret'ego po pyatyj soderzhat tekushchij nomer dorozhki, nomer golovki i nomer sektora. Za nimi sleduyut chetyre bajta, soderzhashchie tehnicheskuyu informaciyu, neobho- dimuyu dlya kontrollera NGMD. Pervyj bajt etoj tehnicheskoj informacii otnositsya k chislu bajtov v sektore, kotoroe kodiruetsya kak 0 dlya 128, 1 dlya 256, 2 dlya 512 i 3 dlya 1024. Konechno diskety, sozdannye v MS DOS imeyut sektora razmerom 512 bajt. Zatem idut dannye konca dorozhki (EOT), kotorye dayut maksimal'nyj nomer sektora dlya cilindra; eto znache- nie ravno 9 dlya disket emkost'yu 360K. Nakonec, idet bajt dayushchij dlinu sdviga (GPL, ravnyj 2AH) i dlinu dannyh (DTL, ravnyj FFH). Tehnicheskoe rukovodstvo po IBM PC soderzhit tablicu, v kotoroj ob®yasnyayutsya drugie vhozhnye parametry, naprimer te, kotorye is- pol'zuyutsya pri formatirovanii diska. MS DOS hranit chetyre tehni- cheskih parametra v pamyati, v special'noj tablice parametrov, nazyvaemoj bazoj diska (disk base). Vektor preryvaniya 1EH ukazy- vaet na etu tablicu. CHetyre znacheniya hranyatsya v tom poryadke, v kotorom oni dolzhny byt' peredany kontrolleru NGMD, nachinaya so smeshcheniya 3. V sleduyushchej tablice pokazana komandnaya posledovatel'- nost' dlya treh operacij, ispol'zuemyh v nizheprivedennom primere. V cepochkah bitov chereh X oboznacheny bity, znachenie kotoryh nesu- shchestvenno, cherez H - nomer golovki, a cherez DD - nomer nakopite- lya. Operaciya # bajta Funkciya Ustanovka dlya golovki 0 dorozhki 15, sektora 1 Poisk 1 nomer koda 00001111 1FH 2 golovka i nakopitel' 00H XXXXXHDD CHtenie 1 nomer koda 01100110 66H sektora 2 golovka i nakopitel' 00H XXXXXHDD 3 nomer dorozhki 0FH 4 nomer golovki 00H 5 nomer sektora 01H 6 bajtov v sektore 02H 7 konec dorozhki 09H 8 dlina sdviga 1AH 9 dlina dannyh FFH Zapis' 1 nomer koda 01000101 45H sektora 2-9 te zhe, chto i dlya chteniya sektora Vy dolzhny byt' uvereny, chto kontroller NGMD gotov prezhde chem Vy poshlete ili prochitaete bajt iz registra dannyh. Bity 7 i 6 registra statusa predostavlyayut etu informaciyu. Vot znachenie bitov etogo registra: bity 3-0 1 = nakopitel' D-A v rezhime poiska 4 1 = kontroller NGMD vypolnyaet komandu chteniya/zapisi 5 1 = kontroller NGMD ne v rezhime DMA 6 1 = registr dannyh kontroller NGMD gotov k priemu dannyh 0 = gotov k posylke dannyh 7 1 = kontroller NGMD gotov k posylke ili priemu dannyh Pered nachalom diskovyh operacij neploho proverit', chto bit 6 raven nulyu, indiciruya chto kontroller NGMD ozhidaet komandu. Esli on ozhidaet posylki dannyh, to proizoshla oshibka. Kogda bajt dannyh posylaetsya v registr dannyh, to bit 7 registra statusa stanovitsya ravnym nulyu; prodolzhajte chtenie registra do teh por, poka bit ne izmenitsya obratno na 1, a zatem posylajte sleduyushchij bajt komandy. Analogichno, proveryajte etot bit statusa pered chteniem bajta sta- tusa v faze rezul'tata. Nizheprivedennyj primer konchaetsya dvumya procedurami, kotorye vypolnyayut eti funkcii. Kogda operaciya poiska zavershena, to kontroller NGMD iniciiruet preryvanie 6, preryvanie ot NGMD. Hotya tak zhe prosto mozhno uznat' ob okonchanii operacii poiska proveryaya registr statusa, v primere eto delaetsya za schet obrabotki preryvaniya. Kogda proishodit pre- ryvanie, to obrabotchik preryvaniya BIOS ustanavlivaet bit 7 bajta statusa poiska v oblasti dannyh BIOS, raspolozhennogo po adresu 0040:003E. |to edinstvennyj rezul'tat obrabotki preryvaniya. Mozhno proveryat' etot bajt do teh por, poka bit 7 ne budet ustanovlen, a zatem perehodit' k sleduyushchemu shagu operacii chteniya sektora. Sleduyushchij shag sostoit v inicializacii mikrosheiy pryamogo dos- tupa k pamyati 8237. |ta mikroshema zanimaetsya obmenom dannyh mezhdu periferijnymi ustrojstvami i pamyat'yu, rabotoj, kotoroj mozhet zanimat'sya takzhe processor. Na samom dele, v PCjr, gde net mikroshemy DMA, kontroller NGMD posylaet dannye pryamo v proces- sor, kotoryj v svoyu ochered' peresylaet ih v pamyat'. Taktovaya chastota processora adekvatna etoj zadache, odnako pri peresylke dannyh vse preryvaniya dolzhny byt' zapreshcheny, s tem chtoby ne proishodilo poteri dannyh. |to oznachaet, chto v PCjr pri peredache dannyh vvod s klaviatury ili iz modema zapreshchen. Preryvaniya taj- mera takzhe ignoriruyutsya, odnako vposledstvii schetchik vremeni sutok obnovlyaetsya special'noj proceduroj, ispol'zuyushchej kanal 1 mikroshemy tajmera 8253 dlya podscheta impul'sov, proshedshih za vremya diskovyh operacij. Vse ostal'nye modeli IBM PC imeyut mik- roshemu DMA, poetomu processor svoboden pri peredache dannyh. IBM PC i XT ispol'zuyut 4-hkanal'nuyu mikroshemu DMA 8237. Kanal 0 prednaznachen dlya "osvezheniya" pamyati (memory refresh); on pos- toyanno vosstanavlivaet zaryad yacheek operativnoj pamyati. Esli Vy budete rabotat' po etomu kanalu, to eto privedet skoree vsego k krahu mashiny. Kanal 2 prednaznachen dlya diskovyh operacij, a dva dru