Piter Abel'. Assembler i programmirovanie dlya IBM PC ASSEMBLER I PROGRAMMIROVANIE DLYA IBM PC PITER ABELX Tehnologicheskij institut Britanskaya Kolumbiya Assembler dlya IBM PC 2 Soderzhanie ------------------------------------------------------------ Predislovie 1. Vvedenie v semejstvo personal'nyh komp'yuterov IBM PC Vvedenie Bity i bajty ASCII kod Dvojnye chisla SHesnadcaterichnoe predstavlenie Segmenty Registry Arhitektura personal'nyh komp'yuterov Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 2. Vypolnenie programmy Vvedenie Nachalo raboty Prosmotr pamyati Primer mashinnyh kodov: neposredstvennye dannye Primer mashinnyh kodov: opredelennye dannye Mashinnaya adresaciya Primer mashinnyh kodov: opredelenie razmera pamyati Svojstva otladchika Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 3. Format yazyka assemblera Vvedenie Kommentarii Format kodirovaniya Psevdokomandy Ukazateli pamyati i registrov Inicializaciya programmy Primer ishodnoj programmy Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 4. Assemblirovanie i vypolnenie programmy Vvedenie Vvod programmy Podgotovka programmy dlya vypolneniya Assemblirovanie programmy Kompanovka zagruzochnogo modulya Vypolnenie programmy Primer ishodnoj programmy Assembler dlya IBM PC 3 Fajl perekrestnyh ssylok Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 5. Opredelenie dannyh Vvedenie Psevdokomandy opredeleniya dannyh Opredelenie bajta (DB) Opredelenie slova (DW) Opredelenie dvojnogo slova (DD) Opredelenie "chetvernogo" slova (DQ) Opredelenie desyati bajt (DT) Neposredstvennye operandy Psevdokomanda (direktiva) EQU Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 6. Programmnye COM-fajly Vvedenie Razlichiya mezhdu EXE- i COM-fajlami Primer COM-fajla COM-stek Otladka Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 7. Logika i organizaciya programmy Vvedenie Komanda JMP Komanda LOOP Flagovyj registr Komandy uslovnogo perehoda Procedury i vyzovy (CALL) Stekovyj segment Programma: komandy dlinnoj peresylki Logicheskie komandy: AND, OR, XOR, TEST, NOT Programma: izmenenie nizhnego i verhnego registrov Sdvigi i rotaciya Organizaciya programmy Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 8. Raboty s ekranom I: Osnovnye vozmozhnosti Vvedenie Komanda preryvaniya: INT Ustanovka kursora Ochistka ekrana Komandy ekrana i klaviatury: Bazovaya DOS Vvod na ekran: standart DOS Assembler dlya IBM PC 4 Programma: Vvod nabora ASCII simvolov Vvod s klaviatury: Bazovaya DOS Programma: Vvod imen s klaviatury i vyvod na ekran Komandy ekrana i klaviatury: Rasshirennaya DOS Vyvod na ekran: Rasshirennaya DOS Vvod s klaviatury: Rasshirennaya DOS Ispol'zovanie CR, LF, TAB dlya vyvoda na ekran Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 9. Rabota s ekranom II: Rasshirennye vozmozhnosti Vvedenie Bajt atributov Preryvaniya BIOS Programma: miganie, videorevers, skrolling Rasshirennye ASCII kody Drugie komandy vvoda/vyvoda DOS BIOS INT 16H dlya vvoda s klaviatury Dopolnitel'nye funkcional'nye klavishi Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 10. Rabota s ekranom III: Cvet i grafika Vvedenie Tekstovyj (alfavitno-cifrovoj) rezhim Graficheskij rezhim Rezhim srednej razreshayushchej vozmozhnosti Programma: Ustanovka cveta i graficheskogo rezhima Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 11. Obrabotka strok Vvedenie Osobennosti komand obrabotki strok REP: Prefiks povtoreniya stroki MOVS: Peresylka stroki LODS: Zagruzka stroki STOS: Sohranenie stroki CMPS: Sravnenie strok SCAS: Skanirovanie stroki Skanirovanie i zamena Al'ternativnoe kodirovanie Dublirovanie shablona (obrazca) Programma: Vyravnivanie sprava pri vyvode na ekran Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 12. Arifmetika I: Obrabotka dvoichnyh dannyh Vvedenie Assembler dlya IBM PC 5 Slozhenie i vychitanie Bezznakovye i znakovye dannye Umnozhenie Sdvig registrov DX:AX Delenie Preobrazovanie znaka Processory Intel 8087 i 80287 Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 13. Arifmetika II: Obrabotka ASCII i BCD dannyh Vvedenie ASCII format Dvoichno-desyatichnyj format (BCD) Preobrazovanie ASCII formata v dvoichnyj format Preobrazovanie dvoichnogo formata v ASCII format Sdvig i okruglenie Programma: Raschet zarplaty Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 14. Obrabotka tablic Vvedenie Opredelenie tablic Pryamoj tablichnyj dostup Poisk v tablice Komanda perekodirovki (translyacii) (XLAT) Programma: Vyvod shestnadcaterichnyh i ASCII kodov Programma: Sortirovka elementov tablicy Operatory TYPE, LENGTH i SIZE Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 15. Diskovaya pamyat' I: Organizaciya Vvedenie Ob®em diska Katalog Tablica raspredeleniya fajlov (FAT) Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 16. Diskovaya pamyat' II: Funkcii bazovoj DOS Vvedenie Upravlyayushchij blok fajla: FCB Ispol'zovanie FCB dlya sozdaniya diskovogo fajla Programma: FCB dlya sozdaniya diskovogo fajla Posledovatel'noe chtenie diskovogo fajla Programma: FCB dlya chteniya diskovogo fajla Pryamoj dostup Assembler dlya IBM PC 6 Programma: Pryamoe chtenie diskovogo fajla Pryamoj blochnyj dostupa Programma: Pryamoe chtenie bloka Absolyutnyj diskovyj vvod/vyvod Drugie vozmozhnosti Programma: Vyborochnoe udalenie fajlov Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 17. Diskovaya pamyat' III: Funkcii rasshirennoj DOS Vvedenie Stroka ASCIIZ Nomer fajla i kody vozvrata po oshibkam Sozdanie diskovogo fajla Programma: Ispol'zovanie nomera dlya chteniya fajla ASCII fajly Drugie funkcii rasshirennoj DOS Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 18. Diskovaya pamyat' IV: Komandy vvoda/vyvoda BIOS Vvedenie Diskovye komandy BIOS Bajt sostoyaniya Programma: Ispol'zovanie BIOS dlya chteniya sektorov Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 19. Pechat' Vvedenie Upravlyayushchie simvoly dlya pechati Ispol'zovanie rasshirennoj DOS dlya pechati Programma: Postranichnaya pechat' s zagolovkami Pechat' ASCII fajlov i upravlenie tabulyacij Pechat' s ispol'zovaniem bazovoj DOS Special'nye komandy printera Pechat' s ispol'zovaniem BIOS INT 17H Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 20. Makrokomandy Vvedenie Prostoe makroopredelenie Ispol'zovanie parametrov v makrokomandah Kommentarii Ispol'zovanie makro vnutri makroopredeleniya Direktiva LOCAL Podklyuchenie biblioteki makroopredelenij Konkatenaciya (&) Assembler dlya IBM PC 7 Povtorenie: REPT, IRP i IRPC Uslovnye direktivy Direktiva EXITM Makrokomandy, ispol'zuyushchie IF i IFNDEF usloviya Makrokomandy, ispol'zuyushchie IFIDN uslovie Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 21. Svyaz' mezhdu podprogrammami Vvedenie Mezhsegmentnye vyzovy Atributy EXTRN i PUBLIC Programma: Ispol'zovanie EXTRN i PUBLIC dlya metok Programma: Ispol'zovanie PUBLIC v kodovom segmente Programma: Obshchie dannye v podprogrammah Peredacha parametrov Svyaz' Bejsik-interpritator - assembler Svyaz' Paskal' - assembler Svyaz' C - assembler Osnovnye polozheniya na pamyat' Voprosy dlya samoproverki 22. Zagruzchik programm Vvedenie COMMAND.COM Prefiks programmnogo segmenta Vypolnenie COM-programmy Vypolnenie EXE-programmy Primer EXE-programmy Funkciya zagruzki ili vypolneniya programm 23. BIOS i DOS preryvaniya Vvedenie Obsluzhivanie preryvanij BIOS preryvaniya DOS preryvaniya Funkcii DOS INT 21H Rezidentnye programmy Porty Generaciya zvuka 24. Spravochnik po direktivam assemblera Vvedenie Indeksnaya pamyat' Komandy assemblera Direktivy assemblera 25. Spravochnik po komandam assemblera Assembler dlya IBM PC 8 Vvedenie Oboznachenie registrov Bajt rezhima adresacii Dvuhbajtovye komandy Trehbajtovye komandy CHetyrehbajtovye komandy Komandy v alfavitnom poryadke Prilozheniya 1. ASCII kody 2. SHestnadcaterichno-desyatichnye preobrazovaniya 3. Zarezervirovannye slova 4. Rezhimy assemblirovaniya i kompanovki Otvety na nekotorye voprosy Indeksnyj ukazatel' Assembler dlya IBM PC 9 ------------------------------------------------------------ Predislovie Poyavlenie mikroprocessorov v 60-h godah cvyazano s razra botkoj integral'nyh shem (IS). Integral'nye shemy ob®edinyali v sebe razlichnye elektronnye komponenty v edinyj element na silikonovom "chipe". Razrabotchiki ustanovili etot kroshechnyj chip v ustrojstvo, napominayushchie sorokonozhku i vklyuchili ego v funkcioniruyushchie sistemy. V nachale 70-h mikrokomp'yutery na processore Intel 8008 vozvestili o pervom pokolenii mikro processorov. K 1974 godu poyavilos' vtoroe pokolenie mikroprocessorov obshchego naznacheniya Intel 8080. Dannyj uspeh pobudil drugie firmy k proizvodstvu etih ili analogichnyh processorov. V 1978 godu firma Intel vypustila processor tret'ego pokoleniya - Intel 8086, kotoryj obespechival nekotoruyu sovmes timost' s 8080 i yavlyalsya znachitel'nym prodvizheniem vpered v dannoj oblasti. Dlya podderzhki bolee prostyh ustrojstv i obes pecheniya sovmestimosti s ustrojstvami vvoda/vyvoda togo vremeni Intel razrabotal raznovidnost' processora 8086 - processor 8088, kotoryj v 1981 godu byl vybran firmoj iVM dlya ee personal'nyh komp'yuterov. Bolee razvitoj versiej processora 8088 yavlyaetsya procescor 80188, a dlya processora 8086 - processory 80186, 80286 i 80386, kotorye obespechili dopolnitel'nye vozmozhnosti i povy cili moshchnost' vychislenij. Mikroprocessor 80286, ustanovlen nyj v komp'yuterah IBM AT poyavilsya v 1984 godu. Vse eti processory imeyut otnoshenie k razvitoj arhitekture processo rov firmy Intel i oboznachayutsya kak iAPX 86, iAPX 88, iAPX 86, iAPX286 i iAPX386, gde APX - Intel Advanced Processor Architecture. Rasprostranenie mikrokomp'yuterov posluzhilo prichinoj pepe smotra otnosheniya k yazyku assemblera po dvum osnovnym prichi nam. Vo-pervyh, programmy, napisannye na yazyke assemblera, trebuyut znachitel'no men'she pamyati i vremeni vypolneniya. Vo-vtoryh, znanie yazyka assemblera i rezul'tiruyushchego mashin nogo koda daet ponimanie arhitektury mashiny, chto vryad li obespechivaetsya pri rabote na yazyke vysokogo urovnya. Hotya bol'shinstvo specialistov v oblasti programmnogo obespecheniya vedut razrabotki na yazykah vysokogo urovnya, takih kak Paskal' ili S, chto proshche pri napisanii programm, naibolee moshchnoe i effektivnoe programmnoe obespechenie polnost'yu ili chastichno napisano na yazyke assemblera. YAzyki vysokogo urovnya byli razrabotany dlya togo, chtoby izbezhat' special'noj tehnicheskoj osobennosti konkretnyh komp'yuterov. YAzyk assemblera, v svoyu ochered', razrabotan dlya konkretnoj specifiki komp'yutera ili tochnee dlya specifiki processora. Sledovatel'no, dlya togo, chtoby napisat' program mu na yazyke assemblera dlya konkretnogo komp'yutera, sleduet znat' ego arhitekturu i dannaya kniga soderzhit ves' neobhodi myj bazovyj material. Dlya raboty krome etogo materiala i cootvetstvuyushchih znanij neobhodimy sleduyushchee: Assembler dlya IBM PC 10 ® Dostup personal'nomu komp'yuteru IBM PC ili sovmestimomu s nim c operativnoj pamyat'yu - minimum 64K i odnim disko vodom. Luchshe, no ne obyazatel'no, esli budet dopolni tel'naya pamyat' i vtoroj diskovod ili vinchester. ® Znakomstvo s rukovodstvom po IBM PC. ® Disketa, soderzhashchaya translyator s yazyka assemblera, pred pochtitel'no, no ne obyazatel'no, poslednej versii. ® Kopiyu operacionnoj sistemy PC-DOS ili MS-DOS, luchshe pos lednej versii. Cleduyushchee yavlyaetsya ne obyazatel'nym dlya dannoj temy: ® Opyt programmirovaniya. Hotya eti znaniya mogut pomoch' bystree osvoit' nekotorye idei programmirovaniya, oni ne obyazatel'ny. ® Horoshie znaniya v elektronike ili shemotehnike. Dannaya kniga daet vsyu neobhodimuyu informaciyu ob arhitekture PC, kotoraya trebuetsya dlya programmirovaniya na yazyke assemblera. Operacionnye sistemy Naznachenie operacionnoj sistemy - pozvolit' pol'zovatelyu ypravlyat' rabotoj na komp'yutere: vyzyvat' dlya vypolneniya konkretnye programmy, obespechivat' sredstva dlya sohraneniya dannyh (katalog), imet' dostup k informacii na diske. Osnovnoj operacionnoj sistemoj dlya PC i sovmestimyh mo- delej yavlyaetsya MS-DOS firmy Microsoft, izvestnaya kak PC-DOS dlya IBM PC. Osobennosti nekotoryh versij: 2.0 obespechivaet podderzhku tverdogo diska (vinchestera), 3.0 primenyaetsya v komp'yuterah AT, 4.0 obespechivaet rabotu v mnogopol'zovatel' skom rezhime. Rassmotrenie professional'noj operacionnoj sistemy UNIX i ee analoga dlya PC XENIX vyhodit za ramki dannoj knigi. Podhod k knige Dannaya kniga prisleduet dve celi: ona yavlyaetsya uchebnikom, a tak zhe postoyannym spravochnym posobiem dlya raboty. CHtoby naibolee effektivno vospolnit' zatraty na mikrokomp'yuter i programmnoe obespechenie, neobhodimo tshchatel'no prorabatyvat' kazhduyu glavu i perechityvat' material, kotopyj ne srazu yasen. Klyuchevye momenty nahodyatsya v primerah programm, ih sleduet preobrazovat' v vypolnimye moduli i vypolnit' ih. Prorabatyvajte uprazhneniya, privedennye v konce kazhdoj glavy. Assembler dlya IBM PC 11 Pervye vosem' glav sostavlyayut bazovyj material dlya dannoj knigi i dlya yazyka assemblera. Posle etih glav mozhno prodolzhit' s glav 9, 11, 12, 14, 15, 19, 20 ili 21. Svyazannymi yavlyayutsya glavy s 8 po 10, 12 i 13, s 15 po 18, glavy s 22 po 25 coderzhat spravochnyj material. Kogda vy zavertshite rabotu s knigoj, vy smozhete: - ponimat' hardver personal'nogo komp'yutera; - ponimat' kody mashinnogo yazyka i shestnadcatirichnyj format; - ponimat' naznachenie otdel'nyh shagov pri assemblirova nii, kompanovke i vypolnenii; - pisat' programmy na yazyke assemblera dlya upravleniya ekranom, arifmeticheskih dejstvij, preobrazovaniya ASCII kodov v dvoichnye formaty, tablichnogo poiska i sortiro vki, diskovyh operacij vvoda/vyvoda; - vypolnyat' trassirovku pri vypolnenii programmy, kak sredstvo otladki; - pisat' sobstvennye makrokomandy; - kompanovat' vmeste otdel'nye programmy. Izuchenie yazyka assemblera i sozdanie rabotayushchih programm - eto zahvatyvayushchij process. Zatrachennoe vremya i usiliya nesomnenno budut voznagrazhdeny. Priznatel'nost' avtora Avtor blagodaren za pomoshch' i sotrudnichestvo vsem, kto vnes predlozheniya i prosmatrival rukopis'. Assembler dlya IBM PC 12 Predislovie perevodchika Kniga predstavlyaet soboj uchebnik po programmirovaniyu na yazyke Assemblera dlya personal'nyh komp'yuterah, sovmestimyh s IBM PC, adresovannyj prezhde vsego nachinayushchim. Obilie prime rov i ishodnyh tekstov programm predstavlyaet nesomnennoe dostoinstvo knigi, pozvolyayushchee nachinat' prakticheskoe programmirovanie uzhe s pervyh stranic knigi. Professional' nye programmisty smogut najti v knige mnogo poleznoj informacii. Stil' knigi ochen' zhivoj, prostoj, ne trebuyushchij nikakoj special'noj ili matematicheskoj podgotovki. Edinstvennoe, chto neobhodimo dlya raboty nad knigoj, - eto postoyannyj dostup k personal'nomu komp'yuteru. Perevodchik v osnovnom priderzhivalsya terminologii knig V.M.Bryabrina "Programmnoe obespechenie personal'nyh |VM" (1988), S.Pisareva, B.SHura "Programmno-apparatnaya organiza ciya komp'yutera IBM PC" (1987), V.L.Grigor'eva "Programmiro vanie odnokristal'nyh mikroprocessorov" (1987), a takzhe A.B.Borkovskogo "Anglo-russkij slovar' po programmirovaniyu i informatike" (1987). Vo mnogih sluchayah perevodchik priderzhivalsya "professional'nogo dialekta" maksimal'no shchadyashchego tehnicheskie terminy v originale. Takoj dialekt prinyat vo mnogih kollektivah programmistov-razrabotchikov, gde chashche vsego prihoditsya rabotat' s original'noj dokumentaciej na anglijskom yazyke, vvidu ostrejshego deficita otechestvennoj literatury po dannoj tematike. Bol'shinstvo primerov, privedennyh v dannoj knige, provereny na komp'yuterah sovmestimyh s IBM PC. Pri perevode bez special'nyh ogovorok ispravleny melkie netochnosti i opechatki originala. Tekst perevoda sformirovan i otredaktirovan v integriro vannoj sisteme Framework. Avtor perevoda blagodaren vsem, kto okazal pomoshch' pri vvode rukopisi na mashinnye nositeli. Osobuyu priznatel'nost' avtor perevoda vyrazhaet svoej zhene. Assembler dlya IBM PC 1 GLAVA 1. Vvedenie v semejstvo personal'nyh komp'yuterov IBM PC ------------------------------------------------------------ Vvedenie v semejstvo personal'nyh komp'yuterov IBM PC Cel': ob®yasnit' osobennosti tehnicheskih sredstv mikrokomp'yu tera i organizacii programmnogo obespecheniya. VVEDENIE ------------------------------------------------------------ Napisanie assemblernyh programm trebuet znanij organiza cii vsej sistemy komp'yutera. V osnove komp'yutera lezhat ponyatiya bita i bajta. Oni yavlyayutsya tem sredstvom, blagodarya kotorym v komp'yuternoj pamyati predstavleny dannye i komandy. Programma v mashinnom kode sostoit iz razlichnyh sigmentov dlya opredeleniya dannyh, dlya mashinnyh komand i dlya sigmenta, nazvannogo stekom, dlya hraneniya adresov. Dlya vypolneniya arif meticheskih dejstvij, peresylki dannyh i adresacii komp'yuter imeet ryad registrov. Dannaya glava soderzhit ves' neobhodimyj material po etim elementam komp'yutera, tak chto vy smozhete prodvinutsya k glave 2 k vashej pervoj programme na mashinnom yazyke. BITY I BAJTY ------------------------------------------------------------ Dlya vypolneniya programm komp'yuter vremenno zapisyvaet programmu i dannye v osnovnuyu pamyat'. |to pamyat', kotoruyu lyudi imeyut v vidu, kogda utverzhdayut, chto ih komp'yuter imeet, naprimer, 512K pamyati. Komp'yuter imeet takzhe ryad pegistrov, kotorye on ispol'zuet dlya vremennyh vychislenij. Minimal'noj edinicej informacii v komp'yutere yavlyaetsya bit. Bit mozhet byt' vyklyuchen, tak chto ego znachenie est' nul', ili vklyuchen, togda ego znachenie ravno edinice. Edinstvennyj bit ne mozhet predstavit' mnogo informacii v otlichie ot gruppy bitov. gruppa iz devyati bitov predstavlyaet soboj bajt; vosem' bitov kotorogo soderzhat dannye i odin bit - kontrol' na chet nost'. Vosem' bitov obespechivayut osnovu dlya dvoichnoj arifmetiki i dlya predstavleniya simvolov, takih kak bukva A ili simvol *. Vosem' bitov dayut 256 razlichnyh kombinacij vklyuchennyh i vyklyuchennyh sostoyanij: ot "vse vyklyucheny" (00000000) do "vse vklyucheny" (11111111). Naprimer, sochetanie vklyuchennyh i vyklyuchennyh bitov dlya predstavleniya bukvy A vyglyadit kak 01000001, a dlya cimvola * - 00101010 (eto mozhno ne zapominat'). Kazhdyj bajt v pamyati komp'yutera imeet unikal'nyj adres, nachinaya s nulya. Trebovanie kontrolya na chestnost' zaklyuchaetsya v tom, chto kolichestvo vklyuchennyh bitov a bajte vsegda dolzhno byt' ne chetno. Kontrol'nyj bit dlya bukvy A budet imet' znachenie edi- nica, a dlya simvola * - nol'. Kogda komanda obrashchaetsya k Assembler dlya IBM PC 2 bajtu v pamyati, komp'yuter proveryaet etot bajt. Esli chislo vklyuchennyh bitov yavlyaetsya chetnym, sistema vydaet soobshchenie ob oshibke. Oshibka chetnosti mozhet yavitsya rezul'tatom sboya oborudovaniya ili sluchajnym yavleniem, v lyubom sluchae, eto byvaet krajne redko. Mozhet poyavitsya vopros, otkuda komp'yuter "znaet", chto znacheniya bit 01000001 predstavlyayut bukvu A. Kogda na klavia ture nazhata klavisha A, sistema prinimaet signal ot etoj konkretnoj klavishi v bajt pamyati. |tot signal ustanavlivaet bity v znacheniya 01000001. Mozhno pereslat' etot bajt v pamyati i, esli peredat' ego na ekran ili printer, to budet sgenerirovana bukva A. Po soglazheniyu bity v bajte pronumerovany ot 0 do 7 sprava nalevo, kak eto pokazano dlya bukvy A: Nomera bit: 7 6 5 4 3 2 1 0 Znacheniya bit: 0 1 0 0 0 0 0 1 CHislo 2 v desyatoj stepeni ravno 1024, chto sostavlyaet odin kilobajt i oboznachaetsya bukvoj K. Naprimer, komp'yuter s pamyat'yu v 512K soderzhit 512 h 1024, t.e. 524288 bajt. Processor v PC i v sovmestimyh modelyah ispol'zuet 16- bitovuyu arhitekturu, poetomu on imeet dostup k 16-bitovym znacheniyam kak v pamyati, tak i v registrah. 16-bitovoe (dvuhbajtovoe) pole nazyvaetsya slovom. Bity v slove pronumerovany ot 0 do 15 sprava nalevo, kak eto pokazano dlya bukv PC: Nomera bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Znacheniya bit: 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 ASCII KOD ------------------------------------------------------------ Dlya celej standartizacii v mikrokomp'yuterah ispol'zuetsya amerikanskij nacional'nyj standartnyj kod dlya obmena informa ciej ASCII (American National Standard Code for Information Interchange). CHitaetsya kak "aski" kod (prim. perevodchika). Imenno po etoj prichine kombinaciya bit 01000001 oboznachaet bukvu A. Nalichie standartnogo koda oblegchaet obmen dannymi mezhdu razlichnymi ustrojstvami komp'yutera. 8-bitovyj rassshirennyj ASCII-kod, ispol'zuemyj v PC obespechivaet predstavlenie 256 simvolov, vklyuchaya simvoly dlya nacio nal'nyh alfavitov. V prilozhenii 1 priveden spisok simvolov ASCII koda, a v glave 8 pokazano kak vyvesti na ekran bol' shinstvo iz 256 simvolov. DVOICHNYE CHISLA ------------------------------------------------------------ Assembler dlya IBM PC 3 Tak kak komp'yuter mozhet razlichit' tol'ko nulevoe i edinich noe sostoyanie bita, to on rabotaet sisteme ischisleniya s bazoj 2 ili v dvoichnoj sisteme. Fakticheski bit unasledoval cvoe nazvanie ot anglijskogo "BInary digiT" (dvoichnaya cifra). Sochetaniem dvoichnyh cifr (bitov) mozhno predstavit' lyuboe znachenie. Znachenie dvoichnogo chisla opredelyaetsya otnositel' noj poziciej kazhdogo bita i nalichiem edinichnyh bitov. Nizhe pokazano vos'mibitovoe chislo soderzhashchee vse edinichnye bity: Pozicionnye vesa: 128 64 32 16 8 4 2 1 Vklyuchennye bity: 1 1 1 1 1 1 1 1 Samyj pravyj bit imeet vesovoe znachenie 1, sleduyushchaya cifra vlevo - 2, sleduyushchaya - 4 i t.d. Obshchaya summa dlya vos'mi edi nichnyh bitov v dannom sluchae sostavit 1 + 2 + 4 + ... + 128, ili 255 (2 v vos'moj stepeni - 1). Dlya dvoichnogo chisla 01000001 edinichnye bity predstavlyayut znacheniya 1 i 64, t.e. 65. No 01000001 predstavlyaet takzhe bukvu A! Dejstvitel'no, zdes' moment, kotoryj neobhodimo chetko uyasnit'. Bity 01000001 mogut predstavlyat' kak chislo 65, tak i bukvu A: - esli programma opredelyaet element dannyh dlya arifmeti cheskih celej, to 01000001 predstavlyaet dvoichnoe chislo ekvivalentnoe desyatichnomu chislu 65; - esli programma opredelyaet element dannyh (odin ili bo lee smezhnyh bajt), imeya v vidu opisatel'nyj harakter, kak, naprimer, zagolovok, togda 01000001 predstavlyaet soboj bukvu ili "stroku". Pi programirovanii eto razlichie stanovitsya ponyatnym, tak kak naznachenie kazhdogo elementa dannyh opredeleno. Dvoichnoe chislo neogranicheno tol'ko vos'm'yu bitami. Tak kak processor 8088 ispol'zuet 16-bitovuyu arhitekturu, on avtomaticheski operiruet s 16-bitovymi chislami. 2 v stepeni 16 minus 1 daet znachenie 65535, a nemnogo tvorcheskogo programmirovaniya pozvolit obrabatyvat' chisla do 32 bit (2 v stepeni 32 minus 1 ravno 4294967295) i dazhe bol'she. Dvoichnaya arifmetika Mikrokomp'yuter vypolnyaet arifmeticheskie dejstviya tol'ko v dvoichnom formate. Poetomu programmist na yazyke assemblera dolzhen byt' znakom s dvoichnym formatom i dvoichnym slozheniem: 0 + 0 = 0 1 + 0 = 1 1 + 1 = 10 1 + 1 + 1 = 11 Assembler dlya IBM PC 4 Obratnoe vnimanie na perenos edinichnogo bita v poslednih dvuh operaciyah. Teper', davajte slozhim 01000001 i 00101010. Bukvu A i simvol *? Net, chislo 65 i chislo 42: Dvoichnye Desyatichnye 01000001 65 00101010 42 01101011 107 Prover'te, chto dvoichnaya summa 01101011 dejstvitel'no ravna 107. Rassmotrim drugoj primer: Dvoichnye Desyatichnye 00111100 60 00110101 53 01110001 113 Otricatel'nye chisla Vse predstavlennye vyshe dvoichnye chisla imeyut polozhitel' nye znacheniya, chto oboznachaetsya nulevym znacheniem samogo levogo (starshego) razryada. Otricatel'nye dvoichnye chisla soderzhat edinichnyj bit v starshem razryade i vyrazhayutsya dvoich nym dopolneniem. T.e., dlya predstavleniya otricatel'nogo dvoichnogo chisla neobhodimo invertirovat' vse bity i pribavit' 1. Rassmotrim primer: CHislo 65: 01000001 Inversiya: 10111110 Plyus 1: 10111111 (ravno -65) Esli pribavit' edinichnye znacheniya k chislu 10111111, 65 ne poluchitsya. Fakticheski dvoichnoe chislo schitaetsya otricatel' nym, esli ego starshij bit raven 1. Dlya opredeleniya absolyut nogo znacheniya otricatel'nogo dvoichnogo chisla, neobhodimo povtorit' predydushchie operacii: invertirovat' vse bity i pribavit' 1: Dvoichnoe znachenie: 10111111 Inversiya: 01000000 Plyus 1: 01000001 (ravno +65) Summa +65 i -65 dolzhna sostavit' nol': 01000001 (+65) 10111111 (-65) (1)00000000 Assembler dlya IBM PC 5 Vse vosem' bit imeyut nulevoe znachenie. Perenos edinichnogo bita vlevo poteryan. Odnako, esli byl perenos v znakovyj pazryad i iz razryadnoj setki, to rezul'tat yavlyaetsya kor rektnym. Dvoichnoe vychitanie vypolnyaetsya prosto: inventiruetsya znak vychitaemogo i skladyvayutsya dva chisla. Vychtem, naprimer, 42 iz 65. Dvoichnoe predstavlenie dlya 42 est' 00101010, i ego dvoichnoe dopolnenie: - 11010110: 65 01000001 +(-42) 11010110 23 (i)00010111 Rezul'tat 23 yavlyaetsya korrektnym. V rassmotrennom primere proizoshel perenos v znakovyj razryad i iz razryadnoj setki. Esli spravedlivost' dvoichnogo dopolneniya ne srazu ponyat na, rassmotrim sleduyushchie zadachi: Kakoe znachenie neobhodimo pribavit' k dvoichnomu chislu 00000001, chtoby poluchit' chislo 00000000? V terminah desyatichnogo ischisleniya otvetom budet -1. Dlya dvoichnogo rassmotrim 11111111: 00000001 11111111 Rezul'tat: (1)00000000 Ignoriruya perenos (1), mozhno videt', chto dvoichnoe chislo 11111111 ekvivalentno desyatichnomu -1 i sootvetstvenno: 0 00000000 -(+1) -00000001 -1 11111111 Mozhno videt' takzhe kakim obrazom dvoichnymi chislami pred ctavleny umen'shayushchiesya chisla: +3 00000011 +2 00000010 +i 00000001 0 00000000 -1 11111111 -2 11111110 -3 11111101 Fakticheski nulevye bity v otricatel'nom dvoichnom chisle opredelyayut ego velichinu: rassmotrite pozicionnye znacheniya nulevyh bitov kak esli eto byli edinichnye bity, slozhite eti znacheniya i pribavte edinicu. Dannyj material po dvoichnoj arifmetike i otricatel'nym chislam budet osobenno polezen pri izuchenii glav 12 i 13. SHESTNADCATIRICHNOE PREDSTAVLENIE ------------------------------------------------------------ Assembler dlya IBM PC 6 Predstavim, chto neobhodimo prosmotret' soderzhimoe nekoto pyh bajt v pamyati (eto vstretitsya v sleduyushchej glave). Trebuetsya opredelit' soderzhimoe chetyreh posledovatel'nyh bajt (dvuh slov), kotorye imeyut dvoichnye znacheniya. Tak kak chetyre bajta vklyuchayut v sebya 32 bita, to specialisty razrabotali "stenograficheskij" metod predstavleniya dvoichnyh dannyh. Po etomu metodu kazhdyj bajt delitsya popolam i kazhdye polbajta vyrazhayutsya sootvetstvuyushchim znacheniem. rassmotrim sleduyushchie chetyre bajta: Dvoichnoe: 0101 1001 0011 0101 1011 1001 1100 1110 Desyatichnoe: 5 9 3 5 11 9 12 14 Tak kak zdes' dlya nekotoryh chisel trebuetsya dve cifry, rasshirim sistemu schisleniya tak, chtoby 10=A, 11=B, 12=C, 13=D, 14=E, 15=F. takim obrazom poluchim bolee sokrashchennuyu formu, kotoraya predstavlyaet soderzhimoe vysheukazannyh bajt: 59 35 B9 CE Takaya sistema schisleniya vklyuchaet "cifry" ot 0 do F, i tak kak takih cifr 16, ona nazyvaetsya shestnadcatirichnym predstav leniem. V tablice 1.1 privedeny dvoichnye, desyatichnye i shestnadcatirichnye znacheniya chisel ot 0 do 15. SHestnadcatirichnyj format nashel bol'shoe primenenie v yazyke assemblera. V listingah assemblirovaniya programm v shestnad- caterichnom formate pokazany vse adresa, mashinnye kody komand i soderzhimoe konstant. Takzhe dlya otladki pri ispol'zovanii programmy DOS DEBUG adresa i soderzhimoe bajtoa vydaetsya v shestnadcatirichnom formate. Esli nemnogo porabotat' s shestnadcatirichnym formatom, to mozhno bystro privyknut' k nemu. rassmotrim neskol'ko pro- ctyh primerov shestnadcatirichnoj arifmetiki. Sleduet pomnit', chto posle shestnadcatirichnogo chisla F sleduet shestnadcatirich noe 10, chto ravno desyatichnomu chislu 16. 6 5 F F 10 FF 4 8 1 F 10 1 A D 10 1E 20 100 ------------------------------------------------------------ ------------------------------------------------------------ Tablica 1.1. Dvoichnoe, desyatichnoe i shestnadcatirichnoe predstavleniya. Zamet'te takzhe, chto shest.20 ekvivalentno desyatichnomu 32, shest.100 - desyatichnomu 256 i shest.100 - desyatichnomu 4096. V dannoj knige shestnadcatirichnye chisla zapisyvayutsya, naprimer, kak shest.4B, dvoichnye chisla kak dv.01001011, i desyatichnye chisla, kak 75 (otsutstvie kakogo-libo opisaniya predpolagaet desyatichnoe chislo). Isklyucheniya vozmozhny, kogda baza chisla ochevidna iz konteksa. Dlya indikacii shest. chisla v assemblernoj programme neposredstvenno posle chisla Assembler dlya IBM PC 7 stavitsya simvol "H", naprimer, 25H (desyatichnoe znachenie 37). SHest. chislo vsegda nachinaetsya s decyatichnoj cifry 0-9, takim obrazom, B8H zapisyvaetsya kak 0B8H. V prilozhenii 2 pokazano kak preobrazovyvat' shestnadcati pichnye znacheniya v desyatichnye i obratno. Teper' rascmotrim nekotorye harakteristiki processora PC, kotorye neobxodimo ponyat' dlya perehoda k glave 2. SEGMENTY ------------------------------------------------------------ Segmentom nazyvaetsya oblast', kotoraya nachinaetsya na gra- nice paragrafa, t.e. po lyubomu adresu, kotoryj delitsya na 16 bez ostatka. Hotya segment mozhet raspolagat'sya v lyubom meste pamyati i imet' razmer do 64 Kbajt, on trebuet stol'ko pamyati, ckol'ko neobhodimo dlya vypolneniya programmy. Imeetsya tri glavnyh segmenta: 1. Segment kodov. Segment kodov soderzhit mashinnye komandy, kotorye budut vypolnyat'sya. Obychno pervaya vypolnyaemaya komanda nahoditsya v nachale etogo segmenta i operacion naya sistema peredaet upravlenie po adresu dannogo seg menta dlya vypolneniya programmy. Registr segmenta kodov (CS) adresuet dannyj segment. 2. Segment dannyh. Segment dannyh soderzhit opredelennye dannye, konstanty i rabochie oblasti, neobhodimye programme. Registr segmenta dannyh (DS) adresuet dannyj segment. 3. Segment steka. Stek soderzhit adresa vozvrata kak dlya programmy dlya vozvrata v operacionnuyu sistemu, tak i dlya vyzovov podprogramm dlya vozvrata v glavnuyu program mu. Registr segmenta steka (SS) adresuet dannyj segment. Eshche odin segmentnyj registr, registr dopolnitel'nogo segmenta (ES), prednaznachen dlya special'nogo ispol'zovaniya. Na pis.1.2 graficheski predstavleny registry SS, DS i CS. Posledovatel'nost' registrov i segmentov na praktike mozhet byt' inoj. Tri segmentnyh registra soderzhat nachal'nye adresa sootvetstvuyushchih segmentov i kazhdyj segment nachinaetsya na granice paragrafa. Vnutri programmy vse adresa pamyati otnositel'ny k nachalu cegmenta. Takie adresa nazyvayutsya smeshcheniem ot nachala segmenta. Dvuhbajtovoe smeshchenie (16-bit) mozhet byt' v predelah ot shest. 0000 do shest. FFFF ili ot 0 do 65535. Dlya obrashcheniya k lyubomu adresu v programme, komp'yuter skladyvaet adres v registre segmenta i smeshchenie. Naprimer, pervyj bajt v segmente kodov imeet smeshchenie 0, vtoroj bajt - 01 i tak dalee do smeshcheniya 65535. Assembler dlya IBM PC 8 V kachestve primera adresacii, dopustim, chto registr segmenta dannyh soderzhit shest. 045F i nekotoraya komanda obrashchaetsya k yachejke pamyati vnutri segmenta dannyh so smeshcheniem 0032. Nesmotpya na to, chto registr segmenta dannyh soderzhit 045F, on ukazyvaet na adres 045F0, t.e. na granice paragrafa. Dejstvitel'nyj adres pamyati poetomu budet sleduyushchij: Adres v DS: 045F0 Smeshchenie: 0032 Real'nyj adres: 04622 Kakim obrazom processory 8086/8088 adresuyut pamyat' v odin million bajt? V registre soderzhitsya 16 bit. Tak kak adres segmenta vsegda na granice paragrafa, mladshie chetyre bita adresa pavny nulyu. SHest. FFF0 pozvolyaet adresovat' do 65520 (plyus smeshchenie) bajt. No specialisty reshili, chto net smysla imet' mesto dlya bitov, kotorye vsegda ravny nulyu. Poetomu adres hranitsya v cegmentnom registre kak shest. nnnn, a komp'yuter polagaet, chto imeyutsya eshche chetyre nulevyh mladshih bita (odna shest. cifra), t.e. shest. nnnn0. Takim obrazom, shest. FFFF0 pozvolyaet adresovat' do 1048560 bajt. Esli vy somnevaetes', to dekodirujte kazhdoe shest. F kak dvoichnoe 1111, uchtite nulevye bity i slozhite znacheniya dlya edinichnyh bit. Processor 80286 ispol'zuet 24 bita dlya adresacii tak, chto FFFFF0 pozvolyaet adresovat' do 16 millionov bajt, a processor 80386 mozhet adresovat' do chetyreh milliardov bajt. REGISTRY ------------------------------------------------------------ Processory 8086/8088 imeyut 14 registrov, ispol'zuemyh dlya ypravleniya vypolnyayushchejsya programmoj, dlya adresacii pamyati i dlya obespecheniya arifmeticheskih vychislenij. Kazhdyj registr imeet dlinu v odno slovo (16 bit) i adresuetsya po imeni. Bity registra prinyato numerovat' sleva napravo: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Processory 80286 i 80386 imeyut ryad dopolnitel'nyh regist rov, nekotorye iz nih 16-bitovye. |ti registry zdes' ne rassmatrivayutsya. Segmentnye registry CS, DS, SS i ES Kazhdyj segmentnyj registr obespechivaet adresaciyu 64K pamyati, kotoraya nazyvaetsya tekushchim segmentom. Kak pokazano ranee, cegment vyravnen na granicu paragrafa i ego adres v segmentnom pegistre predpolagaet nalichie sprava chetyreh nulevyh bitov. Assembler dlya IBM PC 9 1. Registr CS. Registr segmenta koda soderzhit nachal'nyj adres segmenta koda. |tot adres plyus velichina smeshcheniya v komandnom ukazatele (IP) opredelyaet adres komandy, kotoraya dolzhna byt' vybrana dlya vypolneniya. Dlya obychnyh programm net neobhodimosti delat' ssylki na registr CS. 2. Registr DS. Registr segmenta dannyh soderzhit nachal'nyj adres segmenta dannyh. |tot adres plyus velichina smeshcheniya, opredelennaya v komande, ukazyvayut na konkretnuyu yachejku v segmente dannyh. 3. Registr SS. Registr segmenta steka soderzhit nachal'nyj adres v segmente steka. 4. Registr ES. Nekotorye operacii nad strokami ispol'zuyut dopolnitel'nyj segmentnyj registr dlya upravleniya adresa ciej pamyati. V dannom kontekste registr ES svyazan s in deksnym registrom DI. Esli neobhodimo ispol'zovat' re gistr ES, assemblernaya programma dolzhna ego inicializiro vat'. Registry obshchego naznacheniya: AX, BX, CX i DX Pri programmirovanii na assemblere registry obshchego naznacheniya yavlyayutsya "rabochimi loshadkami". Osobennost' etih registrov sostoit v tom, chto vozmozhna adresaciya ih kak odnogo celogo slova ili kak odnobajtovoj chasti. Levyj bajt yavlyaetsya starshej chast'yu (high), a pravyj - mladshej chast'yu (low). Naprimer, dvuhbajtovyj registr CX sostoit iz dvuh odnobajtovyh: CH i CL, i ssylki na registr vozmozhny po lyubomu iz etih treh imen. Sleduyushchie tri assemblernye komandy zasylayut nuli v registry CX, CH i CL, sootvetstvenno: MOV CX,00 MOV CH,00 MOV CL,00 1. Registr AX. Registr AX yavlyaetsya osnovnym summatorom i primenyaetsya dlya vseh operacij vvoda-vyvoda, nekotoryh operacij nad strokami i nekotoryh arifmeticheskih opera cij. Naprimer, komandy umnozheniya, deleniya i sdviga predpolagayut ispol'zovanie registra AX. Nekotorye komandy generiruyut bolee effektivnyj kod, esli oni imeyut ssylki na registr AX. AX: | AH | AL | 2. Registr BX. Registr BX yavlyaetsya bazovym registrom. |to edinstvennyj registr obshchego naznacheniya, kotoryj mozhet ispol'zovat'sya v kachestve "indeksa" dlya rasshirennoj adre sacii. Drugoe obshchee primenenie ego - vychisleniya. BX: | BH | BL | Assembler dlya IBM PC 10 3. Registr CX. Registr CX yavlyaetsya schetchikom. On neobhodim dlya upravleniya chislom povtorenij ciklov i dlya operacij sdviga vlevo ili vpravo. Registr CX ispol'zuetsya takzhe dlya vychislenij. CX: | CH | CL | 4. Registr DX. Registr DX yavlyaetsya registrom dannyh. On primenyaetsya dlya nekotoryh operacij vvoda/vyvoda i teh operacij umnozheniya i deleniya nad bol'shimi chislami, koto rye ispol'zuyut registrovuyu paru DX i AX. DX: | DH | DL | Lyubye registry obshchego naznacheniya mogut ispol'zovat'sya dlya clozheniya i vychitaniya