IT DOS versii 3.0 i strashe soderzhit komandu INT 62H, zagruzhayu shchuyu v registr BX adres tekushchego PSP, kotoryj mozhno ispol'zo vat' dlya dostupa k dannym v PSP. VYPOLNENIE COM-PROGRAMMY ------------------------------------------------------------ V otlichie ot EXE-fajla, COM-fajl ne soderzhit zagolovok na diske. Tak kak organizaciya COM-fajla namnogo proshche, to dlya DOS neobhodimo "znat'" tol'ko to, chto tip fajla - COM. Assembler dlya IBM PC. Glava 22 38 Kak opisano vyshe, zagruzhennym v pamyat' COM- i EXE-fajlam predshestvuet prefiks programmnogo segmenta. Pervye dva bajta etogo prefiksa soderzhat komandu INT 20H (vozvrat v DOS). Pri zagruzke COM-programmy DOS ustanavlivaet v chetyreh segmentnyh registrah adres pervogo bajta PSP. Zatem ustanavlivaetsya ukazatel' steka na konec 64 Kbajtovogo segmenta (shest.FFFE) ili na konec pamyati, esli segment ne dostatochno bol'shoj. V vershinu steka zanositsya nulevoe slovo. V komandnyj ukazatel' pomeshchaetsya shest.100 (razmer PSP). Posle etogo upravlenie peredaetsya po adresu registrovoj pary CS:IP, t.e. na adres neposredstvenno posle PSP. |tot adres yavlyaetsya nachalom vypolnyaemoj COM-programmy i dolzhen soderzhat' vypolnimuyu komandu. Pri vyhode iz programmy komanda RET zanosit v registr IP nulevoe slovo, kotoroe bylo zapisano v vershinu steka pri inicializacii. V etom sluchae v registrovoj pare CS:IP poluchaetsya adres pervogo bajta PSP, gde nahoditsya komanda INT 20H. Pri vypolnenii etoj komandy upravlenie peredaetsya v rezidentnuyu chast' COMMAND.COM. (Esli programma zavershaetsya po komande INT 20H vmesto RET, to upravlenie neposredstvenno peredaetsya v COMMAND.COM). VYPOLNENIE EXE-PROGRAMMY ------------------------------------------------------------ EXE-modul', sozdannyj kompanovshchikom, sostoit iz sleduyushchih dvuh chastej: 1) zagolovok - zapis', soderzhashchaya informaciyu po upravleniyu i nastrojke programmy i 2) sobstvenno zagruzoch nyj modul'. V zagolovke nahoditsya informaciya o razmere vypolnyaemogo modulya, oblasti zagruzki v pamyati, adrese steka i otnositel' nyh smeshcheniyah, kotorye dolzhny zapolnit' mashinnye adresa v sootvetstvii s otnositel'nymi shest. poziciyami: 00 SHest.4D5A. Kompanovshchik ustanavlivaet etot kod dlya iden tifikacii pravil'nogo EXE-fajla. 02 CHislo bajtov v poslednem bloke EXE-fajla. 04 CHislo 512 bajtovyh blokov EXE-fajla, vklyuchaya zagolo vok. 06 CHislo nastraivaemyh elementov. 08 CHislo 16-tibajtovyh blokov (paragrafov) v zagolovke, (neobhodimo dlya lokalizacii nachala vypolnyaemogo modulya, sleduyushchego posle zagolovka). OA Minimal'noe chislo paragrafov, kotorye dolzhny nahoditsya posle zagruzhennoj programmy. OC Pereklyuchatel' zagruzki v mladshie ili starshie adresa. Pri kompanovke programmist dolzhen reshit', dolzhna li ego programma zagruzhat'sya dlya vypolneniya v mladshie adresa pamyati ili v starshie. Obychnym yavlyaetsya zvgruzka v mlad shie adresa. Znachenie shest.0000 ukazyvaet na zagruzku v starshie adresa, a shest.FFFF - v mladshie. Inye znacheniya opredelyayut maksimal'noe chislo paragrafov, kotorye dolzhny nahodit'sya posle zagruzhennoj programmy. Assembler dlya IBM PC. Glava 22 39 OE Otnositel'nyj adres segmenta steka v vypolnyaemom module. 10 Adres, kotoryj zagruzchik dolzhen pomestit' v registr SP pered peredachej upravleniya v vypolnimyj modul'. 12 Kontrol'naya summa - summa vseh slov v fajle (bez ucheta perepolnenij) ispol'zuetsya dlya proverki poteri dannyh. 14 Otnositel'nyj adres, kotoryj zagruzchik dolzhen pomestit' v registr IP do peredachi upravleniya v vypolnyaemyj modul'. 16 Otnositel'nyj adres kodovogo segmenta v vypolnyaemom module. |tot adres zagruzchik zanosit v registr CS. 18 Smeshchenie pervogo nastraivaemogo elementa v fajle. 1A Nomer overlejnogo fragmenta: nul' oboznachaet, chto zago lovok otnositsya k rezidentnoj chasti EXE-fajla. 1C Tablica nastrojki, soderzhashchaya peremennoe chislo nastraivaemyh elementov, sootvetstvuyushchee znacheniyu po smeshcheniyu 06. Zagolovok imeet minimal'nyj razmer 512 bajtov i mozhet byt' bol'she, esli programma soderzhit bol'shoe chislo nastrai vaemyh elementov. Poziciya 06 v zagolovke ukazyvaet chislo elementov v vypolnyaemom module, nuzhdayushchihsya v nastrojke. Kazhdyj element nastrojki v tablice, nachinayushchejsya v pozicii 1C zagolovka, sostoit iz dvuhbajtovyh velichin smeshchenij i dvuhbajtovyh segmentnyh znachenij. Sistema stroit prefiks programmnogo segmenta sledom za rezidentnoj chas'yu COMMAND.COM, kotoraya vypolnyaet operaciyu zagruzki. Zatem COMMAND.COM vypolnyaet sleduyushchie dejstviya: ® Schityvaet formatirovannuyu chast' zagolovka v pamyat'. ® Vychislyaet razmer vypolnimogo modulya (obshchij razmer fajla v pozicii 04 minus razmer zagolovka v pozicii 08) i zagruzhaet modul' v pamyat' s nachala segmenta. ® Schityvaet elementy tablicy nastrojki v rabochuyu oblast' i pribavlyaet znacheniya kazhdogo elementa tablicy k nachalu segmenta (poziciya OE). ® Ustanavlivaet v registrah SS i SP znacheniya iz zagolovka i pribavlyaet adres nachala segmenta. ® Ustanavlivaet v registrah DS i ES segmentnyj adres prefiksa programmnogo segmenta. ® Ustanavlivaet v registre CS adres PSP i pribavlyaet veli chinu smeshcheniya v zagolovke (poziciya 16) k registru CS. Esli segment koda neposredstvenno sleduet za PSP, to smeshchenie v zagolovke ravno 256 (shest.100). Registrovaya para CS:IP soderzhit startovyj adres v kodovom segmente, t.e. nachal'nyj adres programmy. Posle inicializacii registry CS i SS soderzhat pravil'nye adresa, a registr DS (i ES) dolzhny byt' ustanovleny v programme dlya ih sobstvennyh segmentov dannyh: 1. PUSH DS ;Zanesti adres PSP v stek 2. SUB AX,AX ;Zanesti nulevoe znachenie v stek Assembler dlya IBM PC. Glava 22 40 3. PUSH AX ; dlya obespecheniya vyhoda iz programmy 4. MOV AX,datasegname ;Ustanovka v registre DX 5. MOV DS,AX ; adresa segmenta dannyh Pri zavershenii programmy komanda RET zanosit v registr IP nulevoe znachenie, kotoroe bylo pomeshcheno v stek v nachale vypolneniya programmy. V registrovoj pare CS:IP v etom sluchae poluchaetsya adres, kotoryj yavlyaetsya adresom pervogo bajta PSP, gde raspolozhena komanda INT 20H. Kogda eta komanda budet vypolnena, upravlenie perejdet v DOS. PRIMER EXE-PROGRAMMY ------------------------------------------------------------ Rassmotrim sleduyushchuyu tablicu kompanovki (MAP) programmy: Start Stop Length Name Class 00000H 0003AH 003BH CSEG CODE 00040H 0005AH 001BH DSEG DATA 00060H 0007FH 0020H STACK STACK Program entry point at 0000:0000 Tablica MAP soderzhit otnositel'nye (ne dejstvitel'nye) adresa kazhdogo iz treh segmentov. Simvol H posle kazhdogo znacheniya ukazyvaet na shestnadcatirichnyj format. Zametim, chto kompanovshchik mozhet organizovat' eti segmenty v posledovatel' nosti otlichnogo ot togo, kak oni byli zakodirovany v program me. V sootvetstvii s tablicej MAP kodovyj segment CSEG naho ditsya po adresu 00000 - etot otnositel'nyj adres yavlyaetsya nachalom vypolnyaemogo modulya. Dlina kodovogo segmenta sostavlyaet shest.003B bajtov. Sleduyushchij segment po imeni DSEG nachinaetsya po adresu shest.00040 i imeet dlinu shest.001B. Adres shest.00040 yavlyaetsya pervym posle CSEG adresom, vyrov nennym na granicu paragrafa (t.e. eto znachenie kratno shest.10). Poslednij segment, STACK, nachinaetsya po adresu shest.00060 - pervomu posle DSEG, adresu vyrovnennomu na granicu paragrafa. S pomoshch'yu otladchika DEBUG nel'zya proverit' soderzhimoe zagolovka, tak kak pri zagruzke programmy dlya vypolneniya DOS zameshchaet zagolovok prefiksom programmnogo segmenta. Odnako, na rynke programmnogo obespecheniya imeyutsya razlichnye servis nye utility (ili mozhno napisat' sobstvennuyu), kotorye pozvo lyayut prosmatrivat' soderzhimoe lyubogo diskovogo sektora v shestnadcatirichnom formate. Zagolovok dlya rassmatrivaemogo primera programmy soderzhit sleduyushchuyu informaciyu (soderzhimoe slov predstavleno v obratnoj posledovatel'nosti bajtov). 00 SHest.4D5A. 02 CHislo bajtov v poslednem bloke: 5B00. 04 CHislo 512 bajtovyh blokov v fajle, vklyuchaya zagolovok: 0200 (shest.0002h512=1024). Assembler dlya IBM PC. Glava 22 41 06 CHislo elementov v tablice nastrojki, nahodyashchejsya posle formatirovannoj chasti zagolovka: 0100, t.e. 0001. 08 CHislo 16 bajtovyh elementov v zagolovke: 2000 (shest.0020=32 i 32h16=512). 0C Zagruzka v mladshie adresa: shest.FFFF. 0E Otnositel'nyj adres stekovogo segmenta: 6000 ili shest. 60. 10 Adres dlya zagruzki v SP: 2000 ili shest.20. 14 Smeshchenie dlya IP: 0000. 16 Cmeshchenie dlya CS: 0000. 18 Cmeshchenie dlya pervogo nastraivaemogo elementa: 1E00 ili shest.1E. Posle zagruzki programmy pod upravleniem otladchika DEBUG registry poluchayut sleduyushchie znacheniya: SP = 0020 DS = 138F ES = 138F SS = 13A5 CS = 139F IP = 0000 Dlya EXE-modulej zagruzchik ustanavlivaet v registrah DS i ES adres prefiksa programmnogo segmenta, pomeshchennogo v dostupnoj oblasti pamyati, a v registrah IP, SS i SP - znacheniya iz zagolovka programmy. Registr SP Zagruzchik ispol'zuet shest.20 iz zagolovka dlya inicializa cii ukazatelya steka znacheniem dliny steka. V dannom primere stek byl opredelen, kak 16 DUP (?), t.e. 16 dvuhbajtovyh polej obshchej dlinoj 32 (shest.20) bajta. Registr SP ukazyvaet na tekushchuyu vershinu steka. Registr CS V sootvetstvii so znacheniem v registre DS posle zagruzki programmy, adres PSP raven shest.138F(0). Tak kak PSP imeet dlinu shest.100 bajtov, to vypolnyaemyj modul', sleduyushchij nepo sredstvenno posle PSP, nahoditsya po adresu shest.138F0+100= 139F0. |to znachenie ustanavlivaetsya zagruzchikom v registre CS. Takim obrazom, registr CS opredelyaet nachal'nyj adres kodovoj chasti programmy (CSEG). S pomoshch'yu komandy D CS:0000 v otladchike DEBUG mozhno prosmotret' v rezhime dampa mashinnyj kod v pamyati. Obratite vnimanie na identichnost' dampa i shestnadcatirichnoj chasti assemblernogo LST fajla krome operandov, otmechennyh simvolom R. Registr SS Dlya ustanovki znacheniya v registre SS zagruzchik takzhe ispol'zuet informaciyu iz zagolovka: Nachal'nyj adres PSP (sm.DS) 138F0 Dlina PSP 100 Assembler dlya IBM PC. Glava 22 42 Otnositel'nyj adres steka 60 Adres steka 13A50 Registr DS Zagruzchik ispol'zuet registr DS dlya ustanovki nachal'nogo adresa PSP. Tak kak zagolovok ne soderzhit startovogo adresa, to registr DS neobhodimo inicializirovat' v programme sleduyu shchim obrazom: 0004 B8 ---- R MOV AX,DSEG 0007 8E D8 MOV DS,AX Assembler ostavlyaet nezapolnennym mashinnyj adres segmenta DSEG, kotoryj stanovitsya elementom tablicy nastrojki v zago lovke. S pomoshch'yu otladchika DEBUG mozhno prosmotret' zavershen nuyu komandu v sleduyushchem vide: B8 A313 Znachenie A313 zagruzhaetsya v registr DS v vide 13A3. V rezul'tate imeem Registr Adres Smeshchenie CS 139F0 00 DS 13A30 40 SS 13A50 60 V kachestve uprazhneniya vypolnite trassirovku lyuboj vashej skompanovannoj programmy pod upravleniem otladchika DEBUG i obratite vnimanie na izmenyayushchiesya znacheniya v registrah: Komanda Izmenyayushchiesya registry PUSH DS IP i SP SUB AX,AX IP i AX (esli byl ne nul') PUSH AX IP i SP MOV AX,DSEG IP i AX MOV DS,AX IP i DS Registr DS soderzhit teper' pravil'nyj adres segmenta dannyh. Mozhno ispol'zovat' teper' komandu D DS:00 dlya prosmotra soderzhimogo segmenta dannyh DSEG i komandu D SS:00 dlya prosmotra soderzhimogo steka. FUNKCII ZAGRUZKI I VYPOLNENIYA PROGRAMMY ------------------------------------------------------------ Rassmotrim teper', kak mozhno zagruzit' i vypolnit' programmu iz drugoj programmy. Funkciya shest.4B daet vozmozhnost' odnoj programme zagruzit' druguyu programmu v pamyat' i pri neobhodimosti vypolnit'. Dlya etoj funkcii neobhodimo zagruzit' adres ASCIIZ-stroki v registr DX, a Assembler dlya IBM PC. Glava 22 43 adres bloka parametrov v registr BX (v dejstvitel'nosti v registrovuyu paru ES:BX). V registre AL ustanavlivaetsya nomer funkcii 0 ili 3: AL=0. Zagruzka i vypolnenie. Dannaya operaciya ustanavliva et prefiks programmnogo segmenta dlya novoj programmy, a takzhe adres podprogrammy reakcii na Cntrl/Break i adres peredachi upravleniya na sleduyushchuyu komandu posle zaversheniya novoj programmy. Tak kak vse registry, vklyuchaya SP, izmenyayut svoi znacheniya, to dannaya operaciya ne dlya novichkov. Blok parametrov, adresuemyj po ES:BX, imeet sleduyushchij format: Smeshchenie Naznachenie 0 Dvuhbajtovyj segmentnyj adres stroki parametrov dlya peredachi. 2 CHetyrehbajtovyj ukazatel' na komandnuyu stroku v PSP+80H. 6 CHetyrehbajtovyj ukazatel' na blok FCB v PSP+5CH. 10 CHetyrehbajtovyj ukazatel' na blok FCB v PSP+6CH. AL=3. Overlejnaya zagruzka. Dannaya operaciya zagruzhaet programmu ili blok kodov, no ne sozdaet PSP i ne nachinaet vypolnenie. Takim obrazom mozhno sozdavat' overlejnye programmy. Blok parametrov adresuetsya po registrovoj pare ES:BX i imeet sleduyushchij format: Smeshchenie Naznachenie 0 Dvuhbajtovyj adres segmenta dlya zagruzki fajla. 2 Dvuhbajtovyj faktor nastrojki zagruzochnogo modulya. Vozmozhnye kody oshibok, vozvrashchaemye v registre AX: 01, 02, 05, 08, 10 i 11. Programma na ris.22.2 zaprashivaet DOS vypolnit' komandu DIR dlya diskovoda D. Vypolnite etu programmu, kak EXE-modul'. (Avtor blagodaren zhurnalu PC Magazine za etu ideyu). ------------------------------------------------------------ ------------------------------------------------------------ Ris.22.2. Vypolnenie komandy DIR iz programmy. Assembler dlya IBM PC. Glava 23 55 GLAVA 23. Preryvaniya BIOS i DOS ------------------------------------------------------------ Preryvaniya BIOS i DOS Cel': Opisat' funkcii, dostupnye cherez preryvaniya BIOS i DOS. VVEDENIE ------------------------------------------------------------ Preryvanie predstavlyaet soboj operaciyu, kotoraya priosta navlivaet vypolnenie programm dlya special'nyh sistemnyh dejstvij. Neobhodimost' preryvanij obuslovleno dvumya osnovnymi prichinami: prednamerennyj zapros takih dejstvij, kak operacii vvoda-vyvoda na razlichnye ustrojstva i nepredvidennye programmnye oshibki (naprimer, perepolnenie pri delenii). Sistema BIOS (Basic Input/Output System) nahoditsya v ROM i upravlyaet vsemi preryvaniyami v sisteme. V predydushchih glavah uzhe ispol'zovalis' nekotorye preryvaniya dlya vyvoda na ekran diskovyh operacij vvoda-vyvoda i pechati. V etoj glave opisany razlichnye BIOS- i DOS-preryvaniya, rezidentnye programmy i komandy IN i OUT. OBSLUZHIVANIE PRERYVANIJ ------------------------------------------------------------ V komp'yuterah IBM PC ROM nahoditsya po adresu FFFF0H. Pri vklyuchenii komp'yutera processor ustanavlivaet sostoyanie sbrosa, vypolnyaet kontrol' chetnosti, ustanavlivaet v registre CS znachenie FFFFH, a v registre IP - nul'. Pervaya vypolnyaemaya komanda poetomu nahoditsya po adresu FFFF:0 ili FFFF0, chto yavlyaetsya tochkoj vhoda v BIOS. BIOS proveryaet razlichnye porty komp'yutera dlya opredeleniya i inicializacii podklyuchennyh ustroj stv. Zatem BIOS sozdaet v nachale pamyati (po adresu 0) tablicu preryvanij, kotoraya soderzhit adresa obrabotchikov preryvanij, i vypolnyaet dve operacii INT 11H (zapros spiska prisoedinennogo oborudovaniya) i INT 12H (zapros razmera fizicheskoj pamyati). Sleduyushchim shagom BIOS opredelyaet imeetsya li na diske ili diskete operacionnaya sistema DOS. Esli obnaruzhena sistemnaya disketa, to BIOS vypolnyaet preryvanie INT 19H dlya dostupa k pervomu sektoru diska, soderzhashchemu blok nachal'noj zagruzki. |tot blok predstavlyaet soboj programmu, kotoraya schityvaet sistemnye fajly IBMBIO.COM, IBMDOS.COM i COMMAND.COM s diska v pamyat'. Posle etogo pamyat' imeet sleduyushchee raspredelenie: Tablica vektorov preryvanij Dannye BIOS IBMBIO.COM i IBMDOS.COM Rezidentnaya chast' COMMAND.COM Assembler dlya IBM PC. Glava 23 56 Dostupnaya pamyat' dlya prikladnyh programm Tranzitnaya chast' COMMAND.COM Konec RAM (OZU) ROM BASIC ROM BIOS Vneshnie ustrojstva peredayut signal vnimaniya cherez kontakt INTR v processor. Processor reagiruet na etot zapros, esli flag preryvaniya IF ustanovlen v 1 (preryvanie razresheno), i (v bol'shinstve sluchaev) ignoriruet zapros, esli flag IF ustanovlen v 0 (preryvanie zapreshcheno). Operand v komande preryvaniya, naprimer, INT 12H, soderzhit tip preryvaniya, kotoryj identificiruet zapros. Dlya kazhdogo tipa sistema soderzhit adres v tablice vektorov preryvanij, nachinayushchejsya po adresu 0000. Tak kak v tablice imeetsya 256 chetyrehbajtovyh elementov, to ona zanimaet pervye 1024 bajta pamyati ot shest.0 do shest.3FF. Kazhdyj element tablicy ukazyvaet na podprogrammu obrabotki ukazannogo tipa preryvaniya i soderzhit adres kodovogo segmenta i smeshchenie, kotorye pri preryvanii ustanavlivayutsya v registry CS i IP sootvetstvenno. Spisok elementov tablicy vektorov preryvanij priveden na ris. 23.1. Preryvanie zanosit v stek soderzhimoe flagovogo registra, registra CS i registra IP. Naprimer, dlya preryvaniya 12H (kotoroe vozvrashchaet v registre AX razmer pamyati) adres elementa tablicy raven shest.0048 (shest.12 h 4 = shest.48). Operaciya vydelyaet chetyrehbajtovyj element po adresu shest. 0048 i zanosit dva bajta v registr IP i dva bajta v registr SS. Adres, kotoryj poluchaetsya v registrovoj pare CS:IP, predstavlyaet soboj adres nachala podprogrammy v oblasti BIOS, kotoraya poluchaet upravlenie. Vozvrat iz etoj podprogrammy osushchestvlyaetsya komandoj IRET (Interrupt Return), kotoraya vosstanavlivaet flagi i registry CS i IP iz steka i peredaet upravlenie na komandu, sleduyushchuyu za vypolnennoj komandoj preryvaniya. PRERYVANIYA BIOS ------------------------------------------------------------ V dannom razdele predstavleny osnovnye preryvaniya BIOS. INT 05H (Pechat' ekrana). Privodit k peredache soderzhimogo ekrana na pechatayushchee ustrojstvo. INT 05H primenyaetsya dlya vnutrennih celej, t.e. iz programm, klavishi Ctrl/PrtSc aktiviziruyut pechat' s klaviatury. Dannaya operaciya maskiruet preryvaniya i sohranyaet poziciyu kursora. ------------------------------------------------------------ Adres Funkciya preryanij (shest) (shest) 0-3 0 Delenie na nul' 4-7 1 Poshagovyj rezhim (trassirovka DEBUG) Assembler dlya IBM PC. Glava 23 57 8-B 2 Nemaskirovannoe preryvanie (NMI) C-F 3 Tochka ostanova (ispol'zuetsya v DEBUG) 10-13 4 Perepolnenie registra 14-17 5 Pechat' ekrana 18-1F 6,7 Zarezervirovano 20-23 8 Signal ot trajmera 24-27 9 Signal ot klaviatury 28-37 A,B,C,D Ispol'zuyutsya v komp'yuterah AT 38-3B E Signal ot disketnogo diskovoda 3C-3F F Ispol'zuetsya dlya printera 40-43 10 Upravlenie displeem (sm.gl. 8, 9, 10) 44-47 11 Zapros oborudovaniya (sm.gl.9) 48-4B 12 Zapros razmera pamyati (sm.gl.2) 4C-4F 13 Diskovye operacii vvoda-vyvoda (sm.gl.18) 50-53 14 Upravlenie kommunikacionnym adapterom 54-57 15 Kassetnye operacii i spec. funkcii AT 58-5B 16 Vvod s klaviatury (sm.gl.9) 5C-5F 17 Vyvod na printer (sm.gl.19) 60-63 18 Obrashchenie k BASIC, vstroennomu v ROM 64-67 19 Perezapusk sistemy 68-6B 1A Zapros i ustanovka vremeni i daty 6C-6F 1B Preryvanie ot klaviatury 70-73 1C Preryvanie ot tajmera 74-77 1D Adres tablicy parametrov displeya 78-7B 1E Adres tablicy parametrov diskovoda 7C-7F 1F Adres tablicy graficheskih simvolov 80-83 20 Normal'noe zavershenie programmy (DOS) 84-87 21 Obrashchenie k funkciyam DOS 88-8B 22 Adres obrabotki zaversheniya zadachi (DOS) 8C-8F 23 Adres reakcii po Ctrl/Break (DOS) 90-93 24 Adres reakcii na fatal'nuyu oshibku (DOS) 94-97 25 Absolyutnoe chtenie s diska (DOS) 98-9B 26 Absolyutnaya zapis' na disk (DOS) 97-9F 27 Sozdanie rezidentnoj programmy (DOS) AO-FF 28-3F Drugie funkcii DOS 100-1FF 40-7F Zarezervirovano 200-217 80-85 Zarezervirovano dlya BASIC 218-3C3 86-F0 Ispol'zuyutsya BASIC-interpretatorom 3C4-3FF F1-FF Zarezervirovano Primechanie: Preryvaniya 00-1F otnosyatsya k BIOS, preryvaniya 20-FF otnosyatsya k DOS i BASIC. ------------------------------------------------------------ Ris.23.1. Tablica adresov preryvanij. PRERYVANIYA BIOS ------------------------------------------------------------ V dannom razdele privedeny osnovnye preryvaniya BIOS. Assembler dlya IBM PC. Glava 23 58 INT 05H Pechat' ekrana. Vypolnyaet vyvod soderzhimogo ekrana na pechatayushchee ustrojstvo. Komanda INT 05H vypolnyaet dannuyu operaciyu iz programmy, a nazhatie klavishej Ctrl/PrtSc - s klaviatury. Operaciya zapreshchaet preryvaniya i sohranyaet poziciyu kursora. INT 10H Upravlenie displeem. Obespechivaet ekrannye i kla viaturnye operacii, detel'no opisannye v glave 9. INT 11H Zapros spiska prisoedinennogo oborudovaniya. Opre delyaet nalichie razlichnyh ustrojstv v sisteme, rezul'tiruyushchee znachenie vozvrashchaet v registre AX. Pri vklyuchenii komp'yutera sistema vypolnyaet etu operaciyu i sohranyaet soderzhimoe AX v pamyati po adresu shest.410. Znacheniya bitov v registre AX: Bit Ustrojstvo 15,14 CHislo podklyuchennyh printerov 13 Posledovatel'nyj printer 12 Igrovoj adapter 11-9 CHislo posledovatel'nyh adapterov styka RS232 7,6 CHislo disketnyh diskovodov, pri bite 0=1: 00=1, 01=2, 10=3 i 11=4 5,4 Nachal'nyj video rezhim: 00 = neispol'zuetsya 01 = 40h25 plyus cvet 10 = 80h25 plyus cvet 11 = 80h25 cherno-belyj rezhim 1 Znachenie 1 govorit o nalichii soprocessora 0 Znachenie 1 govorit o nalichii odnogo ili bolee diskovyh ustrojstv i zagruzka operacionnoj sistemy dolzhna osushchestvlyat'sya s diska INT 12H Zapros razmera fizicheskoj pamyati. Vozvrashchaet v registre AX razmer pamyati v kilobajtah, naprimer, shest.200 sootvetstvuet pamyati v 512 K. Dannaya operaciya polezna dlya vyravnivaniya razmera programmy v sootvetstvii s dostupnoj pamyat'yu. INT 13H Diskovye operacii vvoda-vyvoda. Obespechivaet ope racii vvoda-vyvoda dlya disket i vinchestera, rassmotrennye v glave 16. INT 14H Upravlenie kommunikacionnym adapterom. Obespechi vaet posledovatel'nyj vvod-vyvod cherez kommunikacionnyj port RS232. Registr DX dolzhen soderzhat' nomer (0 ili 1) adaptera styka RS232. CHetyre tipa operacii, opredelyaemye registrom AH, vypolnyayut priem i peredachu simvolov i vozvrashchayut v registre AX bajt sostoyaniya kommunikacionnogo porta. INT 15H Kassetnye operacii vvoda-vyvoda i special'nye funkcii dlya komp'yuterov AT. Obespechivaet operacii vvoda- vyvoda dlya kasetnogo magnitofona, a takzhe rasshirennye operacii dlya komp'yuterov AT. Assembler dlya IBM PC. Glava 23 59 INT 16H Vvod s klaviatury. Obespechivaet tri tipa komand vvoda s klaviatury, podrobno opisannye v glave 9. INT 17H Vyvod na printer. Obespechivaet vyvod dannyh na pe chatayushchee ustrojstvo. Podrobno rassmotreno v glave 19. INT 18H Obrashchenie k BASIC, vstroennomu v ROM. Vyzyvaet BASIC-interpretator, nahodyashchijsya v postoyannoj pamyati ROM. INT 19H Perezapusk sistemy. Dannaya operaciya pri dostupnom diske schityvaet sektor 1 s dorozhki 0 v oblast' nachal'noj zagruzki v pamyati (segment 0, smeshchenie 7C00) i peredaet upravlenie po etomu adresu. Esli diskovod ne dostupen, to operaciya peredaet upravlenie cherez INT 18H v ROM BASIC. Dannaya operaciya ne ochishchaet ekran i ne inicializiruet dannye v ROM BASIC, poetomu ee mozhno ispol'zovat' iz programmy. INT 1AH Zapros i ustanovka tekushchego vremeni i daty. Schity vaet i zapisyvaet pokazanie chasov v sootvetstvii so znacheniem v registre AH. Dlya opredeleniya prodolzhitel'nosti vypolneniya programmy mozhno pered nachalom vypolneniya ustanovit' chasy v 0, a posle schitat' tekushchee vremya. Otschet vremeni idet primerno 18,2 raza v sekundu. Znachenie v registre AH sootvetstvuet sleduyushchim operaciyam: AH=00 Zapros vremeni. V registre CX ustanavlivaetsya star shaya chast' znacheniya, a v registre DX - mladshaya. Esli posle poslednego zaprosa proshlo 24 chasa, to v registre AL budet ne nulevoe znachenie. AH=01 Ustanovka vremeni. Vremya ustanavlivaetsya po regist ram CX (starshaya chast' znacheniya) i DX (mladshaya chast' znache niya). Kody 02 i 06 upravlyayut vremenem i datoj dlya AT. INT 1FH Adres tablicy graficheskih simvolov. V graficheskom rezhime imeetsya dostup k simvolam s kodami 128-255 v 1K tablice, soderzhashchej po vosem' bajt na kazhdyj simvol. Pryamoj dostup v graficheskom rezhime obespechivaetsya tol'ko k pervym 128 ASCII-simvolam (ot 0 do 127). PRERYVANIYA DOS ------------------------------------------------------------ Vo vremya svoej raboty BIOS ispol'zuet dva modulya DOS: IBMBIO.COM i IBMDOS.COM. Tak kak moduli DOS obespechivayut bol'shoe kolichestvo raznyh dopolnitel'nyh proverok, to operaciya DOS obychno proshche v ispol'zovanii i menee mashinno zavisimy, chem ih BIOS analogi. Modul' IBMBIO.COM obespechivaet interfejs s BIOS nizkogo urovnya. |ta programma vypolnyaet upravlenie vvodom-vyvodom pri chtenii dannyh iz vneshnih ustrojstv v pamyat' i zapisi iz pamyati na vneshnie ustrojstva. Assembler dlya IBM PC. Glava 23 60 Modul' IBMDOS.COM soderzhit sredstva upravleniya fajlami i ryad servisnyh funkcij, takih kak blokirovanie i deblokiro vanie zapisej. Kogda pol'zovatel'skaya programma vydaet zapros INT 21H, to v programmu IBMDOS cherez registry peredaetsya opredelennaya informaciya. Zatem programma IBMDOS transliruet etu informaciyu v odin ili neskol'ko vyzovov IBMBIO, kotoraya v svoyu ochered' vyzyvaet BIOS. Ukazannye svyazi privedeny na sleduyushchej sheme: Pol'zovatel'skij Vysshij Nizshij ROM Vneshnij uroven' uroven' uroven' uroven' +-----------+ +----------+ +----------+ |Programmnyj| | DOS | | DOS | +----+ +----------+ |zapros v/v ||IBMDOS.COM||IBMBIO.COM||BIOS||Ustrojstvo| +-----------+ +----------+ +----------+ +----+ +----------+ Kak pokazano vyshe, preryvaniya ot shest.20 do shest.62 zarezervirovany dlya operacij DOS. Nizhe privedeny naibolee osnovnye iz nih: INT 20H Zavershenie programmy. Zapros zavershaet vypolnenie programmy i peredaet upravlenie v DOS. Dannyj zapros obychno nahoditsya v osnovnoj procedure. INT 21H Zapros funkcij DOS. Osnovnaya operaciya DOS, vyzyva yushchaya opredelennuyu funkciyu v sootvetstvii s kodom v registre AH. Naznachenie funkcij DOS opisano v sleduyushchem razdele. INT 22H Adres podprogrammy obrabotki zaversheniya zadachi. (sm.INT 24H). INT 23H Adres podprogrammy reakcii na Ctrl/Break. (sm.INT 24H). INT 24H Adres podprogrammy reakcii na fatal'nuyu oshibku. V etom elemente i v dvuh predydushchih soderzhatsya adresa, kotorye inicializiruyutsya sistemoj v prefikse programmnogo segmenta i, kotorye mozhno izmenit' dlya svoih celej. Podrobnosti prive deny v tehnicheskom opisanii DOS. INT 25H Absolyutnoe chtenie s diska. Sm.gl.17. INT 26H Absolyutnaya zapis' na disk. Sm.gl.17. INT 27H Zavershenie programmy, ostavlyayushchee ee rezedentnoj. Pozvolyaet sohranit' COM-programmu v pamyati. Podrobno dannaya operaciya rassmotrenna v posleduyushchem razdele "Rezidennye progarmmy". FUNKCII PRERYVANIYA DOS INT 21H ------------------------------------------------------------ Assembler dlya IBM PC. Glava 23 61 Nizhe privedeny bazovye funkcii dlya preryvaniya DOS INT 21H. Kod funkcii ustanavlivaetsya v registre AH: 00 Zavershenie programmy (analogichno INT 20H). 01 Vvod simvola s klaviatury s ehom na ekran. 02 Vyvod simvola na ekran. 03 Vvod simvola iz asinh. kommunikacionnogo kanala. 04 Vyvod simvola na asinh. kommunikacionnyj kanal. Assembler dlya IBM PC. Prilozheniya 1 PRILOZHENIE 1 ----------------------------------------------------------- Kody ASCII-simvolov Nizhe predstavleny pervye 128 simvolov ASCII-koda. V ruko vodstve po yazyku BASIC privedeny ostal'nye 128 simvolov. Na pomnim, chto shest.20 predstavlyaet standartnyj simvol probela. PRILOZHENIE 2 ------------------------------------------------------------ SHestnadcaterichno-desyatichnye preobrazovaniya V dannom prilozhenii predstavleny priemy preobrazovaniya mezhdu shestnadcaterichnym i desyatichnym formatami. V pervom razdele pokazan primer preobrazovaniya shest. A7B8 v desyatichnoe 42936, a vo vtorom - 42936 obratno v shest. A7B8. Preobrazovanie shestnadcaterichnogo formata v desyatichnyj --------------------------------------------------------- Dlya perevoda shest. A7B8 v desyatichnoe chislo neobhodimo posledovatel'no, nachinaya s samoj levoj shest. cifry (A), umnozhat' na 16 i skladyvat' so sleduyushchej cifroj. Tak kak operacii vypolnyayutsya v desyatichnom formate, to shest. chisla ot A do F neobhodimo preobrazovat' v desyatichnye ot 10 do 15. Pervaya cifra: A (10) 10 Umnozhit' na 16 *16 160 Pribavit' sleduyushchuyu cifru, 7 7 167 Umnozhit' na 16 *16 2672 Pribavit' sleduyushchuyu cifru, B (11) 11 2683 Umnozhit' na 16 *16 42928 Pribavit' sleduyushchuyu cifru, 8 8 Desyatichnoe znachenie 42936 Mozhno ispol'zovat' takzhe tablicu preobrazovaniya. Dlya shest. chisla A7B8 predstavim pravuyu cifru (8) kak poziciyu 1, sleduyushchuyu vlevo cifru (B) kak poziciyu 2, sleduyushchuyu cifru (7) kak poziciyu 3 i samuyu levuyu cifru (A) kak poziciyu 4. Iz tablicy B-1 vyberem znacheniya dlya kazhdoj shest. cifry: Dlya pozicii 1 (8), stolbec 1 8 Dlya pozicii 1 (8), stolbec 1 176 Dlya pozicii 1 (8), stolbec 1 1792 Dlya pozicii 1 (8), stolbec 1 40960 Assembler dlya IBM PC. Prilozheniya 2 Desyatichnoe znachenie 42936 Preobrazovanie desyatichnogo formata v shestnadcaterichnyj --------------------------------------------------------- Dlya preobrazovaniya desyatichnogo chisla 42936 v shestnadcate richnyj format neobhodimo snachala ishodnoe chislo 42936 razdelit' na 16; chislo, poluchivsheesya v ostatke, (6) yavlyaetsya mladshej shestnadcaterichnoj cifroj. Zatem poluchennoe chastnoe neobhodimo snova razdelit' na 16 i poluchennyj ostatok (11 ili B) daet sleduyushchuyu vlevo shestnadcaterichnuyu cifru. Prodol zhaya takim obrazom deleniya do teh por, poka v chastnom ne poluchitsya 0, poluchim iz ostatkov vse neobhodimye shestnadcate richnye cifry. CHastnoe Ostatok SHest. 42936 / 16 2683 8 8 (mladshaya cifra) 2683 / 16 167 11 B 167 / 16 10 7 7 10 / 16 0 10 A (starshaya cifra) Dlya preobrazovaniya chisel iz desyatichnogo formata v shestnad caterichnyj mozhno takzhe vospol'zovat'sya tablicej B-1. Dlya desyatichnogo chisla 42936 neobhodimo najti v tablice chislo ravnoe ili blizhajshee men'shee ishodnomu, i zapisat' soot vetstvuyushchuyu shestnadcaterichnuyu cifru i ee poziciyu. Zatem sleduet vychest' najdennoe desyatichnoe chislo iz 42936 i s polu chennoj raznost'yu prodelat' prodelat' tu zhe operaciyu: Des. SHest. Ishodnoe desyatichnoe chislo 42936 Vychest' blizhajshee men'shee 40960 A000 Raznost' 1976 Vychest' blizhajshee men'shee 1792 700 Raznost' 184 Vychest' blizhajshee men'shee 176 B0 Raznost' 8 8 Rezul'tiruyushchee shest. chislo 7 A7B8 PRILOZHENIE 3 ------------------------------------------------------------ Zarezervirovannye slova Bol'shinstvo iz sleduyushchih zarezervirovannyh slov pri is pol'zovanii ih dlya opredelenii elementov dannyh mogut prives ti k oshibkam assemblirovaniya (v ryade sluchaev - k ves'ma grubym): Imena registrov AH BH CH DH CS SS BP AL BL CL DL DS SI SP Assembler dlya IBM PC. Prilozheniya 3 AX BX CX DX ES DI Mnemokody AAA DIV JLE JS OR SBB AAD ESC JMP JZ OUT SCAS AAM HLT JNA LAHF POP SHL AAS IDIV JNAE LDS POPF SHR ADC IMUL JNB LEA PUSH STC ADD IN JNBE LES PUSHF STD AND INC JNE LOCK RCL STI CALL INT JNG LODS RCR STOS CBW INTO JNGE LOOP REP SUB CLC IRET JNL LOOPE REPE TEST CLD JA JNLE LOOPNE REPNE WAIT CLI JAE JNO LOOPNZ REPNZ XCHG CMC JB JNP LOOPZ REPZ XLAT CMP JBE JNS MOV RET XOR CMPS JCXZ JNZ MOVS ROL CWD JE JO MUL ROR DAA JG JP NEG SAHF DAS JGE JPE NOP SAL DEC JL JPO NOT SAR Direktivy assemblera ASSUME END EXTRN IFNB LOCAL PURGE COMMENT ENDIF GROUP IFNDEF MACRO RECORD DB ENDM IF IF1 NAME REPT DD ENDP IFB IF2 ORG SEGMENT DQ ENDS IFDEF INCLUDE OUT STRUC DT EQU IFDIF IRP PAGE SUBTTL DW EVEN IFE IRPC PROC TITLE ELSE EXITM IFIDN LABEL PUBLIC Prochie elementy yazyka BYTE FAR LENGTH MOD PRT THIS COMMENT GE LINE NE SEG TYPE CON GT LT NEAR SHORT WIDTH DUP HIGH LOW NOTHING SIZE WORD EQ LE MASK OFFSET STACK Assembler dlya IBM PC. Programmy. 9 Dvoich. Des. SHest. Dvoich. Des. SHest. 0000 0 0 1000 8 8 0001 1 1 1001 9 9 0010 2 2 1010 10 A 0011 3 3 1011 11 B 0100 4 4 1100 12 C 0101 5 5 1101 13 D 0110 6 6 1110 14 E 0111 7 7 1111 15 F +======================+ I D O S I I I +---------+ g - - - - - - - - - - -¶ + SS | Adres +------->I Segment steka I | + - - - - + I I | DS | Adres +----+ g - - - - - - - - - - -¶ | Pereme- + - - - - + +-->I Segment dannyh I | shchaemye CS | Adres +---+ I I | v +---------+ | g - - - - - - - - - - -¶ | pamyati +--->I Segment koda I | Segmentnye I I | registry g - - - - - - - - - - -¶ + I I I I I I I I +======================+ Pamyat' Assembler dlya IBM PC. Programmy. 10 | OU: Operacionnoe | SHI: SHinnyj interfejs ustrojstvo | | +--------+--------+ | | AH | AL | | +--------+--------+ | | BH | BL | | +--------+--------+ | | CH | CL | | +--------+--------+ | Upravlenie | DH | DL | | programmami +--------+--------+ | +-----------------+ | SP | | | CS | +-----------------+ | +-----------------+ | BP | | | DS | +-----------------+ | +-----------------+ | SI | | | SS | +-----------------+ | +-----------------+ | DI | | | ES | +-----------------+ | +-------+---------+ L | | | | | +-------+ V | V | Uprav-| SHina ======================'==============>| lenie |<==> 8088 L | L | shinoj | | | | +-------+ V | | +-----------------+ | +---+---+ | ALU: Arifmetiko-| | +---+ 1 | Ochered' | logicheskoe | | | +-------+ komand | ustrojstvo | | | | 2 | (CHetyre bajta) +->+ - - - - - - - - + | | +-------+ | | UU: Ustrojstvo | | | | 3 | | | upravleniya | | | +-------+ | + - - - - - - - - + | | | 4 | | | Flagovyj registr| | | +-------+ | +-----------------+ | | | | | | +-----------------+ | | +--+ Komandnyj |<--+--+ | ukazatel' | | +-----------------+ | | Assembler dlya IBM PC. Programmy. 11 Nachal'nyj adres Pamyat' Des. SHest. +-----------------------------+ 0K 00000 | RAM 256K osnovnaya operativ- | | naya pamyat' | +-----------------------------+ 256K 40000 | RAM 384K rasshirenie opera- | | tivnoj pamyati v kanale I/O | +-----------------------------+ 640K A0000 | RAM 128K graficheskij/ekran- | | nyj video bufer | +-----------------------------+ 768K C0000 | ROM 192K dopolnitel'naya | | postoyannaya pamyat' | +-----------------------------+ 960K F0000 | ROM 64K osnovnaya sistemnaya | | postoyannaya pamyat' | +-----------------------------+ Assembler dlya IBM PC. Programmy. 12 D>DEBUG -E CS:100 B8 23 01 05 25 00 -E CS:106 8B D8 03 D8 8B CB -E CS:10C 2B C8 2B C0 90 CB -R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0100 NV UP EI PL NZ NA PO NC 13C6:0100 B8230 MOV AX,0123 -T AX=0123 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0103 NV UP EI PL NZ NA PO NC 13C6:0103 052500 ADD AX,0025 -T AX=0148 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0106 NV UP EI PL NZ NA PE NC 13C6:0106 8BD8 MOV BX,