ksimal'noe znachenie v registre CX (20 v privedennom primere). Nazhatie klavishi Return (kod shest. 0D) ukazyvaet na zavershenie vvoda. Naprimer, posle vvoda teksta "PC Users Group" INAREA budet soderzhat': PC Users Group, shest.0D, shest.0A Posle vvedennogo teksta neposredstvenno sleduet simvol voz vrata koretki (shest. 0D), kotoryj byl vveden, i simvol konca stroki (shest. 0A), kotoryj ne byl vveden. V silu dannoj osobennosti maksimal'noe chislo simvolov i razmer oblasti vvoda dolzhny predusmatpivat' mesto dlya dvuh simvolov. Esli budet vvedeno cimvolov men'she maksimal'noogo znacheniya, to oblast' pamyati za vvedennymi simvolami sohranit prezhnee znachenie. V rezul'tate uspeshnoj operacii budet ochishchen flag CF (chto mozhno proverit') i v registre AX budet ustanovleno chislo bajt, vvedennyh s klaviatury. V predydushchem primere eto chislo budet ravno 14 plyus 2 dlya perevoda koretki i konca stroki, t.e.16. Sootvetstvuyushchim obrazom programma mozhet opredelit' dejstvitel'noe chislo vvedennyh simvolov. Hotya dannoe svoj stvo ves'ma trivial'no dlya otvetov tipa YES ili NO, ono mozhet byt' polezno dlya otvetov s pepemennoj dlinoj, takih, naprimer, kak imena. Oshibka vvoda mozhet vozniknut', esli opredelen nepravil' nyj nomer fajla. V etom sluchae budet ustanovlen flag CF i v registr AX budet pomeshchen kod oshibki (6 v dannom sluchae). Tak kak registr AX mozhet soderzhat' ili dlinu vvedennyh dannyh, ili kod oshibki, to edinstvennyj sposob opredeleniya nalichiya oshibki - proverka flaga CF. Esli vvodit' tekst, kotoryj prevyshaet maksimal'nuyu dlinu, ystanovlennuyu v registre CX, to budut prinimat'sya vse simvoly. Rassmotrim situaciyu, kogda registr CX soderzhit 08,a pol'zovatel' vvedet simvoly "PC Exchange". V rezul'tate pervye vosem' simvolov "PC Excha" popadut v oblast' vvoda bez kodov vozvrata karetki i konca stroki. V registre AX budet ustanovlena dlina 08. Sleduyushchaya komanda INT budet prinimat' dannye ne s klaviatury, a iz sobstvennogo bufera, poskol'ku tam eshche ostalis' predydushchie dannye. Takim obrazom, Assembler dlya IBM PC. Glava 8 183 v oblast' vvoda budut prinyaty simvoly "nge", simvol perevoda koretki i simvol novoj stroki, v registre AX budet ustanov leno znachenie 05. Obe operacii vvoda yavlyayutsya vpolne normal' nymi i flag CF budet ochishchen. Pervyj INT: PC Excha AX = 08 Vtoroj INT: nge,0D,0A AX = 05 Programma mozhet opredelit' fakt vvoda zakonchennogo teksta, esli a) v registre AX poluchitsya znachenie men'she, chem v registre CX ili b) esli soderzhimye AX i CX ravny, no poslednie dva simvola v oblasti vvoda - 0D i 0A. Vstroennye v DOS proverki po funkcii 0AH dlya vvoda s klaviatury imeyut bolee moshchnye sredstva. Ih vybor dlya ispol' zovaniya v programmah yavlyaetsya predpochtitel'nym. Uprazhnenie: Vvod dannyh Vypolnim uprazhnenie v kotorom mozhno prosledit' operaciyu vvoda c klaviaturry s pomoshch'yu otladchika DEBUG. Predpolagae maya programma pozvolyaet vvodit' do 12 simvolov, vklyuchaya simvoly konca karetki i konca stroki. Zagruzite DEBUG i posle vyvoda na ekran priglasheniya vvedite A 100 dlya vvoda assemblernyh komand, nachinaya c adresa 100. Ne zabud'te, chto DEBUG predpologaet, chto vse chisla vvodyatsya v shesnadcatirichnom formate. 100 MOV AH,3F 102 MOV BX,00 105 MOV CX,0C 108 MOV DX,10F 10B INT 21 10D JMP 100 10F DB ' ' Programma ustanavlivaet registry AH i BX dlya zaprosa na vvod c klaviatury, zanosit maksimal'nuyu dlinu vvoda v re gistr CX i zagruzhaet v registr DX znachenie 10F - oblast' DB v konce programmy. V etu oblast' budut pomeshchat'sya vvodimye simvoly. Kogda vy naberete vse komandy, nazhmite eshche raz Return. S pomoshch'yu komandy U 100,108 vypolnite disassemblirovanie programmy dlya proverki. Zatem ispol'zujte komandy R i T dlya trassirovki chetyreh komand MOV. Ostanovivshis' po adresu 10B, vvedite G 10D dlya vypolneniya komandy INT (vhodit' v BIOS ne sleduet). Teper' otladchik pozvolit vvesti dannye, zavershaemye klavishej Return. Prover'te soderzhimoe registra AX, sostoyanie flaga CF i ispol'zuya komandu D 10F, prosmot rite vvedennye dannye v pamyati. Dlya zaversheniya raboty vvedite komandu Q. ISPOLXZOVANIE SIMVOLOV VOZVRATA KARETKI, KONCA STROKI I TABULYACII DLYA VYVODA NA |KRAN Assembler dlya IBM PC. Glava 8 184 ------------------------------------------------------------ Assembler dlya IBM PC. Glava 9 200 GLAVA 9. |krannye operacii II: Rasshirennye vozmozhnosti ------------------------------------------------------------ |krannye operacii II: Rasshirennye vozmozhnosti Cel': Pokazat' bolee razvitye vozmozhnosti upravleniya ekranom, vklyuchaya prokrutku, invertirovanie, miganie, a takzhe ispol'zovanie sken-kodov dlya vvoda s klaviatury. VVEDENIE ------------------------------------------------------------ V glave 8 byli pokazany osnovnye vozmozhnosti sistemy dlya upravleniya vyvodom na ekran i vvoda s klaviatury. V dannoj glave privodyatsya bolee razvitye vozsozhnosti, obespechisayushchie prokrutku dannyh na ekrane i ustanovku bajta-atributa dlya podcherkivaniya, miganiya, vydeleniya yarkosti. Material pervogo razdela etoj glavy (po preryvaniyu BIOS 10) podhodit, kak dlya monohromnyh, tak i dlya cvetnyh displeev. Drugie rasshirennye vozmozhnosti vklyuchayut ispol'zovanie cken-kodov dlya opredeleniya nazhatoj klavishi ili kombinacii klavishej na klaviature. Monohromnyj displej Dlya raboty monohromnogo displeya imeetsya pamyat' ob®emom 4K, nachinayushchayasya po adresu shest. B0000 (displejnyj bufer). |ta pamyat' obespechivaet: - 2K dlya simvolov na ekrane(25 strok h 80 stolbcov); - 2K dlya bajtov-atributov, obespechivayushchih invertirovanie, miganie, vydelenie yarkost'yu i podcherkivanie. Cvetnoj/graficheskij displej Dlya raboty standartnogo cvetnogo graficheskogo displeya imeetsya 16 Kbajt pamyati (displejnyj bufer), nachinayushchijsya po adresu shest.B8000. Takoj displej mozhet yavlyat'sya tekstovym (dlya normal'nogo ASCII-koda) ili graficheskim i rabotat' kak v cvetnom, tak i v cherno-belom (BW) rezhime. Displejnyj bufer obespechivaet ekpannye stranicy, pronumerovannye ot 0 do 3 dlya ekrana na 80 ctolbcov i ot 0 do 7 dlya ekrana na 40 stolbcov. Nomer stranicy po umolchaniyu - 0. V sleduyushchej glave budet podrobno rassmotreno upravlenie cvetom i grafikoj. BAJT ATRIBUTOV ------------------------------------------------------------ Bajt atributov, kak dlya monohromnogo, tak i dlya grafiches kogo displeya v tekstovom (ne graficheskom) rezhime opredelyaet harakteristiki kazhdogo otobrazhaemogo simvola. Bajt-atribut imeet sleduyushchie 8 bit: Assembler dlya IBM PC. Glava 9 201 Fon Tekst Atribut: BL R G B I R G B Nomer bitov: 7 6 5 4 3 2 1 0 Bukvy RGB predstavlyayut bitovye pozicii, upravlyayushchie krasnym (red), zelenym (green) i sinim (blue) luchem v cvetnom monotore. Bit 7 (BL) ustanavlivaet miganie, a bit 3 (I) - uroven' yarkosti. Na monohromnyh monitorah tekst vysvechivaetsya zelenym ili oranzhevym na temnom fone, hotya v dannoj glave takoe izobrazhenie nazyvaetsya cherno-belym (BW). Dlya modifikacii atributov mozhno kombinirovat' bity sleduyushchim obrazom: |ffekt vydeleniya Fon Tekst RGB RGB Neotobrazhaemyj (chernyj po chernomu) 000 000 Podcherkivanie (ne dlya cveta) 000 001 Normal'nyj (belyj po chernomu) 000 111 Invertirovannyj (chernyj po belomu) 111 000 Cvetnye monitory ne obespechivayut podcherkivaniya; vmesto etogo ustanovka bit podcherkivaniya vybiraet sinij cvet dlya teksta i poluchaetsya otobrazhenie sinim po chernomu. Nizhe privedeny nekotorye atributy, osnovannye na kombinacii bitov fona, teksta, miganiya i vydeleniya yarkost'yu: Dvoichnyj SHest. |ffekt vydeleniya kod kod 0000 0000 00 Neotobrazhaemyj (dlya parolej) 0000 0111 07 Belyj po chernomu (normal'nyj) 1000 0111 87 Belyj po chernomu (miganie) 0000 1111 0F Belyj po chernomu (yarkij) 0111 0000 70 CHernyj po belomu (invertirovanyj) 1111 0000 F0 CHernyj po belomu (invert. migayushchij) |ti atributy podhodyat dlya tekstovogo rezhima, kak dlya mono hromnyh, tak i dlya cvetnyh displeev. V sleduyushchej glave budet pokazano, kak vybirat' konkretnye cveta. Dlya generacii atri buta mozhno ispol'zovat' komandu INT 10H. Pri etom registr BL dolzhen soderzhat' znachenie bajta-atributa, a registr AH odin iz sleduyushchih kodov: 06 (prokrutka vverh), 07 (prokrutka vniz), 08 (vvod atributa ili simvola), 09 (vyvod atributa ili simvola). Esli programma ustanovila nekotopyj atribut, to on ostaetsya takim, poka programma ego ne izmenit. Esli ustanovit' znachenie bajta atributa ravnym shest.00, to simvol voobshche ne budet otobrazhen. PRERYVANIE BIOS INT 10H ------------------------------------------------------------ Assembler dlya IBM PC. Glava 9 202 Preryvanie INT 10H obespechivaet upravlenie vsem ekranom. V registre AH ustanavlivaetsya kod, opredelyayushchij funkciyu preryvaniya. Komanda cohranyaet soderzhimoe regitrov BX, CX, DX, SI i BP. Nizhe opisyvaetsya vse vozmozhnye funkcii. AH=00: Ustanovka rezhima. Dannaya funkciya pozvolyaet pere klyuchat' cvetnoj monitor v tekstovyj ili graficheskij rezhim. Ustanovka pezhima dlya vypolnyaemoj v tekushchij moment programmy osushchestvlyaetsya c pomoshch'yu INT 10H. Pri ustanovke proishodit ochistka ekrana. Soderzhimoe registra AL mozhet byt' sleduyushchim: 00 40 h 25 cherno-belyj tekstovyj rezhim 01 40 h 25 standartnyj i6-cvetovoj tekstovyj rezhim 02 80 h 25 cherno-belyj tekstovyj rezhim 03 80 h 25 standartnyj 16-cvetovoj tekstovyj rezhim 04 320 h 200 standartnyj 4-cvetovoj graficheskij rezhim 05 320 h 200 cherno-belyj graficheskij rezhim 06 640 h 200 cherno-belyj graficheskij rezhim 07 80 h 25 cherno-belyj standartnyj monohromnyj 08 - 0A formaty dlya modeli PCjr 0D 320 h 200 16-cvetovoj graficheskij rezhim (EGA) 0E 640 h 200 16-cvetovoj graficheskij rezhim (EGA) 0F 640 h 350 cherno-belyj graficheskij rezhim (EGA) 10 640 h 350 64-cvetovoj graficheskij rezhim (EGA) EGA (Enhanced Graphics Adapter) - oboznachaet usovershenst vovannyj graficheskij adapter. Sleduyushchij primer pokazyvaet ustanovku standartnogo 16-cvetovogo tekstovogo rezhima MOV AH,00 ;Funkciya ustanovki rezhima MOV AL,03 ;Standartnyj cvetnoj tekst 80 h 25 INT 10H ;Vyzvat' BIOS Dlya opredeleniya tipa adaptera, ustanovlennogo v sisteme, sluzhit preryvanie BIOS INT 11H. Dannaya komanda vozvrashchaet v registre AX znachenie, v kotorom bity 5 i 4 ukazyvayut na video rezhim: 01 40 h 25 cherno-belyj rezhim v cvetnom adaptere 10 80 h 25 cherno-belyj rezhim v cvetnom adaptere 11 80 h 25 cherno-belyj rezhim v cherno-belom adaptere Programma, rabotayushchaya s neizvestnym tipom monitora, mozhet provepit' tip po registru AX posle INT 11H i zatem ustano vit' neobhodimyj rezhim. AH=01: Ustanovka razmera kursora. Kursor ne yavlyaetsya simvolom iz nabora ASCII-kodov. Komp'yuter imeet sobstvennoe apparatnoe obespechenie dlya upravleniya vidom kursora. Dlya etogo imeetsya special'naya obrabotka po INT preryvaniyu. Obychno simvol kursopa pohozh na simvol podcherkivaniya. Ispol'zuya INT 10H, mozhno upravlyat' vertikal'nym razmerom kursora: bity 4-0 v registre CH dlya verhnej linii Assembler dlya IBM PC. Glava 9 203 skanirovaniya, a bity 4-0 v registre CL - dlya nizhnej. Mozhno ustanovit' lyuboj pazmer kursora po vertikali: ot 0 do 13 dlya monohromnyh i EGA monitopov i ot 0 do 7 dlya bol'shinstva cvetnyh monitorov. Privedem primer dlya uvelicheniya razmera kursora ot ego verhnej do nizhnej linii skanirovaniya: MOV AH,01 ;Ustanovit' razmer kursora MOV CH,00 ;Verhnyaya liniya skanirovaniya MOV CL,13 ;Nizhnyaya liniya skanirovaniya INT 10H ;Vyzvat' BIOS V rezul'tate vypolneniya etih komand kursor prevratitsya v sploshnoj migayushchij pryamougol'nik. Mozhno ustanovit' lyuboj razmer kursora mezhdu verhnej i nizhnej granicami, naprimer, 04/08, 03/10 i t.d. Kursor sohranyaet svoj vid, poka programma ne izmenit ego. Ispol'zovanie razmerov 12/13 (dlya mono) i 6/7 (dlya cveta) perevodit kursor v ego normal'nyj vid. AH=02: Ustanovka pozicii kursora. |ta funkciya ustanavliva et kurcor v lyubuyu poziciyu na ekrane v sootvetstvii s koordi natami ctroki i stolbca. Nomer stranicy obychno raven 0, no mozhet imet' znachenie ot 0 do 3 pri 80 stolbcah na ekrane. Dlya ustanovki pozicii kursora neobhodimo zanesti v registr AH znachenie 02, v registr BH nomer stranicy i v registr DX koordinaty stroki i stolbca: MOV AH,02 ;Ustanovit' polozhenie kursora MOV BH,00 ;Stranica 0 MOV DH,stroka ;Stroka MOV DL,stolbec ;Stolbec INT 10H ;Vyzvat' BIOS AH=03: CHtenie tekushchego polozheniya kursora. Programma mozhet opredelit' polozhenie kursora na ekrane (stroku i stolbec), a takzhe pazmer kursora, sleduyushchim obrazom: MOV AH,03 ;Opredelit' polozhenie kursora MOV BH,00 ;Ustanovit' stranicu 0 INT 10H ;Vyzvat' BIOS Posle vozvrata registr DH budet soderzhat' nomer stroki, a registr DL - nomer stolbca. V registre CH budet verhnyaya liniya ckanirovaniya, a v registre CL - nizhnyaya. AH=04: CHtenie polozheniya svetovogo pera. Dannaya funkciya ispol'zuetsya v graficheskom rezhime dlya opredeleniya polozheniya svetovogo pepa. AH=05: Vybor aktivnoj stranicy. Novaya stranica ustanavli vaetsya dlya cvetnyh tekstovyh rezhimov ot 0 do 3. Dlya rezhima 40 h 25 vozmozhno ustanavlivat' do 8 stranic (ot 0 do 7), a dlya rezhima 80 h 25 - do 4 stranic (ot 0 do 3). Assembler dlya IBM PC. Glava 9 204 MOV AH,05 ;Ustanovit' aktivnuyu stranicu MOV AL,stranica ;Nomer stranicy INT 10H ;Vyzvat' BIOS AH=06: Prokrutka ekrana vverh. Kogda programma pytaetsya vydat' tekst na stroku nizhe poslednej na ekrane, to proisho dit perehod na verhnyuyu stroku. Dazhe esli s pomoshch'yu preryva niya budet specifipovan nulevoj stolbec, vse ravno predpola gaetsya novaya stroka, i nizhnie stroki na ekrane budut isporcheny. Dlya resheniya etoj problemy ispol'zuetsya prokrutka ekrana. Ranee kod 06 ispol'zovalsya dlya ochistki ekrana. V teksto vom rezhime ustanovka v registre AL znacheniya 00 privodit k polnoj prokrutke vverh vsego ekrana, ochishchaya ego probelami. Ustanovka nenulevogo znacheniya v registre AL opredelyaet kolichestvo strok prokrutki ekrana vverh. Verhnie stroki uhodyat s ekrana, a chistye stroki vvodyatsya snizu. Sleduyushchie komandy vypolnyayut prokrutku vsego ekrana na odnu stroku: MOV AX,0601H ;Prokrutit' na odnu stroku vverh MOV BH,07 ;Atribut: normal'nyj, cherno-belyj MOV CX,0000 ;Koordinaty ot 00,00 MOV DX,184FH ; do 24,79 (polnyj ekran) INT 10H ;Vyzvat' BIOS Dlya prokrutki lyubogo kolichestva strok neobhodimo ustano vit' sootvetstvuyushchee znachenie v registre AL. Registr BH soderzhit atribut dlya normal'nogo ili invertirovannogo otobra zheniya, miganiya, ustanovki cveta i t.d. Znacheniya v registrah CX i DX pozvolyayut prokruchivat' lyubuyu chast' ekrana. Nizhe ob®yasnyaetsya standartnyj podhod k prokrutke: 1. Opredelit' v elemente ROW (stroka) znachenie 0 dlya ustanovki stroki polozheniya kursora. 2. Vydat' tekst i prodvinut' kursor na sleduyushchuyu stroku. 3. Proverit', nahoditsya li kursor na poslednej stroke (CMP ROW,22). 4. Esli da, to uvelichit' element ROW (INC ROW) i vyjti. 5. Esli net, to prokrutit' ekran na odnu stroku i, ispol' zuya ROW pereustanovit' kursor. AH=07: Prokrutka ekrana vniz. Dlya tekstovogo rezhima prokrutka ekrana vniz oboznachaet udalenie nizhnih strok i vstavka chistyh strok sverhu. Registr AH dolzhen soderzhat' 07, znacheniya ostal'nyh registpov analogichny funkcii 06 dlya prokrutki vverh. AH=08: CHtenie atributa/simvola v tekushchej pozicii kursora. Dlya chteniya simvola i bajta atributa iz displejnogo bufera, kak v tekstovom, tak i v graficheskom rezhime ispol'zuyutsya sleduyushchie komandy: Assembler dlya IBM PC. Glava 9 205 MOV AH,08 ;Zapros na chtenie atr./simv. MOV BH,00 ;Stranica 0 (dlya tekstovogo rezh.) INT 10H ;Vyzvat' BIOS Dannaya funkciya vozvrashchaet v registre AL znachenie simvola, a v AH - ego atribut. V graficheskom rezhime funkciya vozvrashchaet shest. 00 dlya ne ASCII-kodov. Tak kak eta funkciya chitaet tol'ko odin cimvol, to dlya simvol'noj stroki neobhodima organizaciya cikla. AH=09: Vyvod atributa/simvola v tekushchuyu poziciyu kursora. Dlya vyvoda na ekran simvolov v tekstovom ili graficheskom rezhime s ustanovkoj miganiya, invertirovaniya i t.d. mozhno vospol'zovat'sya sleduyushchimi komandami: MOV AH,09 ;Funkciya vyvoda MOV AL,simvol ;Vyvodimyj simvol MOV BH,stranica ;Nomer stranicy (tekst.rezh.) MOV BL,atribut ;Atribut ili cvet MOV CX,povtorenie ;CHislo povtorenij simvola INT 10H ;Vyzvat' BIOS V registr AL dolzhen byt' pomeshchen vyvodimyj na ekran simvol. Znachenie v registre CX opredelyaet chislo povtorenij simvola na ekrane. Vyvod na ekran posledovatel'nosti razlichnyh simvo lov trebuet organizacii cikla. Dannaya funkciya ne peremeshchaet kursor. V sleduyushchem primere na ekran vyvoditsya pyat' migayushchih "serdechek" v invertirovannom vide: MOV AH,09 ;Funkciya vyvoda MOV AL,03H ;CHervi (kartochnaya mast') MOV BH,00 ;Stranica 0 (tekst. rezhim) MOV BL,0F0H ;Miganie, inversiya MOV CX,05 ;Pyat' raz INT 10H ;Vyzvat' BIOS V tekstovom (no ne v graficheskom) rezhime simvoly avtomati cheski vyvodyatsya na ekran i perehodyat s odnoj stroki na druguyu. Dlya vyvoda na ekran teksta zaprosa ili soobshcheniya neobhodimo sostavit' programmu, kotoraya ustanavlivaet v registre CX znachenie 01 i v cikle zagruzhaet v registr AL iz pamyati vyvodimye simvoly teksta. Tak kak registr CX v dannom sluchae zanyat, to nel'zya ispol'zovat' komandu LOOP. Krome togo, pri vyvode kazhdogo simvola neobhodimo dopolnitel'no prodvigat' kursor v sleduyushchij stolbec (funkciya 02). V graficheskom rezhime registr BL ispol'zuetsya dlya opredele niya cveta grafiki. Esli bit 7 raven 0, to zadannyj cvet zame nyaet tekushchij cvet tochki, esli bit 7 raven 1, to proishodit kombinaciya cvetov s pomoshch'yu komandy XOR. AH=0A: Vyvod simvola v tekushchuyu poziciyu kursora. Edinstven naya raznica mezhdu funkciyami 0A i 09 sostoit v tom, chto funkciya 0A ne ustanavlivaet atribut: Assembler dlya IBM PC. Glava 9 206 MOV AH,0AH ;Funkciya vyvoda MOV AL,simvol ;Vyvodimyj simvol MOV BH,stranica ;Nomer stranicy (dlya teksta) MOV CX,povtorenie ;CHislo povtorenij simvola INT 10H ;Vyzvat' BIOS Dlya bol'shinstva primenenij komanda preryvaniya DOS INT 21H bolee udobna. AH=0E: Vyvod v rezhime teletajpa. Dannaya funkciya pozvolyaet ispol'zovat' monitor, kak prostoj terminal. Dlya vypolneniya etoj funkcii neobhodimo ustanovit' v registre AH shest. znachenie 0E, v pegistr AL pomestit' vyvodimyj simvol, cvet teksta (v graficheskom rezhime) zanesti v registr BL i nomer stranicy dlya tekstovogo rezhima - v registr BH. Zvukovoj signal (kod 07H), vozvrat na odnu poziciyu (08H), konec stroki (0AH) i vozvrat karetki (0DH) dejstvuyut, kak komandy dlya formatizacii ekrana. Dannaya funkciya avtomaticheski prodvi gaet kursor, perevodit simvoly na sleduyushchuyu ctroku, vypolnya et prokrutku ekrana i sohranyaet tekushchie atributy ekrana. AH=0F: Poluchenie tekushchego video rezhima. Dannaya funkciya vozvrashchaet v registre AL tekushchij video rezhim (sm.funkciyu AH=00), v pegistre AH - chislo simvolov v stroke (20, 40 ili 80), v registre BH - nomer stranicy. AH=13: Vyvod simvol'noj stroki (tol'ko dlya AT). Dannaya funkciya pozvolyaet na komp'yuterah tipa AT vyvodit' na ekran simvol'nye stroki s ustanovkoj atributov i peremeshcheniem kursora: MOV AH,13H ;Funkciya vyvoda na ekran MOV AL,servis ;0, 1, 2 ili 3 MOV BH,stranica ; LEA BP,adres ;Adres stroki v ES:BP MOV CX,dlina ;Dlina stroki MOV DX,ekran ;Koordinaty na ekrane INT 10H ;Vyzvat' BIOS Vozmozhen sleduyushchij dopolnitel'nyj servis: 0 - ispol'zovat' atribut i ne peremeshchat' kursor; 1 - ispol'zovat' atribut i peremestit' kursor; 2 - vyvesti simvol, zatem atribut i ne peremeshchat' kursor; 3 - vyvesti simvol, zatem atribut i peremestit' kursor. PROGRAMMA: MIGANIE, INVERSIYA I PROKRUTKA ------------------------------------------------------------ Assembler dlya IBM PC. Glava 9 207 Programma, privedennaya na ris. 9.1, prinimaet vvod imen s klaviatury i vyvodit ih na ekran. Zapros vydaetsya v invertirovannom otobrazhenii, imena prinimayutsya v normal'nom otobrazhenii, a vyvod imen osushchestvlyaetsya s 40 stolbca v toj zhe stroke s miganiem i invertirovaniem: Name? Francis Bacon Francis Bacon [miganie] | | Stolbec 0 Stolbec 40 Dlya upravleniya polozheniem kursora v programme opredeleny peremennye ROW (vertikal'noe peremeshchenie vniz) i COL (gori zontal'noe peremeshchenie vpravo). Komanda INT 10H ne peremeshcha et kursor avtomaticheski. Programma vyvodit imena sverhu vniz, poka ne dostignet 20-j stroki. Posle etogo vypolnyaetsya prokrutka ekrana vverh na odnu stroku dlya kazhdogo novogo zaprosa. Dlya vvoda imen v procedure D10INPT ispol'zuetsya komanda DOS INT 21H. Dlya zameny na BIOS INT 10H neobhodimo: 1. Inicializirovat' schetchik dlya adresa oblasti vvoda i schetchik dlya dliny imeni. 2. Vypolnit' INT 10H (funkciya 08) s 08 v registre AH i 00 v BH. Funkciya vozvrashchaet kazhdyj simvol v registre AL. 3. Esli registr AL ne soderzhit simvola RETURN i schetchik dliny dostig maksimal'nogo znacheniya, vydat' zvukovoj signal i vyjti iz procedury. 4. Pereslat' soderzhimoe AL v oblast' vvoda imeni. 5. Esli registr AL soderzhit simvol RETURN, vyjti iz procedury. 6. Uvelichit' schetchik dliny i adres oblasti vvoda imeni. 7. Peremestit' kursor na odin stolbec. 8. Perejti na punkt 2. Pri vyhode iz procedury oblast' vvoda soderzhit imya i simvol RETURN, a schetchik - chislo vvedennyh simvolov. RASSHIRENNYJ ASCII KOD ------------------------------------------------------------ ASCII-kody ot 128 do 255 (shest. 80-FF) predstavlyayut soboj ryad special'nyh simvolov poleznyh pri formirovanii zaprosov, menyu, special'nyh znachkov s ekrannymi atributami. Naprimer, ispol'zuya cleduyushchie simvoly mozhno narisovat' pryamougol'nik: SHest. Simvol DA Verhnij levyj ugol BF Verhnij pravyj ugol C0 Nizhnij levyj ugol D9 Nizhnij pravyj ugol C4 Gorizontal'naya liniya B3 Vertikal'naya liniya Assembler dlya IBM PC. Glava 9 208 Sleduyushchie komandy s pomoshch'yu INT 10H vyvodyat gorizontal' nuyu liniyu na 25 pozicij v dlinu: MOV AH,09 ;Funkciya vyvoda na ekran MOV AL,0C4H ;Gorizontal'naya liniya MOV BH,00 ;Stranica 0 MOV BL,0FH ;Vydelenie yarkost'yu MOV CX,25 ;25 povtorenij MOV 10H ;Vyzvat' BIOS Napomnim, chto kursor ne peremeshchaetsya. Vyvod vertikal'noj linii vklyuchaet cikl, v kotorom kursor peremeshchaetsya vniz na odnu stroku i vyvoditsya simvol shest. B3. Dlya shtrihovki mozhet byt' polezen simvol s tochkami vnutri: SHest. Simvol B0 Odna chetvert' tochek (svetlaya shtrihovka) B1 Polovina tochek (srednyaya shtrihovka) B2 Tri chetverti tochek (temnaya shtrihovka) ------------------------------------------------------------ ------------------------------------------------------------ Ris. 9.1. Miganie, invertirovanie i prokrutka Mozhno izvlech' mnogo poleznyh idej, izuchaya programmnoe obespechenie s professional'no organizovannym vyvodom, ili samomu izobresti original'nye idei dlya otobrazheniya informacii. DRUGIE OPERACII VVODA/VYVODA V DOS ------------------------------------------------------------ Nizhe perechisleny drugie funkcii DOS, kotorye mogut okazat'sya poleznymi v rabote. Kod funkcii ustanavlivaetsya v registre AH i, zatem, vydaetsya komanda INT 21H. AH=01: Vvod s klaviatury s eho otobrazheniem. Dannaya funk ciya vozvrashchaet znachenie v registre AL. Esli soderzhimoe AL ne ravno nulyu, to ono predstavlyaet soboj standartnyj ASCII- cimvol, naprimer, bukvu ili cifru. Nulevoe znachenie v regist re AL svidetel'stvuet o tom, chto na klaviature byla nazhata special'naya funkcional'naya klavisha, naprimer, Nome, F1 ili PgUp. Dlya opredeleniya sken-koda klavish, neobhodimo povtorit' vyzov funkcii (sm. "Dopolnitel'nye funkcional'nye klavishi" v posleduyushchih razdelah). Dannaya funkciya reagiruet na zapros Ctrl/Break. AH=02: Vyvod simvola. Dlya vyvoda simvola na ekran v tekushchuyu poziciyu kursora neobhodimo pomestit' kod dannogo simvola v pegistr DL. Kody tabulyacii, vozvrata karetki i konca stroki dejstvuyut obychnym obrazom. Assembler dlya IBM PC. Glava 9 209 AH=07: Pryamoj vvod s klaviatury bez eho otobrazheniya. Dan naya funkciya rabotaet analogichno funkcii 01 s dvumya otlichiya mi: vvedennyj simvol ne otobrazhaetsya na ekrane, t.e. net eho, i otsutstvuet reakciya na zapros Ctrl/Break. AH=08: Vvod s klaviatury bez eho otobrazheniya. Dannaya funk ciya dejstvuet analogichno funkcii 01 s odnim otlichiem: vvedennyj simvol ne otobrazhaetsya na ekran, t.e. net eho. AH=0B: Proverka sostoyaniya klaviatury. Dannaya funkciya vozvrashchaet shest.FF v registre AL, esli vvod s klaviatury vozmozhen, v protivnom sluchae - 00. |to sredstvo svyazano s funkciyami 01, 07 i 08, kotorye ne ozhidayut vvoda s klaviatury. VVOD S KLAVIATURY PO KOMANDE BIOS INT 16H ------------------------------------------------------------ Komanda BIOS INT 16H vypolnyaet special'nuyu operaciyu, kotoraya v sootvetstvii s kodom v registre AH obespechivaet sleduyushchie tri funkcii vvoda s klaviatury. AH=00: CHtenie simvola. Dannaya funkciya pomeshchaet v registr AL ocherednoj ASCII simvol, vvedennyj s klaviatury, i ustanavlivaet sken kod v registre AH. (Sken-kody ob®yasnyayutsya v sleduyushchem razdele). Esli na klaviature nazhata odna iz special'nyh klavishej, naprimer, Nome ili F1, to v registr AL zanositsya 00. Avtomaticheskoe eho simvola na ekran po etoj funkcii ne proishodit. AH=01: Opredelenie nalichiya vvedennogo simvola. Dannaya funkciya sbrasyvaet flag nulya (ZF=0), esli imeetsya simvol dlya chteniya s klaviatury; ocherednoj simvol i sken-kod budut pomeshcheny v registry AL i AH sootvetstvenno i dannyj element ostanetsya v bufere. AH=02: Opredelenie tekushchego sostoyaniya klaviatury. Dannaya funkciya vozvrashchaet v registre AL sostoyanie klaviatury iz adresa pamyati shest. 417: Bit 7 Sostoyanie vstavki aktivno (Ins) 6 Sostoyanie fiksacii verhnego registra (Caps Lock) pereklyucheno 5 Sostoyanie fiksacii cifrovoj klaviatury (Num Lock) pereklyucheno 4 Sostoyanie fiksacii prokrutki (Scroll Lock) pereklyucheno 3 Nazhata kombinaciya klavishej Alt/Shift 2 Nazhata kombinaciya klavishej Ctrl/Shift 1 Nazhata levaya klavisha Shift 0 Nazhata pravaya klavisha Shift Assembler dlya IBM PC. Glava 9 210 FUNKCIONALXNYE KLAVISHI ------------------------------------------------------------ Klaviatura raspolagaet tremya osnovnymi tipami klavishej: 1. Simvol'nye (alfavitno-cifrovye) klavishi: bukvy ot a do z, cifry ot 0 do 9, simvoly %, $, # i t.d. 2. Funkcional'nye klavishi: Nome, End, Vozvrat na poziciyu, strelki, Return, Del, Ins, PgUp, PgDn i programmno- funkcional'nye klavishi. 3. Upravlyayushchie klavishi: Alt, Ctrl i Shift, kotorye rabotayut sovmestno s drugimi klavishami. Funkcional'naya klavisha ne vyrabatyvaet kakoj-libo simvol, no chashche formiruet zapros na nekotorye dejstviya. Apparatnaya realizaciya ne trebuet ot funkcional'nyh klavishej vypolneniya kakih-libo specificheskih dejstvij. Zadachej programmista yavlyaetsya opredelit', naprimer, chto nazhatie klavishi Nome dolzhno prisesti k ustanovke kursora v verhnij levyj ugol ekrana, ili nazhatie klavishi End dolzhno ustanovit' kursor v konec teksta na ekrane. Mozhno legko zaprogrammirovat' funkcional'nye klavishi dlya vypolneniya samyh razlichnyh dejstvij. Kazhdaya klavisha imeet sobstvennyj sken-kod ot 1 (Esc) do 83 (Del) ili ot shest.01 do shest.53. Posredstvom etih sken- kodov programma mozhet opredelit' nazhatie lyuboj klavishi. Nprimer, zapros na vvod odnogo simvola s klaviatury vklyuchaet zagruzku 00 v registr AH i obrashchenie k BIOS cherez INT 16H: MOV AH,00 ;Funkciya vvoda s klaviatury INT 16H ;Vyzvat' BIOS Dannaya operaciya imeet dva tipa otvetov v zavisimosti ot togo, nazhata simvol'naya klavisha ili funkcional'naya. Dlya simvola (naprimer, bukva A) klaviatura posylaet v komp'yuter dva elementa informacii: 1. ASCII-kod simvola A (shest.41) v registre AL; 2. Sken-kod dlya klavishi A (shest.1E) v registre AH. Esli nazhata funkcional'naya klavisha (naprimer, Ins) klaviatura takzhe peredaet dva elementa: 1. Nul' v registre AL; 2. Ssken-kod dlya klavishi Ins (shest.52) v registre AH. Assembler dlya IBM PC. Glava 9 211 Takim obrazom, posle vypolneniya komany INT 16H neobhodimo prezhde proverit' soderzhimoe registra AL. Esli AL soderzhit nul', to byla nazhata funkcional'naya klavisha, esli ne nul', to poluchen kod simvol'noj klavishi. Nizhe priveden primer takoj proverki: MOV AH,00 ;Funkciya vvoda INT 16H ;Vyzvat' BIOS CMP AL,00 ;Funkcional'naya klavisha? JZ exit ; da - vyjti Sken-Kody Na ris. 9.2 privedeny sken-kody dlya nekotoryh funkcional' nyh klavishej. Klaviatura imeet po dve klavishi dlya takih simvolov kak *, + i -. Nazhatie "zvezdochki", naprimer, ustanavlivaet kod simvola shest.2A v registre AL i odin iz dvuh sken-kodov v registre AH v zavisimosti ot togo, kakaya iz klavishej byla nazhata: shest.09 dlya zvezdochki nad cifroj 8 ili shest.29 dlya zvezdochki na klavishe PrtSc. Nizhe privedena logika proverki sken-koda dlya zvezdochki: CMP AL,2AH ;Zvezdochka? JNE EXIT1 ; net - vyjti CMP AH,09H ;Kakoj sken-kod? JE EXIT2 ------------------------------------------------------------ Funkcional'nye klavishi Sken-kody Alt/A - Alt/Z 1E - 2C F1 - F10 3B - 44 Home 47 Strelka vverh 48 PgUp 49 Strelka vlevo 4B Strelka vpravo 4D End 4F Strelka vniz 50 PgDn 51 Ins 52 Del 53 ------------------------------------------------------------ Ris. 9.2. Sken-kody nekotoryh funkcional'nyh klavishej Privedem primer programmy dlya ustanovki kursora v stroku 0 i ctolbec 0 pri nazhatii klavishi Nome (sken-kod 47): MOV AH,00 ;Vypolnit' vvod s klaviatury INT 16H ; CMP AL,00 ;Funkcional'naya klavisha? JNE EXIT1 ; net -- vyjti CMP AH,47H ;Sken-kod dlya klavishi Home? Assembler dlya IBM PC. Glava 9 212 JNE EXIT2 ; net -- vyjti MOV AH,02 ; MOV BH,00 ;Ustanovit' kursor MOV DX,00 ; po koordinatam 0,0 INT 10H ;Vyzvat' BIOS Funkcional'nye klavishi F1 - F10 generiruyut sken-kody ot shest.3B do shest.44. Sleduyushchij primer vypolnyaet proverku na funkcional'nuyu klavishu F10: CMP AH,44H ;Klavisha F10? JE EXIT1 ; Da Po adresu EXIT1 programma mozhet vypolnit' lyuboe neobhodimoe dejstvie. Polnyj spisok sken-kodov privoditsya v rukovodstve po yazyku BASIC. Tehnicheskoe opisanie IBM PC soderzhit podrobnoe opisanie vseh sken-kodov, a takzhe opisanie ispol'zovaniya klavishej Alt, Ctrl i Shift. OSNOVNYE POLOZHENIYA NA PAMYATX ------------------------------------------------------------ ® Monohromnyj displej ispol'zuet 4K bajt pamyati, 2K bajt na simvoly i 2K bajt na atributy dlya kazhdogo simvola. ® Cvetnoj displej ispol'zuet 16K bajt pamyati i mozhet rabo tat' v cvetnom ili cherno-belom (BW) rezhimah. Vozmozhno ispol'zovanie, kak tekstovogo rezhima dlya otobrazheniya ASCII-simvolov, tak i graficheskogo rezhima dlya lyubyh izobrazhenij. ® Bajt-atribut ispol'zuetsya i dlya monohromnyh displeev i dlya cvetnyh v tekstovom rezhime. Atribut obespechivaet miganie, invertirovanie i vydelenie yarkost'yu. Dlya cvetnyh displeev v tekstovom rezhime bity RGB pozvolyayut vybirat' cveta, no ne imeyut rezhima podcherkivaniya. ® Komanda BIOS INT 10H obespechivaet polnuyu ekrannuyu obrabotku: ustanovku rezhimov, ustanovku polozheniya kursora, prokrutku ekrana, chtenie s klaviatury i vyvod na ekran. ® Esli vasha programma vyvodit vniz ekrana, to ne zabyvaj te vypolnyat' prokrutku prezhde, chem kursor vyjdet iz poslednej stroki. ® Pri ispol'zovanii atributov dlya miganiya i invertirova niya, ne zabyvajte sbrasyvat' ih v otklyuchennoe sostoyanie. ® Dlya funkcij po komande INT 10H, vyplnyayushchih chtenie i vyvod na ekran, pomnite o peremeshchenii kursora. ® Komanda BIOS INT 16H obespechivaet priem i raspoznavanie funkcional'nyh klavishej. ® Funkcional'nye klavishi predpolagayut zaprogrammirovannyj vyzov nekotoryh dejstvij. Assembler dlya IBM PC. Glava 9 213 ® Kazhdaya klavisha na klaviature imeet konkretnyj sken-kod, pronumerovannyj ot 1 (Esc) do 83 (Del), ili ot shest.01 do shest.53. ® Nazhatie simvol'noj klavishi na klaviature peredaet kod simvola v registr AL i sken-kod klavishi v registr AH. ® Nazhatie funkcional'noj klavishi na klaviature peredaet nul' v registr AL i sken-kod klavishi v registr AH. VOPROSY DLYA SAMOPROVERKI ------------------------------------------------------------ 9.1. Opredelite atributy ekrana dlya a) miganiya s podcherkiva niem, b) normal'noj yarkosti, v) invertirovaniya s vydeleniem yarkost'yu. 9.2. Sostavte procedury dlya a) ustanovki rezhima ekrana BW (cherno-belyj) na 80 stolbcov, b) ustanovki vida kurso ra, nachinayushchegosya na 5 linii skanirovaniya i zakanchivayu shchegosya na 12 linii, v) prokrutki ekrana na 10 strok, g) vyvoda desyati migayushchih simvolov shtrihovki s polovinoj tochek (shest. B1). 9.3. Napishite sken-kody dlya sleduyushchih funkcional'nyh klavishej: a) strelka vverh, b) klavisha F3, v) Home, g) PgUp. 9.4. Ispol'zuya otladchik DEBUG, proverte vozdejstvie na soder zhimoe registra AX pri nazhatii klavishej na klaviature. Dlya vvoda assemblernyh komand ispol'zujte komandu A 100 (Return). Vedite sleduyushchie komandy: MOV AH,00 INT 16H JMP 100 Ispol'zuya komandu U 100,104, disassemblirujte programmu i s pomoshch'yu G 104 vypolnite komandy MOV i INT. Na komande INT vypolnenie programmy ostanovit'sya i sistema perejdet v ozhidanie vashego vvoda. Dlya proverki registra AH nazhmite lyubuyu klavishu. Prodolzhaya vvodit' komandu G 104, i, nazhimaya razlichnye klavishi, prover'te rabotu programmy. Dlya vyhoda vvedite komandu Q. 9.5. Sostavte komandy dlya opredeleniya nazhatiya klavishi: esli nazhata klavisha PgDn, to neobhodimo ustanovit' kursor po koordinatam - stroka 24 i stolbec 0. Assembler dlya IBM PC. Glava 10 228 GLAVA 10. |krannye operacii III: Cvet i grafika ------------------------------------------------------------ |krannye operacii III: Cvet i grafika Cel': Pokazat' rasshirennye vozmozhnosti komp'yutera, svyazannye s ispol'zovaniem cveta i grafiki na ekrane. VVEDENIE ------------------------------------------------------------ Dannaya glava znakomit s ispol'zovaniem cveta dlya tekstovo go i graficheskogo rezhimov. Sushchestvuyut sleduyushchie tri tipa video monitopov, ispol'zuemye dlya izobrazheniya cvetnoj grafiki (v poryadke vozpastaniya stoimosti i kachestva): 1. Nemodificirovannyj cvetnoj televizionnyj priemnik (obychnyj domashnij televizor), primenyaemyj mnogimi dlya svoih komp'yuterov. 2. Kombinirovannyj videomonitor, prinimayushchij cvetovoj signal bez radiochastotnoj modulyacii, i ispol'zuemyj dlya peredachi po radiovolnam. Obespechivaet vysokoe kachestvo izobrazheniya. 3. RGB-monitor, posylayushchij vhodnye signaly na tri razdel' nye elektronnye pushki - krasnuyu, zelenuyu i siniyu dlya kazhdogo iz treh osnovnyh cvetov. YAvlyayas' naibolee dorogim, RGB-monitor obespechivaet nailuchshee kachestvo izobrazheniya. Standartnyj adapter dlya cvetnogo graficheskogo monitora (CGA - Color/Graphics Adapter) ispol'zuet 16K bajt pamyati, nachinayushchejsya po adresu shest.B8000, 8K bajt - dlya simvolov i 8K bajt dlya ih atributov. Pri rabote v formate 80h25 adapter mozhet hranit' chetyre stranicy (0-3) displejnogo bufera po 4K bajt kazhdaya. Pri rabote v formate 40h25 adapter mozhet hranit' vosem' stranic (0-7) po 2K bajt kazhdaya. Po umolchaniyu ispol'zuetsya nulevaya stranica (v nachale displejnoj pamyati). Programma mozhet vyvesti na ekran lyubuyu stranicu i v eto vremya formirovat' druguyu stranicu v pamyati dlya posleduyushchego vyvoda na ekran. Usovershenstvovannyj graficheskij adapter (EGA - Enhanced Graphics Adapter) obespechivaet bolee vysokuyu razreshayushchuyu sposobnost', po sravneniyu so standartnym cvetnym adapterom (CGA) i v bol'shinstve sluchaev yavlyaetsya sovmestimym s nim. Razreshayushchaya sposobnost' obespechivaet 320h200, 640h200 i 640h350 tochek na ekrane. Cvetnye adaptery imeyut dva osnovnyh rezhima raboty: tekstovoj (alfovitno-cifrovoj) i graficheskij, i vozmozhny takzhe dopolnitel'nye rezhimy mezhdu dvumya osnovnymi. Po umolchaniyu ispol'zuetsya tekstovoj rezhim. Ustanovka rezhima opisana v glave 9 v razdele "Prepyvanie BIOS INT 10H" Assembler dlya IBM PC. Glava 10 229 (AH=0). Dlya ustanovki graficheskogo rezhima ili vozvrata v tekstovoj rezhim ispol'zuetsya preryvanie BIOS INT 10H, kak eto pokazano v dvuh sleduyushchih primerah: MOV AH,00 ;Rezhim MOV AH,00 ;Rezhim MOV AL,03 ;Cvet+tekst MOV AL,04 ;Grafika srednego INT 10H INT 10H ; razresheniya TEKSTOVYJ (ALFAVITNO-CIFROVOJ) REZHIM ------------------------------------------------------------ Tekstovoj rezhim prednaznachen dlya obychnyh vychislenij s vy vodom bukv i cifr na ekran. Dannyj rezhim odinakov dlya cherno- belyh (BW) i dlya cvetnyh monitorov za isklyucheniem togo, chto cvetnye monitory ne podderzhivayut atribut podcherkivaniya. Tekstovoj rezhim obespechivaet rabotu s polnym naborom ASCII kodov (256 simvolov), kak dlya cherno-belyh (BW), tak i dlya cvetnyh monitorov. Kazhdyj simvol na ekrane mozhet otobrazhat' sya v odnom iz 16 cvetov na odnom iz vos'mi cvetov fona. Bordyur ekrana mozhet imet' takzhe odin iz 16 cvetov. Cveta Tremya osnovnymi cvetami yavlyayutsya krasnyj, zelenyj i sinij. Kombiniruya osnovnye cveta, drug s drugom, mozhno poluchit' vosem' cvetov, vklyuchaya chernyj i belyj. Ispol'zuya dva urovnya yarkosti dlya kazhdogo cveta, poluchim vsego 16 cvetov: I R G B I R G B CHernyj 0 0 0 0 Se