nie razmera svobodnogo diskovogo prostranstva: shest.36 Dannaya funkciya vydaet informaciyu o diskovoj pamyati. Dlya vypolneniya funkcii neobhodimo zagruzit' v registr DL nomer diskovoda (0 - tekushchij diskovod, 1 - A, 2 - B i t.d.): MOV AH,36H ; Zapros na MOV DL,0 ; tekushchij diskovod INT 21H ; Vyzov DOS Pri ukazanii nepravil'nogo nomera diskovoda operaciya voz vrashchaet v registre AX shest.FFFF, inache sleduyushchie znacheniya: v AX chislo sektorov na klaster v BX chislo dostupnyh klasterov v CX chislo bajtov na sektor v DX obshchee chislo klasterov na diskovode V versii DOS mladshe 2.0 dlya polucheniya informacii o disko voj pamyati sleduet ispol'zovat' funkciyu shest.1B (poluchit' informaciyu iz tabblicy FAT). Udalenie fajla: shest.41 Dlya udaleniya fajlov iz programmy (za isklyucheniem fajlov s atributom "tol'ko chtenie") ispol'zuetsya funkciya shest.41. Pri etom v registre DX neobhodimo zagruzit' ASCIIZ stroku, soderzhashchuyu put' dostupa i imya fajla: MOV AH,41H ; Zapros na udalenie LEA DX,PATHNAM ; ASCIIZ-stroka INT 21H ; Vyzov DOS V sluchae oshibki v registre AX vozvrashchaetsya kod 02 (fajl ne najden) ili 05 (net dostupa). Upravlenie fajlovym ukazatelem: shest.42 Sistema DOS imeet fajlovyj ukazatel', kotoryj pri otkrytii fajla ustanavlivaetsya v 0 i uvelichivaetsya na 1 pri posledovatel'nyh operaciyah zapisi ili schityvaniya. Dlya dostupa k lyubym zapisyam vnutri fajla mozhno menyat' fajlovyj ukazatel' s pomoshch'yu funkcii shest.42, poluchaya v rezul'tate pryamoj dostup k zapisyam fajla. Dlya ustanovki fajlovogo ukazatelya neobhodimo pomestit' v registr BX fajlovyj nomer i v registrovuyu paru CX:DX trebue moe smeshchenie v bajtah. Dlya smeshchenij do 65.535 v registre CX ustanavlivaetsya 0, a v DX - smeshchenie. V registre AL dolzhen byt' ustanovlen odin iz kodov, kotoryj opredelyaet tochku otscheta smeshcheniya: 0 - smeshchenie ot nachala fajla. Assembler dlya IBM PC. Glava 17. 9 1 - smeshchenie tekushchego znacheniya fajlovogo ukazatelya, kotoroe mozhet byt' v lyubom meste, vklyuchaya nachalo fajla. 2 - smeshchenie ot konca fajla. Razmer fajla (i sledovatel'no smeshchenie do konca fajla) mozhno opredelit', ustanoviv registrovuyu paru CX:DX v 0 i ispol'zuya kod 2 v registre AL. V sleduyushchem primere ustanavlivaetsya fajlovyj ukazatel' na smeshchenie 1024 bajta ot nachala fajla: MOV AH,42H ; Ustanovka ukazatelya MOV AL,00 ; ot nachala fajla LEA BX,HANDLE1 ; Ustanovka fajlovogo nomera MOV CX,00 ; MOV DX,1024 ; Smeshchenie 1024 bajta INT 21H ; Vyzov DOS JC error Pravil'no vypolnennaya operaciya sbrasyvaet flag CF i voz vrashchaet novyj ukazatel' v registrovoj pare DX:AX. Nepravil' naya operaciya ustanavlivaet flag CF v 1 i vozvrashchaet v regist re AX kod 01 (oshibka koda otscheta) ili 06 (oshibka fajlovogo nomera). Proverka ili izmenenie atributa: shest.43 Dlya proverki ili izmeneniya fajlovogo atributa v oglavle nii diska ispol'zuetsya funkciya shest.43H. Pri etom v registre DX dolzhen byt' ustanovlen adres ASCIIZ stroki. Dlya proverki atributa registr AL dolzhen soderzhat' 00. Dlya izmeneniya atributa registr AL dolzhen soderzhat' 01, a registr CX - novoe znachenie atributa. Sleduyushchij primer ustanavlivaet normal'nyj atribut: MOV AH,43H ; Zapros na ustanovku MOV AL,01 ; normal'nogo MOV CX,00 ; atributa LEA DX,PATHNM2 ; ASCIIZ-stroka INT 21H ; Vyzov DOS V sluchae proverki funkciya vozvrashchaet tekushchij atribut faj la v registre CX. V sluchae izmeneniya funkciya ustanavlivaet v sootvetstvuyushchem elemente oglavleniya atribut iz registra CX. Nepravil'naya operaciya vozvrashchaet v registre AX kody oshibok 02, 03 ili 05. Poluchit' tekushchee oglavlenie: shest.47 Opredelenie tekushchego oglavleniya dlya lyubogo diskovoda osushchestvlyaetsya s pomoshch'yu funkcii shest.47. Pri etom neobhodi mo opredelit' oblast' pamyati dostatochno bol'shuyu, chtoby soder zhat' puti dostupa maksimal'noj dliny i zagruzit' adres etoj oblasti v registr DX. Registr DL dolzhen soderzhat' nomer diskovoda: 0 - tekushchij, 1 - A, 2 - B i t.d. V rezul'tate Assembler dlya IBM PC. Glava 17. 10 vypolneniya operaciya pomeshchaet v oblast' pamyati imya tekushchej direktorii (bez nomera diskovoda), naprimer, v sleduyushchem vide: ASSEMBLE\EXAMPLES Nulevoj bajt (shest.00) identificiruet konec sostavnogo imeni puti dostupa. Dlya kornevoj direktorii vozvrashchaemoe znachenie sostoit tol'ko iz odnogo bajta - shest.00. Takim obrazom mozhno poluchit' tekushchee imya puti dostupa dlya lyubogo fajla v podoglavlenii. Primer na ris.17.5 demonstriruet ispol'zovanie dannoj funkcii. Poisk fajlov po shablonu: shest.4E i shest.4F Dannye funkcii analogichny funkciyam shest. 11 i 12 bazovoj versii DOS. Funkciya 4E ispol'zuetsya dlya nachala poiska v og lavlenii, a funkciya 4F - dlya prodolzheniya. Dlya nachala poiska v registr DX neobhodimo zagruzit' adres ASCIIZ-stroki, soder zhashchej imya puti dostupa i shablon poiska. SHablon poiska mozhet vklyuchat' v sebya simvoly ? i *. V registre CX dolzhno byt' znachenie atributa v lyuboj kombinacii bitov (normal'nyj, oglavlenie, spryatannyj ili sistemnyj). MOV AH,4EH ; Zapros na nachalo poiska MOV CX,00H ; Normal'nyj atribut LEA DX,PATHNM1 ; ASCIIZ-stroka INT 21H ; Vyzov DOS Esli operaciya nahodit fajl, udovletvoryayushchij shablonu poiska, to v tekushchij bufer DTA v FCB zapolnyaetsya sleduyushchej informaciej: 00 - rezervirovano DOS dlya posleduyushchego poiska 21 - atribut fajla 22 - vremya fajla 24 - data fajla 26 - razmer fajla: mladshee slovo, zatem starshee slovo 30 - imya i tip v vide 13-bajtovoj ASCIIZ stroki, zavershaemoj shest.00. V sluchae oshibki v registre AX vozvrashchaetsya kod 02 (ne najdeno) ili 18 (net bol'she fajlov). Dlya prodolzheniya poiska fajlov (posle funkcii shest.4E) ispol'zuetsya funkciya 4F. Mezhdu etimi funkciyami ne sleduet narushat' soderzhimoe DTA. MOV AH,4FH ; Zapros na prodolzhenie poiska INT 21H ; Vyzov DOS Edinstvenno vozmozhnyj kod v registre AX - 18 (net bol'she fajlov). Obe rassmotrennye funkcii ne menyayut sostoyanie flaga CF. Pereimenovanie fajla: shest. 56 Assembler dlya IBM PC. Glava 17. 11 Dlya pereimenovaniya fajla ispol'zuetsya funkciya shest.56. Pri etom v registr DX dolzhen byt' zagruzhen adres ASCIIZ- stroki, soderzhashchej starye znacheniya diskovoda, puti dostupa, imeni i tipa fajla, a v registr DI (v dejstvitel'nosti ES:DI) - adres ASCIIZ-stroki, soderzhashchej novye znacheniya diskovoda, puti dostupa, imeni i tipa fajla. Esli ukazyva etsya nomer diskovoda, to on dolzhen byt' odinakov v oboih strokah. Put' dostupa mozhet byt' razlichnym, poetomu dannaya operaciya mozhet ne tol'ko pereimenovyvat' fajl, no i pereno sit' ego v drugoe podoglavlenie. MOV AH,56H ;Zapros na pereimenovanie fajla LEA DX,oldstring ; DS:DX LEA DI,newstring ; ES:DI INT 21H ; Vyzov DOS V sluchae oshibki registr AX vozvrashchaet kody 03 (put' dostu pa ne najden), 05 (net dostupa?) i 17 (raznye diskovody). Drugie funkcii DOS, imeyushchie otnoshenie k diskovym fajlam, vklyuchayut sozdanie podoglavleniya (shest.39), udalenie elementa oglavleniya (shest.3A), izmenenie tekushchego oglavleniya (shest. 3B), upravlenie vvodom-vyvodom dlya ustrojstv (shest.44), dublirovanie fajlovogo nomera (shest.45), prinuditel'noe dublirovanie fajlovogo nomera (shest.46), poluchenie sostoyaniya proverki ? (shest.54). OSNOVNYE POLOZHENIYA NA PAMYATX ------------------------------------------------------------ - Mnogie funkcii rasshirennoj versii DOS operiruyut s ASCIIZ- strokami, kotorye soderzhat put' dostupa i zavershayutsya bajtom, soderzhashchim shest.00. - Funkcii sozdaniya i otkrytiya vozvrashchayut znachenie fajlovogo nomera, kotoryj ispol'zuetsya dlya posleduyushchego dostupa k fajlu. - V sluchae oshibok mnogie funkcii ustanavlivayut flag CF i pomeshchayut kod oshibki v registr AX. - Kak pravilo, funkciya sozdaniya ispol'zuetsya dlya zapisi fajla, a otkrytiya - dlya chteniya. - Posle togo, kak fajl zapisan na disk, ego neobhodimo zakryt' dlya togo, chtoby v oglavlenie byli vneseny soot vetstvuyushchie izmeneniya. VOPROSY DLYA SAMOPROVERKI ------------------------------------------------------------ 17.1. Kakie znacheniya kodov vozvrata dlya situacij "fajl ne najden" i "oshibka fajlovogo nomera" ? 17.2. Opredelite ASCIIZ-stroku po imeni PATH1 dlya fajla CUST.LST na diskovode C. 17.3. Dlya predydushchego fajla (p.17.2) napishite komandy a) opredeleniya elementa po imeni CUSTHAN dlya fajlovogo nomera, b) sozdanie fajla, v) zapisi fajla iz oblasti CUSTOUT (128 bajt) i g) zakrytiya fajla. Obespech'te proverku na oshibki. Assembler dlya IBM PC. Glava 17. 12 17.4. Dlya fajla (p.17.3) napishite komandy a) otkrytiya fajla i b) chteniya fajla v oblast' CUSTIN. Obespech'te kont rol' oshibok. 17.5. V kakih sluchayah neobhodimo zakryvat' fajl, kotoryj byl otkryt tol'ko dlya chteniya ? 17.6. Izmenite programmu na ris.17.4 tak, chtoby pol'zova tel' mog vvodit' s klaviatury imya fajla, kotoryj neobhodimo vydat' na ekran. Obespech'te vozmozhnost' lyubogo chisla zaprosov i zavershenie programmy tol'ko po pustomu zaprosu, t.e. prostomu nazhatiyu klavishi Return. Assembler dlya IBM PC. Glava 18. 1 GLAVA 18. Diskovaya pamyat' IV: Funkcii BIOS ----------------------------------------------------------- Diskovaya pamyat' IV: Funkcii BIOS Cel': Pokazat' osnovnye trebovaniya k programmirovaniyu funkcij BIOS dlya sozdaniya i chteniya diskovyh fajlov. VVEDENIE ----------------------------------------------------------- Dlya diskovyh operacij mozhno programmirovat' neposred stvenno na urovne BIOS, hotya BIOS i ne obespechivaet avtomaticheski ispol'zovanie oglavleniya ili blokirovanie/ deblokirovanie zapisej. Diskovaya operaciya BIOS INT 13H ras smatrivaet vse "zapisi", kak imeyushchie razmer sektora, a adresaciyu diska osushchestvlyaet v terminah dejstvitel'nyh nomera dorozhki i nomera sektora. Dlya diskovyh operacij chteniya, zapisi i verifikacii neob hodima inicializaciya sleduyushchih registrov: AH Opredelyaet tip operacii: chtenie, zapis', verifikaciya ili formatirovanie. AL Opredelyaet chislo sektorov. CH Opredelyaet nomer dorozhki. CL Opredelyaet nomer nachal'nogo sektora. DH Nomer golovki (storony) : 0 ili 1 dlya diskety. DL Nomer diskovoda: 0=A, 1=B i t.d. ES:BX Adres bufera vvoda/vyvoda v oblasti dannyh (za isklyucheniem operacii verifikacii). DISKOVYE OPERACII V BIOS ----------------------------------------------------------- Dlya ukazaniya neobhodimoj diskovoj operacii neobhodimo pered INT 13H zagruzit' v registr AH sootvetstvuyushchij kod. AH = 00: Sbros sistemy kontrolera diskovoda Dannaya operaciya osushchestvlyaet polnyj sbros kontrolera dis kovoda i trebuet dlya vypolneniya INT 13H zagruzku v registr AH znachenie shest.00. Operaciya ispol'zuetsya v sluchayah, kogda posle drugih diskovyh operacij vozvrashchaetsya kod ser'eznoj oshibki. AH = 01: Opredelit' sostoyanie diskovoda Dannaya operaciya vozvrashchaet v registre AL sostoyanie diskovoda posle poslednej operacii vvodda/vyvoda (sm.Bajt sostoyaniya v sleduyushchem razdele). Operaciya trebuet tol'ko zagruzki znacheniya 01 v registr AH. AH = 02: CHtenie sektorov Dannaya operaciya vypolnyaet chtenie v pamyat' opredelennogo chisla sektorov na odnoj dorozhke. CHislo sektorov obychno 1, 8 ili 9. Adres pamyati dlya oblasti vvoda dolzhen byt' zagruzhen v registr BX, prichem sleduet pomnit', chto real'nyj adres Assembler dlya IBM PC. Glava 18. 2 zavisit ot soderzhimogo registra EX, tak kak v dannom sluchae ispol'zuetsya registrovaya para ES:BX. V sleduyushchem primere vypolnyaetsya chtenie sektora v oblast' INSECT, kotoraya dolzhna byt' dostatochno bol'shoj, chtoby vmestit' vse dannye: MOV AH,02 ; Zapros na chtenie MOV AL,01 ; odin sektor LEA BX,INSERT ; Bufer vvoda v ES:BX MOV CH,05 ; Dorozhka 05 MOV CL,03 ; Sektor 03 MOV DH,00 ; Storona (golovka) 00 MOV DL,01 ; Diskovod 01 (B) INT 13H ; Vyzov BIOS CHislo dejstvitel'no prochitannyh sektorov vozvrashchaetsya v registre AL. Registry DS, BX, CX i DX sohranyayut svoi znacheniya. V bol'shinstve sluchaev programma ukazyvaet tol'ko odin sektor ili vse sektora na dorozhke. Dlya posledovatel'nogo chteniya sektorov programma dolzhna uvelichivat' soderzhimoe registrov CH i CL. Zamet'te, chto kogda nomer sektora dostigaet maksimal'nogo znacheniya, ego neobhodimo sbrosit' v 01, a nomer dorozhki uvelichit' na 1 ili izmenit' storonu 0 na 1 (dlya dvuhstoronnih disket). AH = 03: Zapis' sektorov Dannaya operaciya zapisyvaet dannye iz ukazannoj oblasti pamyati (obychno 512 bajtov ili kratnoe 512) v odin ili neskol'ko opredelennyh sektorov. Upravlyayushchaya informaciya zagruzhaetsya v registry analogichno operacii chteniya diska (kod 02). Operaciya zapisi vozvrashchaet v registre AL chislo sektorov, kotorye dejstvitel'no byli zapisany. Registry DX, BX, CX i DX sohranyayut svoi znacheniya. AH = 04: Verifikaciya sektora Dannaya operaciya proveryaet, mozhet li byt' najden ukazannyj sektor, i vypolnyaet svoego roda kontrol' na chetnost'. Opera ciyu mozhno ispol'zovat' posle zapisi (kod 03) dlya garantii bolee nadezhnogo vyvoda, na chto potrebuetsya dopolnitel'noe vremya vvoda/vyvoda. Znacheniya registrov ustanavlivayutsya ana- logichno operacii zapisi (kod 03), za isklyucheniem registro- voj pary ES:BX - ih inicializaciya ne trebuetsya. Operaciya vozvrashchaet v registre AL chislo obrabotannyh sektorov. Re- gistry DX, BX, CX i DX sohranyayut svoi znacheniya. AH = 05: Formatirovanie dorozhek Dannaya operaciya ispol'zuetsya dlya formatirovaniya oprede lennogo chisla dorozhek v sootvetstvii s odnim iz chetyreh razmerov (standart dlya sistemy PC - 512). Operacii chteniya i zapisi dlya lokalizacii trebuemogo sektora trebuyut informaciyu o formate. Dlya formatirovaniya registrovaya para Assembler dlya IBM PC. Glava 18. 3 ES:BX dolzhna soderzhat' adres, kotoryj ukazyvaet na gruppu adresnyh polej dlya dorozhki. Dlya kazhdogo sektora na dorozhke dolzhen byt' chetyrehbajtovyj element v vide T/H/S|B, gde T nomer dorozhki, H nomer golovki, S nomer sektora, B chislo bajt na sektore, (00-128, 01-256, 02-512, 03-1024). Naprimer, dlya formatirovaniya 03 dorozhki, na storone 00 i 512 bajtov na sektor, pervyj element dolzhen imet' znachenie shest.03000102 i za nim dolzhny byt' opisany elementy dlya ostal'nyh sektorov na dorozhke. Tehnicheskoe rukovodstvo po AT soderzhit ryad dopolnitel'nyh operacij BIOS. BAJT SOSTOYANIYA ------------------------------------------------------------ Dlya vseh rassmotrennyh vyshe operacij (02, 03, 04 i 05) v sluchae normal'nogo zaversheniya flag CF i registr AH soderzhit 0. V sluchae oshibki flag CF ustanavlivaetsya v 1, a registr AH soderzhit kod sostoyaniya, identificiruyushchij prichinu oshibki. Kod sostoyaniya analogichen znacheniyu v registre AL posle vypolneniya operacii 01. AH Prichina 0000 0001 Oshibka komandy dlya diskety 0000 0010 Ne najden adresnyj marker na diske 0000 0011 Popytka zapisi na zashchishchennyj disk 0000 0100 Ne najden sektor 0000 1000 Vyhod za granicy DMA (pamyati pryamogo dostupa) 0000 1001 Popytka dostupa cherez granicu 64K 0001 0000 CHtenie sbojnyj uchastok na diske 0010 0000 Oshibka kontrolera diskovoda 0100 0000 Oshibka ustanovki (poiska) 1000 0000 Oshibka oborudovaniya V sluchae vozniknoveniya oshibki, obychnym dejstviem yavlyaetsya sbros diska (AH=00) i troekratnoe povtorenie operacii. Esli takim obrazom oshibka ne ustranyaetsya, to na ekran vyvoditsya sootvetstvuyushchee soobshchenie i pol'zovatel' mozhet smenit' disketu. PROGRAMMA: ISPOLXZOVANIE BIOS DLYA CHTENIYA SEKTOROV ------------------------------------------------------------ Rassmotrim programmu, privedennuyu na ris.18.1, v kotoroj ispol'zuetsya komanda BIOS INT 13H dlya chteniya sektorov diska. Programma baziruetsya na primere, privedennom na ris.16.3, so sleduyushchimi izmeneniyami: 1. Otsutstvuet opisanie FCB i podprogramma otkrytiya. Assembler dlya IBM PC. Glava 18. 4 2. Programma raschityvaet kazhdyj diskovyj adres. Posle kazh dogo chteniya proishodit uvelichenie nomera sektora. Pri dostizhenii nomera sektora 10 procedura C10ADDR sbrasyvaet eto znachenie v 01. Esli nomer storony = 1, programma uvelichivaet nomer dorozhki; zatem menyaetsya nomer storony: 0 na 1 i 1 na 0. 3. Oblast' CURADR soderzhit nachal'nye znacheniya nomerov dorozhki i sektora (ih programma uvelichivaet), a oblast' ENDADR - konechnye znacheniya. Odin iz sposobov uluchsheniya programmy - predostavit' pol'zovatelyu vozmozhnost' ukazat' nachal'nye i konechnye nomera dorozhki i sektora s pomoshch'yu sootvetstvuyushchego zaprosa. Vypolnite dannuyu programmu pod upravleniem otladchika DEBUG. Prodelajte trassirovku komand, kotorye inicializiruyut segmentnye registry, i ustanovite nachal'nyj i konechnyj nomera sektorov dlya fajlovoj tablicy FAT (raspolozhenie tablicy FAT razlichno v raznyh versiyah operacionnoj sistemy). Ispol'zuya komandu G (do) dlya vypolneniya vvoda s diska i proverki schitannogo soderzhimogo tablicy FAT i elementov oglavleniya. ------------------------------------------------------------ ------------------------------------------------------------ Ris.18.1. Ispol'zovanie BIOS dlya chteniya diskovogo fajla. V kachestve al'ternativy,otladchiku DEBUG mozhno preobrazo vat' ASCII-simvoly v oblasti vvoda v ih shest. ekvivalenty i vydat' na ekran eti znacheniya, kak eto delaet otladchik DEBUG (sm. programmu na ris.14.5). Takim obrazom mozhno proverit' soderzhimoe lyubogo sektora (v tom chisle "spryatannogo"), a takzhe predostavit' pol'zovatelyu vozmozhnost' vnesti izmene niya i zapisat' izmenennyj sektor na disk. Sleduet pomnit', chto pri sozdanii fajla DOS mozhet vnosit' zapisi na lyubye dostupnye sektora, kotorye ne obyazatel'no budut smezhnymi na diske. Sledovatel'no, s pomoshch'yu komandy BIOS INT 13H nel'zya vypolnit' posledovatel'noe chtenie fajla. OSNOVNYE POLOZHENIYA NA PAMYATX ------------------------------------------------------------ - Komanda BIOS INT 13 obespechivaet pryamoj dostup k dorozhkam i sektoram diska. - Komanda BIOS INT 13 ne podderzhivaet operacii s oglavle niem, obnaruzhenie konca fajla, blokirovanie i deblokiro vanie zapisej. - Verifikaciya sektora vypolnyaet elementarnuyu proverku zapisannyh dannyh, chto privodit k uvelicheniyu vremeni obrabotki. - Proveryajte bajt sostoyaniya posle kazhdoj diskovoj operacii cherez BIOS. VOPROSY DLYA SAMOPROVERKI ------------------------------------------------------------ Assembler dlya IBM PC. Glava 18. 5 18.1. Napishite komandy dlya sbrosa diskovogo kontrolera. 18.2. Napishite komandy dlya chteniya bajta sostoyaniya diskety. 18.3. Napishite komandy dlya BIOS INT 13H, vypolnyayushchie chtenie odnogo sektora v oblast' pamyati INDISK, s diskovoda A, golovki 0, dorozhki 6 i sektora 3. 18.4. Napishite komandy dlya BIOS INT 13H, vypolnyayushchie zapis' treh sektorov iz oblasti pamyati OUTDISK, na diskovod B, golovku 0, dorozhku 8 i sektor 1. 18.5. Pri zapisi dannyh v voprose 18.4, kak mozhno raspoz nat' popytku zapisi na zashchishchennyj disk? 18.6. Na osnove voprosa 18.4 napishite komandy kontrolya zapisi (operaciya verifikacii). Assembler dlya IBM PC. Glava 19 1 GLAVA 19. PECHATX ------------------------------------------------------------ PECHATX Cel': Opisat' vozmozhnosti programm na yazyke assemblera dlya vyvoda informacii na pechatayushchee ustrojstvo (printer). VVEDENIE ------------------------------------------------------------ Vyvod na printer neskol'ko proshche operacij s ekranom i diskom. Dlya pechati sushchestvuet neskol'ko operacij, vypolnyayushchihsya cherez DOS INT 21H i BIOS INT 17H. Komandy, posylaemye na printer, vklyuchayut kody "konec stranicy", "konec stroki" i "vozvrat karetki". Printery klassificiruyutsya po kachestvu pechati. Matrichnyj printer formiruet simvoly v vide matricy tochek i obespechi vaet normal'nyj, uzkij i shirokij formaty simvolov. Bolee sovershennye matrichnye printery obespechivayut tochechnuyu grafi ku, naklonnyj shrift, zhirnuyu pechat' i dvojnuyu plotnost', a takzhe mogut pechatat', naprimer, simvoly igral'nyh kart i drugie alfavitno-cifrovye simvoly. Vysokokachestvennye pecha tayushchie ustrojstva ogranicheny naborom simvolov na smennoj "romashke" ili barabane, no obespechivayut otlichnoe kachestvo pechati i bol'shoe raznoobrazie printerov. Mnogie vysokoka chestvennye printery obespechivayut pechat' 10,12 ili 15 simvo lov na dyujm, a takzhe proporcional'noe raspolozhenie probelov, podcherkivanie, tenevuyu i poluzhirnuyu pechat'. Lazernye printe ry obladayut preimushchestvami kak dlya matrichnoj grafiki, tak i dlya kachestvennoj pechati tekstov. Drugaya klassifikaciya pechatayushchih ustrojstv svyazana s inter fejsami. Komp'yutery IBM PC imeyut parallel'nyj interfejs, pozvolyayushchij peredavat' odnovremenno vosem' bitov iz proces sora na printer. Krome togo, sushchestvuet posledovatel'nyj interfejs, kotoryj vypolnyaet pobitovuyu peredachu dannyh. Mnogie printery imeyut bufer pamyati, ob®emom v neskol'ko tysyach bajtov. Printery takzhe mogut prinimat' bity kontrolya na chetnost' (nechetnost'). Printery dolzhny "ponimat'" speci al'nye signaly iz processora, naprimer, dlya progona lista, perevoda stroki ili gorizontal'noj tabulyacii. V svoyu ochered', processor dolzhen "ponimat'" signaly ot printera, ukazyvayushchie na konec bumagi ili sostoyanie "zanyato". K sozhaleniyu mnogie tipy printerov po raznomu reagiruyut na signaly processora i odnoj iz naibolee slozhnyh problem dlya programmistov - obespechit' sootvetstvie sobstvennyh programm imeyushchimsya pechatayushchim ustrojstvom. SIMVOLY UPRAVLENIYA PECHATXYU ------------------------------------------------------------ Standartnymi simvolami upravleniya pechat'yu yavlyayutsya sle duyushchie: Desyatichn. SHest. Naznachenie Assembler dlya IBM PC. Glava 19 2 08 08 Vozvrat na shag 09 09 Gorizontal'naya tabulyaciya 10 0A Perevod stroki 11 0B Vertikal'naya tabulyaciya 12 0C Progon stranicy 13 0D Vozvrat karetki Gorizontal'naya tabulyaciya. Gorizontal'naya tabulyaciya (shest. 09) vozmozhna tol'ko na printerah, imeyushchih sootvetstvuyushchee obespechenie, inache simvoly tabulyacii ignoriruyutsya. V poslednem sluchae mozhno imitirovat' tabulyaciyu vyvodom sootvetstvuyushchego chisla probelov. Perevod stroki. Simvol perevoda stroki (shest.OA) ispol' zuetsya dlya progona lista na odin interval. Sootvetstvenno dlya pechati cherez dva intervala ispol'zuetsya dva simvola perevoda stroki. Progon stranicy. Ustanovka bumagi posle vklyucheniya printe ra opredelyaet nachal'nuyu poziciyu pechati stranicy. Dlina stranicy po umolchaniyu sostavlyaet 11 dyujmov. Ni processor, ni printer avtomaticheski ne opredelyayut konec stranicy. Esli vasha programma prodolzhaet pechatat' posle konca stranicy, to proizojdet perehod cherez mezhstranichnuyu perforaciyu na na chalo sleduyushchej stranicy. Dlya upravleniya stranicami neobhodi mo podschityvat' chislo napechatannyh strok i pri dostizhenii maksimal'nogo znacheniya (naprimer, 55 strok) vydat' kod progo na stranicy (shest.OC) i, zatem, sbrosit' schetchik strok v 0 ili 1. V konce pechati neobhodimo vydat' simvol "perevoda stroki" ili "progona stranicy" dlya vyvoda na pechat' dannye poslednej stroki, nahodyashchiesya v bufere pechatayushchego ustrojstva. Ispol'zovanie poslednego simvola "progon stranicy" pozvolyaet ustanovit' napechatannyj poslednij list v polozhenie dlya otryva. FUNKCII PECHATI V RASSHIRENNOJ VERSII DOS ------------------------------------------------------------ V operacionnoj sisteme DOS 2.0 imeyutsya fajlovye ukazateli, kotorye byli pokazany v glavah po upravleniyu ekranom displeya i diskovoj pechati. Dlya vyvoda na pechatayushchee ustrojstvo ispol'zuetsya funkciya DOS shest.40 i standartnyj fajlovyj nomer 04. Sleduyushchij primer demonstriruet pechat' 25 simvolov iz oblasti HEADG: HEADG DB 'Industrial Bicycle Mfrs', 0DH, 0AH ... MOV AH,40H ; Zapros pechati MOV BX,04 ; Fajlovyj nomer printera MOV CX,25 ; 25 simvolov LEA DX,HEADG ; Oblast' vyvoda INT 21H ; Vyzov DOS Assembler dlya IBM PC. Glava 19 3 V sluchae oshibki operaciya ustanavlivaet flag CF i vozvrashcha et kod oshibki v registre AX. PROGRAMMA: POSTRANICHNAYA PECHATX S ZAGOLOVKAMI ------------------------------------------------------------ Programma, privedennaya na ris.19.1, analogichna programme na ris.9.1, za isklyucheniem togo, chto posle vvoda imen s klaviatury vyvodit ih ne na ekran, a na pechatayushchee ustroj stvo. Kazhdaya napechatannaya stranica soderzhit zagolovok i cherez dvojnoj interval spisok vvedennyh imen v sleduyushchem vide: List of Employee Names Page 01 Clancy Alderson Ianet Brown David Christie ... Programma podschityvaet chislo napechatannyh strok i pri dos tizhenii konca stranicy vypolnyaet progon do nachala sleduyushchej stranicy. V programme imeyutsya procedury: D10INPT Vydaet na ekran zapros i zatem vvodit imya s kla viatury. E10PRNT Vyvodit imya na pechatayushchee ustrojstvo (dlina ime ni beretsya iz vvodnogo spiska parametrov); v konce stranicy vyzyvaet proceduru M10PAGE. M10PAGE Vypolnyaet progon na novuyu stranicu, pechataet za golovok, sbrasyvaet schetchik strok i uveli chivaet schetchik stranic na edinicu. P100UT Obshchaya podprogramma dlya neposredstvennogo vyvoda na pechatayushchee ustrojstvo. V nachale vypolneniya neobhodimo napechatat' zagolovok, no ne delat' pered etim perevod stranicy. Poetomu procedura M10PAGE obhodit perevod stranicy, esli schetchik PAGECTR soderzhit 01 (nachal'noe znachenie). Pole PAGECTR opredeleno kak PAGECTR DB '01' V nachale vypolneniya neobhodimo napechatat' zagolovok, no ne delat' pered etim perevod stranicy. Poetomu procedura M10PAGE obhodit perevod stranicy, esli schetchik PAGECTR soderzhit 01 (nachal'noe znachenie). Pole PAGECTR opredeleno kak PAGECTR DB '01' V rezul'tate budet sgenerirovano chislo v ASCII kode - shest. 3031. Procedura M10PAGE uvelichivaet schetchik PAGECTR na 1 tak, chto znachenie stanovitsya posledovatel'no 3032, 3033 i t.d. |ti znacheniya korrektny do 3039, dalee sleduet 303A, chto budet raspechatano, kak dvoetochie (:). Poetomu, esli v pravom bajte polya PAGECTR poyavlyaetsya shest.3A, to eto znachenie Assembler dlya IBM PC. Glava 19 4 zamenyaetsya na shest.30, a k levomu bajtu pribavlyaetsya edinica. Takim obrazom shest.303A perekodiruetsya v shest. 3130, t.e. v 10 v simvol'nom predstavlenii. ------------------------------------------------------------ ------------------------------------------------------------ Ris.19.1. Postranichnaya pechat' s zagolovkom. Proverka na konec stranicy do (no ne posle) pechati imeni garantiruet, chto na poslednej stranice budet napechatano po krajnej mere odno imya pod zagolovkom. PECHATX ASCII-FAJLOV I TABULYACIYA ------------------------------------------------------------ Tabulyaciya, obespechivaemaya, naprimer, videoadapterami, zaklyuchaetsya v zamene odnogo simvola tabulyacii (kod 09) neskol'kimi probelami pri vyvode tak, chtoby sleduyushchaya poziciya byla kratna 8. Takim obrazom, standartnye pozicii tabulyacii yavlyayutsya 8, 16, 24 i t.d. Mnogie printery, odnako, ignoriruyut simvoly tabulyacii. Poetomu, takaya programma, kak DOS PRINT, prednaznachennaya dlya pechati ASCII fajlov (naprimer assemblernyh ishodnyh tekstov) proveryaet kazhdyj simvol, posylaemyj na printer. I, esli obnaruzhivaetsya simvol tabulyacii, to programma vydaet neskol'ko probelov do pozicii kratnoj 8. Programma, privedennaya na ris.19.2, vyvodit na ekran zapros na vvod imeni fajla i, zatem, pechataet soderzhimoe ukazannogo fajla. |ta programma v otlichie ot privedennoj na ris.17.3 (vyvod fajlov na ekran) osushchestvlyaet zamenu vyvodimyh simvolov tabulyacii na sootvetstvuyushchee chislo probelov. V rezul'tate simvol tabulyacii v poziciyah ot 0 do 7 privodit k perehodu na poziciyu 8, ot 8 do 15 - na 16 i t.d. Komandy, realizuyushchie dannuyu logiku, nahodyatsya v procedure G10XFER posle metki G60. Rassmotrim tri primera obrabotki simvola tabulyacii: Tekushchaya poziciya pechati: 1 9 21 Dvoichnoe znachenie: 00000001 00001001 00010101 Ochistka treh pravyh bitov: 00000000 00001000 00010000 Pribavlenie 8: 00001000 00010000 00011000 Novaya poziciya: 8 16 24 V programme organizovany sleduyushchie procedury: S10PRMP Zaprashivaet vvod imeni fajla. Nazhatie tol'ko klavishi Return privodit k zaversheniyu raboty programmy. E10OPEN Otkryvaet diskovyj fajl po ukazannomu imeni. G10XFER Kontroliruet konec sektora, konec fajla, konec oblasti vyvoda, simvoly "perevod stroki" i tabulya cii. Peresylaet obychnye simvoly v oblast' vyvoda. Assembler dlya IBM PC. Glava 19 5 P10PRNT Raspechatyvaet vyvodnuyu stroku i ochishchaet oblast' vyvoda. R10READ Schityvaet sektor iz diskovogo fajla. Kody "vozvrat karetki", "perevod stroki" i "progon stranicy" dejstvitel'ny dlya lyubyh printerov. Mozhno modifici rovat' programmu dlya podscheta raspechatyvaemyh strok i vypolneniya progona stranicy (shest.OC) pri dostizhenii, naprimer, stroki 62. ------------------------------------------------------------ ------------------------------------------------------------ Ris.19.2. Pechat' ASCII fajla. Nekotorye pol'zovateli predpochitayut ustanavlivat' simvoly "progon stranicy" v ASCII fajlah s pomoshch'yu tekstovogo redaktora v konkretnyh mestah teksta, naprimer, v konce assemblernyh procedur. Krome togo, mozhno izmenit' programmu dlya funkcii 05 bazovoj versii DOS. |ta funkciya vypolnyaet vyvod kazhdogo simvola neposredstvenno na printer. Takim obrazom mozhno isklyuchit' opredelenie i ispol'zovanie oblasti vyvoda. PECHATX POD UPRAVLENIEM BAZOVOJ DOS ------------------------------------------------------------ Dlya pechati v bazovoj versii DOS neobhodimo ustanovit' v registre AH kod funkcii 05, a v registr DL pomestit' raspechatyvaemyj simvol i, zatem, vypolnit' komandu INT 21H sleduyushchim obrazom: MOV AH,05 ;Zapros funkcii pechati MOV DL,char ;Raspechatyvaemyj simvol INT 21H ;Vyzov DOS S pomoshch'yu etih komand mozhno peredavat' na printer upravlyayushchie simvoly. Odnako, pechat', obychno, predpolagaet vyvod polnoj ili chastichnoj stroki teksta i poshagovuyu obrabotku oblasti dannyh, otformatirovannoj po strokam. Nizhe pokazazna programma pechati polnoj stroki. Snachala v registr SI zagruzhaetsya nachal'nyj adres oblasti HEADG, a v registr CX - dlina etoj oblasti. Cikl, nachinayushchijsya po metke P20, vydelyaet ocherednoj simvol iz oblasti HEADG i posylaet ego na printer. Tak kak pervyj simvol oblasti HEADG - "progon stranicy", a poslednie dva - "perevod stroki", to zagolovok pechataetsya v nachale novoj stranicy i posle nego sleduet dvojnoj interval. HEADG DB 0CH,'Industrial Bicycle Mfrs',0DH,0AH,0AH LEA SI,HEADG ;Ustanovka adresa i MOV CX,27 ; dliny zagolovka P20: MOV AH,05 ;Zapros funkcii pechati Assembler dlya IBM PC. Glava 19 6 MOV DL,[SI] ;Simvol iz zagolovka INT 21H ;Vyzov DOS INC SI ;Sleduyushchij simvol LOOP P20 Poka printer ne vklyuchen, DOS vydaet soobshcheniya "Out of pap er". Posle vklyucheniya pitaniya programma nachinaet rabotat' normal'no. Dlya prekrashcheniya pechati mozhno nazhat' klavishi Ctrl/Break. SPECIALXNYE KOMANDY PRINTERA ------------------------------------------------------------ Vyshe uzhe byl pokazan ryad komand, kotorye yavlyayutsya osnovnymi dlya bol'shinstva pechatayushchih ustrojstv. Krome togo sushchestvuyut sleduyushchie komandy: Desyatichn. SHest. 15 0F Vklyuchit' uzkij format 14 0E Vklyuchit' shirokij format 18 12 Vyklyuchit' uzkij format 20 14 Vyklyuchit' shirokij format Est' komandy, kotorye raspoznayutsya po predshestvuyushchemu simvolu Esc (shest.IB). Nekotorye iz nih v zavisimosti ot pechatayushchego ustrojstva predstavleny nizhe: 1B 30 Ustanovit' plotnost' 8 strok na dyujm 1B 32 Ustanovit' plotnost' 6 strok na dyujm 1B 45 Vklyuchit' zhirnyj format 1B 46 Vyklyuchit' zhirnyj format Kody komand mozhno posylat' na printer dvumya raznymi sposobami: 1. Opredelit' komandy v oblasti dannyh. Sleduyushchij primer ustanavlivaet uzkij format, 8 strok na dyujm, zatem pechataet zagolovok s zavershayushchimi komandami "vozvrat karetki" i " perevod stroki": HEADG DB 0FH, 1BH, 30H, 'Title...', 0DH, 0AH 2. Ispol'zovat' komandy s neposredstvennymi dannymi: MOV AH,05 ;Zapros funkcii pechati MOV DL,0FH ;Vklyuchit' uzkij format INT 21H Vse posleduyushchie simvoly budut pechatat'sya v uzkom formate do teh por, poka programma ne vydast na printer komandu, vyklyuchayushchuyu etot format. Assembler dlya IBM PC. Glava 19 7 Privedennye komandy ne obyazatel'no rabotayut na printerah lyubyh modelej. Dlya proverki vozmozhnyh komand upravleniya sleduet oznakomit'sya s rukovodstvom konkretnogo pechatayushchego ustrojstva. PECHATX S POMOSHCHXYU BIOS INT 17H ------------------------------------------------------------ Preryvanie BIOS INT 17H obespechivaet tri razlichnye operacii, specificirovannye soderzhimym registra AH: AH=0: Dannaya operaciya vypolnyaet pechat' odnogo simvola na tri printera po nomeram 0,1 i 2 (standartnoe znachenie - 0). MOV AH,00 ;Zapros funkcii pechati MOV AL,char ;Simvol, vyvodimyj na pechat' MOV DX,00 ;Vybor printera | 0 INT 17H ;Vyzov BIOS Esli operaciya ne mozhet raspechatat' simvol, to v registre AH ustanavlivaetsya znachenie 01. AH=1: Inicializaciya porta pechatayushchego ustrojstva: MOV AH,01 ;Zapros na inicializaciyu porta MOV DX,00 ;Vybor porta | 0 INT 17H ;Vyzov BIOS Dannaya operaciya posylaet na printer simvol "progon stranicy", poetomu ee mozhno ispol'zovat' dlya ustanovki polozheniya "verh stranicy". Bol'shinstvo printerov vypolnyayut dannuyu ustanovku avtomaticheski pri vklyuchenii. AH=2: CHtenie sostoyanie porta printera: MOV AH,02 ;Funkciya chteniya sostoyaniya porta MOV DX,00 ;Vybor porta | 0 INT 17H ;Vyzov BIOS TEST AH,00101001B; Printer gotov? JNZ errormsg ;Net - vydat' soobshchenie ob oshibke Naznachenie funkcij AH=1 i AH=2 sostoit v opredelenii sostoyaniya printera. V rezul'tate vypolneniya etih funkcij bity registra AH mogut ustanavlivat'sya v 1: Bit Prichina 7 Ne zanyato 6 Podtverzhdenie ot printera 5 Konec bumagi 4 Vybran 3 Oshibka vvoda/vyvoda 0 Tajmaut Assembler dlya IBM PC. Glava 19 8 Esli prrinter vklyuchen, to operaciya vozvrashchaet shest.90 ili dvoichnoe 10010000 - printer "ne zanyat" i "vybran" - eto normal'noe sostoyanie gotovnosti. V sluchae negotovnosti printera ustanavlivayutsya bit 5 (konec bumagi ili bit 3 (oshibka vyvoda). Esli printer vyklyuchen, to operaciya vozvrashchaet shest.B0 ili dvoichnoe 10110000, ukazyvaya na "konec bumagi". Vypolnyaya programmu pri vyklyuchennom printere, BIOS ne vydaet soobshchenie avtomaticheski, poetomu predpolagaetsya, chto programma dolzhna sama proverit' i otreagirovat' na sostoyanie printera. Esli programma ne delaet etogo, to edinstvennoj indikaciej budet migayushchij kursor na ekrane displeya. Esli v etot moment vklyuchit' printer, to nekotorye vyhodnye dannye mogut byt' poteryany. Sledovatel'no, prezhde chem ispol'zovat' funkcii BIOS dlya pechati, sleduet proverit' sostoyanie porta printera i, esli budet obnaruzhena oshibka, to vydat' sootvetstvuyushchee soobshchenie. (Funkcii DOS vypolnyayut etu proverku avtomaticheski, hotya ih soobshchenie "Out of paper" otnositsya k razlichnym sostoyaniyam). Posle vklyucheniya printera, vyvod soobshchenij ob oshibke prekrashchaetsya i printer nachinaet normal'no rabotat' bez poteri dannyh. V processe raboty printer mozhet vyjti za stranicu ili byt' nechayanno vyklyuchen. Poetomu v programmah pechati sleduet predusmotret' proverku sostoyaniya printera pered kazhdoj popytkoj pechati. OSNOVNYE POLOZHENIYA NA PAMYATX ------------------------------------------------------------ ® Prezhde chem vyvodit' dannye na pechatayushchee ustrojstvo, vklyuchite printer i vstav'te v nego bumagu. ® Dlya zavershenii pechati ispol'zujte simvoly "perevod stroki" i "progon stranicy" dlya ochistki bufera printera. ® Funkcii DOS dlya pechati predusmatrivayut vyvod soobshchenij pri vozniknovenii oshibki printera. Funkcii BIOS vozvrashchayut tol'ko kod sostoyaniya. Pri ispol'zovanii BIOS INT 17H proveryajte sostoyanie printera pered pechat'yu. VOPROSY DLYA SAMOPROVERKI ------------------------------------------------------------ 19.1. Napishite programmu v rasshirennoj versii DOS dlya a) progona stranicy; b) pechati vashego imeni; v) perevoda stroki i pechati vashego adresa; g) perevoda stroki i pechati nazvaniya vashego goroda/shtata (respubliki); d) progona stranicy. 19.2. Peredelajte programmu iz predydushchego voprosa dlya bazovoj versii DOS. Assembler dlya IBM PC. Glava 19 9 19.3. Zakodirujte stroku, v kotoroj imeetsya sleduyushchaya informaciya: vozvrat karetki, progon stranicy, vklyuche nie uzkih bukv, zagolovok (lyuboe imya) i vyklyuchenie uzkih bukv. 19.4. Izmenite programmu iz voprosa 19.1 dlya ispol'zovaniya BIOS INT 17H. Obespech'te proverku sostoyaniya printera. 19.5. Izmenite programmu iz voprosa 19.1 tak, chtoby punkty b), v), g) vypolnyalis' po 5 raz. 19.6. Izmenite programmu na ris.19.1 dlya vypolneniya v bazovoj versii DOS. 19.7. Izmenite programmu na ris.19.2 tak, chtoby raspechatyvae mye stroki takzhe vyvodilis' na ekran. Assembler dlya IBM PC. Glava 20 18 GLAVA 20. Makrosredstva ------------------------------------------------------------ Makrosredstva Cel': Ob®yasnit' opredelenie i ispol'zovanie assemblernyh makrokomand. VVEDENIE ------------------------------------------------------------ Dlya kazhdoj zakodirovannoj komandy assembler generiruet odnu komandu na mashinnom yazyke. No dlya kazhdogo zakodirovannogo operatora kompilyatornogo yazyka Pascal ili C generiruetsya odin ili bolee (chashche mnogo) komand mashinnogo yazyka. V etom otnoshenii mozhno schitat', chto kompilyatornyj yazyk sostoit iz makro operatorov. Assembler MASM takzhe imeet makrosredstva, no makrosy zdes' opredelyayutsya programmistom. Dlya etogo zadaetsya imya makrosa, direktiva MACRO, razlichnye assemblernye komandy, kotorye dolzhen generirovat' dannyj makros i dlya zaversheniya makropredel