kak 8-mi, tak i 16-ti bitovyh znachenij. Registrovye ukazateli: SP i BP Registrovye ukazateli SP i BP obespechivayut sisteme dostup k dannym v segmente steka. Rezhe oni ispol'zuyutsya dlya operacij slozheniya i vychitaniya. 1. Registr SP. Ukazatel' steka obespechivaet ispol'zovanie steka v pamyati, pozvolyaet vremenno hranit' adresa i inog da dannye. |tot registr svyazan s registrom SS dlya adresa cii steka. 2. Registr BP. Ukazatel' bazy oblegchaet dostup k parametram: dannym i adresam peredannym cherez stek. Indeksnye registry: SI i DI Oba indeksnyh registra vozmozhny dlya rasshirennoj adresacii i dlya ispol'zovaniya v operaciyah slozheniya i vychitaniya. 1. Registr SI. |tot registr yavlyaetsya indeksom istochnika i primenyaetsya dlya nekotoryh operacij nad strokami. V dannom kontekste registr SI svyazan s registrom DS. 2. Registr DI. |tot registr yavlyaetsya indeksom naznacheniya i primenyaetsya takzhe dlya strokovyh operacij. V dannom kontekste registr DI svyazan s registrom ES. Registr komandnogo ukazatelya: IP Registr IP soderzhit smeshchenie na komandu, kotoraya dolzhna byt' vypolnena. Obychno etot registr v programme ne ispol'zu etsya, no on mozhet izmenyat' svoe znachenie pri ispol'zovanii otladchika DOS DEBUG dlya testirovaniya programmy. Flagovyj registr Assembler dlya IBM PC 11 Devyat' iz 16 bitov flagovogo registra yavlyayutsya aktivnymi i opredelyayut tekushchee sostoyanie mashiny i rezul'tatov vypolne niya. Mnogie arifmeticheskie komandy i komandy sravneniya izmenyayut sostoyanie flagov. Naznachenie flagovyh bitov: Flag Naznachenie O (Perepolnenie) Ukazyvaet na perepolnenie starshego bita pri arifmeticheskih komandah. D (Napravlenie) Oboznachaet levoe ili pravoe naprav lenie peresylki ili sravneniya strokovyh dannyh (dannyh v pamyati prevyshayushchih dlinu odnogo slova). I (Preryvanie) Ukazyvaet na vozmozhnost' vneshnih preryvanij. T (Poshagovyj rezhim) Obespechivaet vozmozhnost' raboty processora v poshagovom rezhime. Na primer, programma DOS DEBUG usta navlivaet dannyj flag tak, chto voz mozhno poshagovoe vypolnenie kazhdoj komandy dlya proverki izmeneniya soderzhimogo registrov i pamyati. S (Znak) Soderzhit rezul'tiruyushchij znak posle arifmeticheskih operacij (0 - plyus, 1 - minus). Z (Nol') Pokazyvaet rezul'tat arifmetiches kih operacij i operacij sravneniya (0 - nenulevoj, 1 - nulevoj rezul'tat). A (Vneshnij perenos) Soderzhit perenos iz 3-go bita dlya 8-bitnyh dannyh, ispol'zuetsya dlya special'nyh arifmeticheskih operacij. P (Kontrol' chetnosti) Pokazyvaet chetnost' mladshih 8-bitovyh dannyh (1 - chetnoe i 0 - nechetnoe chislo). C (Perenos) Soderzhit perenos iz starshego bita, posle arifmeticheskih operacij, a takzhe poslednij bit pri sdvigah ili ciklicheskih sdvigah. Pri programmirovanii na assemblere naibolee chasto ispol' zuyutsya flagi O, S, Z, i C dlya arifmeticheskih operacij i operacij sravneniya, a flag D dlya oboznacheniya napravleniya v operaciyah nad strokami. V posleduyushchih glavah soderzhitsya bolee podrobnaya informaciya o flagovom pegistre. ARHITEKTURA PC ------------------------------------------------------------ Osnovnymi elementami apparatnyh sredstv komp'yutera yavlyayut sya: cistemnyj blok, klaviatura, ustrojstvo otobrazheniya, diskovody, pechatayushchee ustrojstvo (printer) i razlichnye Assembler dlya IBM PC 12 sredstva dlya asinhronnoj kommunikacii i upravleniya igrovymi programmami. Sistemnyj blok sostoit iz sistemnoj platy, bloka pitaniya i yachejki rashireniya dlya dopolnitel'nyh plat. Na sistemnoj plate razmeshcheny: - mikroprocessor (Intel); - postoyannaya pamyat' (ROM 40Kbajt); - operativnaya pamyat' (RAM do 512K v zavisimosti ot modeli); - rasshirennaya versiya bejsik-interpretatora. YAchejki rasshireniya obespechivayut podklyuchenie ustrojstv otobrazheniya, diskovodov dlya gibkih diskov (disket), kanalov telekommunikacij, dopolnitel'noj pamyati i igrovyh ustrojstv. Klaviatura soderzhit sobstvennyj mikroprocessor, kotoryj obespechivaet testirovanie pri vklyuchenii pamyati, skanirovanie klaviatury, podavlenie "drebezga" klavishej i buferizaciyu do 20 simvolov. "Mozgom" komp'yutera yavlyaetsya mikroprocessor, kotoryj vypolnyaet obrabotku vseh komand i dannyh. Processor 8088 ispol'zuet 16-bitovye registry, kotorye mogut obrabatyvat' dva bajta odnovremenno. Processor 8088 pohozh na 8086, no s odnim razlichiem: 8088 ogranichen 8-bitovymi (vmesto 16- bitovyh) shinami, kotorye obespechivayut peredachu dannyh mezhdu processorom, pamyat'yu i vneshnimi ustrojstvami. |to ograniche nie sootnosit stoimost' peredachi dannyh i vyigrysh v prostote apparatnoj realizacii. Processory 80286 i 80386 yavlyayutsya rasshirennymi versiyami processora 8086. Kak pokazano na ris. 1.3 processor razdelen na dve chasti: operacionnoe ustrojstvo (OU) i shinnyj interfejs (SHI). Rol' OU zaklyuchaetsya v vypolnenie komand, v to vremya kak SHI podgotavlivaet komandy i dannye dlya vypolneniya. Operacionnoe ustrojstvo coderzhit arifmetiko-logicheskoe ustrojstvo (ALU), ustrojstvo ypravleniya (UU) i desyat' registrov. |ti ustroj stva obespechivayut vypolnenie komand, arifmeticheskie vychisle niya i logicheskie operacii (sravnenie na bol'she, men'she ili ravno). Tri elementa shinnogo interfejsa: ustrojstvo upravleniya shinoj, ochered' komand i segmentnye registry osushchestvlyayut tri vazhnye funkcii: vo-pervyh, SHI upravlyaet peredachej dannyh na operacionnoe ustrojstvo, v pamyat' i na vneshnee ustrojstvo vvoda/vyvoda. Vo-vtoryh, chetyre segmentnyh registra upravlya yut adresaciej pamyati ob®emom do 1 Mbajta. Tret'ya funkciya SHI eto vyborka komand. Tak vse programmnye komandy nahodyatsya v pamyati, SHI dolzhen imet' dostup k nim dlya vyborki ih v ochered' komand. Tak kak ochered' imeet razmer 4 ili bolee bajt, v zavisimosti ot processora, SHI dolzhen "zaglyadyvat' vpered" i vybirat' komandy tak, chtoby vsegda sushchestvovala nepustaya ochered' komand gotovyh dlya vypolneniya. Operacionnoe ustrojstvo i shinnyj interfejs rabotayut paral lel'no, prichem SHI operezhaet OU na odin shag. Operacionnoe ustrojctvo soobshchaet shinnomu interfejsu o neobhodimosti dostupa k dannym v pamyati ili na ustrojstvo vvoda/vyvoda. Krome togo OU zaprashivaet mashinnye komandy iz ocheredi Assembler dlya IBM PC 13 komand. Poka OU zanyato vypolneniem pervoj v ocheredi komandy, SHI vybiraet sleduyushchuyu komandu iz pamyati. |ta vyborka proishodit vo vremya vypolneniya, chto povyshaet ckorost' obrabotki. Pamyat' Obychno mikrokomp'yuter imeet dva tipa vnutrennej pamyati. pervyj tip eto postoyannaya pamyat' (PZU) ili ROM (read-only memory). ROM predstavlyaet soboj special'nuyu mikroshemu, iz kotopoj (kak eto sleduet iz nazvaniya) vozmozhno tol'ko chte nie. Poskol'ku dannye v ROM special'nym obrazom "prozhigayut sya" oni ne mogut byt' modificirovany. Osnovnym naznacheniem ROM yavlyaetsya podderzhka procedur nachal'noj zagruzki: pri vklyuchenii pitaniya komp'yutera ROM vypolnyaet pazlichnye proverki i zagruzhaet v operativnuyu pamyat' (RAM) dannye iz sistemnoj diskety (naprimer, DOS). Dlya celej programmirovaniya naibolee vazhnym elementom ROM yavlyaetsya BIOS (Basic Input/Output System) bazovaya sistema vvoda/vyvoda, kotoraya rassmatrivaetsya v sleduyushchih glavah. (Basic - zdes' obychnoe slovo, a ne yazyk programmirovaniya). ROM krome togo podderzhivaet interpretator yazyka bejsik i formy dlya graficheskih simvolov. Pamyat', s kotoroj imeet delo programmist, predstavlyaet soboj RAM (Random Access Memory) ili OZU, t.e. operativnaya pamyati, dostupnaya kak dlya chteniya, tak i dlya zapisi. RAM mozhno rassmatrivat' kak rabochuyu oblast' dlya vremennogo hraneniya programm i dannyh na vremya vypolneniya. Tak kak soderzhimoe RAM teryaetsya pri otklyuchenii pitaniya komp'yutera, neobhodima vneshnyaya pamyat' dlya sohraneniya programm i dannyh. Esli ustanovlena disketa s operacionnoj sistemoj ili imeetsya zhestkij disk tipa vinchester, to pri vklyuchenii pitaniya ROM zagruzhaet programmy DOS v RAM. (Zagruzhaetsya tol'ko osnovnaya chast' DOS, a ne polnyj nabor programm DOS). Zatem neobhodimo otvetit' na priglashenie DOS dlya ustanovki daty i mozhno vvodit' zaprosy DOS dlya vypolneniya konkretnyh dejstvij. Odnim iz takih dejstvij mozhet byt' zagruzka programm s diska v RAM. Poskol'ku DOS ne zanimaet vsyu pamyat', to v nej imeetsya (obychno) mesto dlya pol'zovatel'skih programm. Pol'zovatel'skaya programma vypolnyaetsya v RAM i obychno osushchestvlyaet vyvod na ekran, printer ili disk. Po okonchanii mozhno zagruzit' druguyu programmu v RAM. Ppredydushchaya programma hranitsya na diske i novaya programma pri zagruzke mozhet nalozhit'sya (zateret') predydushchuyu programmu v RAM. Vydelenie pamyati. Tak kak lyuboj segment imeet ob®em do 64K i imeetsya chetyre tipa segmentov, to eto predpolagaet obshchee kolichestvo dostupnoj RAM pamyati: 4 h 64K = 256K. No vozmozhno lyuboe kolichestvo segmentov. Dlya togo, chtoby adreso vat' drugoj cegment, neobhodimo vsego lish' izmenit' adres segmentnogo registra. Assembler dlya IBM PC 14 RAM vklyuchaet v sebya pervye tri chetverti pamyati, a ROM - poslednyuyu chetvert'. V sootvetstvii s kartoj fizicheskoj pamyati mikrokomp'yutera, privedennoj na ris. 1.4, pervye 256K RAM pamyati nahodyatsya na sistemnoj plate. Tak kak odna oblast' v RAM zarezervirovana dlya videobufera, to imeetsya 640K dostupnyh dlya ispol'zovaniya programmistom, po krajnej mere v tekushchih versiyah DOS. ROM nachinaetsya po adresu 768K i obespechivaet podderzhku operacij vvoda/vyvoda na takie ustrojctva kak kontroler zhestkogo diska. ROM, nachinayushchijsya po adrecu 960K upravlyaet bazovymi funkciyami komp'yutera, takimi kak test pri vklyuchenii pitaniya, tochechnye obrazy graficheskih simvolov i avtozagruzchik s disket. Vse dal'nejshie upominaniya RAM ispol'zuyut obshchij termin - pamyat'. Adresaciya. Vse yachejki pamyati pronumerovany posledovatel' no ot 00 - minimal'nogo adresa pamyati. Processor obespechiva et dostup k bajtam ili slovam v pamyati. Rassmotrim desyatich noe chislo 1025. Dlya zapisi v pamyat' shest. predstavleniya etogo chisla - 0401 trebuetsya dva bajta ili odno slovo. Ono sostoit iz ctarshej chasti - 04 i mladshej chasti - 01. Sistema hranit v pamyati bajty slova v obratnoj posledovatel'nosti: mladshaya chast' po men'shemu adresu, a starshaya - po bol'shemu adresu. Predpolozhim, chto processor zapisal shest. 0401 iz registra v yachejki pamyati 5612 i 5613, sleduyushchim obrazom: |01|04| | | yachejka 5612, yachejka 5613 mladshij bajt starshij bajt Processor polagaet, chto bajty chislovyh dannyh v pamyati predstavleny v obratnoj posledovatel'nosti i obrabatyvaet ih sootvetstvenno. Nesmotrya na to, chto eto svojstvo polnost'yu avtomatizirovano, sleduet vsegda pomnit' ob etom fakte pri programmirovanii i otladke assemblernyh programm. OSNOVNYE POLOZHENIYA NA PAMYATX ------------------------------------------------------------ - Edinicej pamyati yavlyaetsya bajt, sostoyashchij iz vos'mi informacionnyh i odnogo kontrol'nogo bitov. Dva smezhnyh bajta obrazuyut slovo. - Serdcem komp'yutera yavlyaetsya mikroprocessor, kotoryj imeet dostup k bajtam ili slovam v pamyati. - ASCII kod est' format predstavleniem simvol'nyh dannyh. - Komp'yuter sposoben razlichat' bity, imeyushchie raznoe znache nie: 0 ili 1, i vypolnyat' arifmeticheskie operacii tol'ko v dvoichnom formate. - Znachenie dvoichnogo chisla opredeleno raspolozheniem edinich nyh bitov. Tak, dvoichnoe 1111 ravno 2**3 + 2**2 + 2**1 + 2**0, ili 15. Assembler dlya IBM PC 15 - Otricatel'nye chisla predstavlyayutsya dvoichnym dopolneniem: obratnye znacheniya bit polozhitel'nogo predstavleniya chisla +1. - Sokrashchennaya zapis' grupp iz chetyre bitov predstavlyaet soboj shestnadcatirichnyj format. SHest. cifry 0-9 i A-F predstavlyayut dvoichnye chisla ot 0000 do 1111. - Programmy sostoyat iz segmentov: segment steka dlya hrane niya adresov vozvrata, segment dannyh dlya opredeleniya dannyh i rabochih oblastej i segment koda dlya vypolnyaemyh komand. Vse adresa v programme predstavleny kak otnosi tel'nye smeshcheniya ot nachala segmenta. - Registry upravlyayut vypolneniem komand, adresaciej, arifme ticheskimi operaciyami i sostoyaniem vypolneniya. - ROM (PZU) i RAM (OZU) predstavlyayut soboj dva tipa vnutren nej pamyati. - Processor hranit dvuhbajtovye chislovye dannye (slova) v pamyati v obratnoj posledovatel'nosti. VOPROSY DLYA SAMOPROVERKI ------------------------------------------------------------ 1.1. Napishite bitovye predstavleniya ASCII kodov dlya sleduyu shchih odnobitovyh simvolov. (Ispol'zujte prilozhenie 1 v kachestve spravochnika): a) P, b) p, v) #, g) 5. 1.2. Napishite bitovye predstavleniya dlya sleduyushchih chisel: a) 5, b) 13, v) 21, g) 27. 1.3. Clozhite sleduyushchie dvoichnye: a) 00010101 b) 00111110 v) 00011111 00001101 00101001 00000001 1.4. Opredelite dvoichnye dopolneniya dlya sleduyushchih dvoichnyh chisel: a) 00010011, b) 00111100, v) 00111001. 1.5. Opredelite polozhitel'nye znacheniya dlya sleduyushchih otrica tel'nyh dvoichnyh chisel: a) 11001000, b) 10111101, v) 10000000. 1.6. Opredelite shest. predstavleniya dlya a) ASCII simvola Q, b) ASCII chisla 7, v) dvoichnogo chisla 01011101, g) dvoichnogo 01110111. 1.7. Slozhite sleduyushchie shest. chisla: a) 23A6 b) 51FD v) 7779 g) EABE 0022 3 887 26C4 1.8. Opredelite shest. predstavleniya dlya sleduyushchih desyatich nyh chisel. Metod preobrazovaniya priveden v prilozhenii 2. Proverte takzhe poluchennye rezul'taty, preobrazovav shest. znacheniya v dvoichnye i slozhiv edinichnye bity. a) 19, b) 33, v) 89, g) 255, d) 4095, e) 63398. 1.9. CHto predstavlyayut soboj tri tipa segmentov, kakovy ih maksimal'nye razmery i adresa, s kotoryh oni nachinayut sya. Assembler dlya IBM PC 16 1.10. Kakie registry mozhno ispol'zovat' dlya sleduyushchih celej: a) slozhenie i vychitanie, b) podschet chisla ciklov, v) umnozhenie i delenie, g) adresaciya segmentov, d) indi kaciya nulevogo rezul'tata, e) adresaciya vypolnyaemoj komandy? 1.11. CHto predstavlyayut soboj dva osnovnyh tipa pamyati komp'yu tera i kakovo ih osnovnoe naznachenie? Assembler dlya IBM PC. Glava 2 30 GLAVA 2. Vypolnenie programm ------------------------------------------------------------ Vypolnenie programm Cel': Predstavit' mashinnyj yazyk, vvod komand v pamyat' i vypolnenie programm. VVEDENIE ------------------------------------------------------------ Osnovoj dannoj glavy yavlyaetsya ispol'zovanie DOS program- my s imenem DEBUG, kotoraya pozvolyaet prosmatrivat' pamyat', vvodit' programmy i osushchestvlyat' trassirovku ih vypolneniya. V glave pokazan process vvoda etih programm neposredstvenno v pamyat' v oblast' segmenta kodov i ob®yasnen kazhdyj shag vypolneniya programmy. Nachal'nye uprazhneniya nauchat proveryat' soderzhimoe konkret nyh yacheek pamyati. V pervom primere programmy ispol'zuyutsya neposredstvennye dannye opredelennye v komandah zagruzki registrov i arifmeticheskih komandah. Vtoroj primer programmy ispol'zuet dannye, opredelennye otdel'no v segmente dannyh. Trassirovka etih komand v processe vypolneniya programmy pozvolyaet ponyat' dejstviya komp'yutera i rol' registrov. Dlya nachala ne trebuetsya predvaritel'nyh znanij yazyka ascemblera i dazhe programmirovaniya. Vse chto neobhodimo - eto IBM PC ili sovmestimyj mikrokomp'yuter i disk s operacionnoj cistemoj DOS. NACHALO RABOTY ------------------------------------------------------------ Prezhde vsego neobhodimo vstavit' disketu s DOS v levyj diskovod A. Esli pitanie vyklyucheno, to ego nado vklyuchit'; esli pitanie uzhe vklyucheno, nazhmite vmeste i zaderzhite klavishi Ctrl i Alt i nazhmite klavishu Del. Kogda rabochaya chast' DOS budet zagruzhena v pamyat', na ekrane poyavitsya zapros dlya vvoda daty i vremeni, a zatem bukva tekushchego diskovoda, obychno A dlya diskety i C dlya vin chestera (tverdogo diska). Izmenit' tekushchij diskovod mozhno, nazhav sootvetstvuyushchuyu bukvu, dvoetochie i klavishu Return. |to obychnaya procedura zagruzki, kotoruyu sleduet ispol'zovat' vsyakij raz dlya uprazhnenij iz etoj knigi. PROSMOTR YACHEEK PAMYATI ------------------------------------------------------------ V etom pervom uprazhnenii dlya prosmotra soderzhimogo yacheek pamyati ispol'zuetsya programma DOS DEBUG . Dlya zapuska etoj pogrammy vvedite DEBUG i nazhmite Return, v rezul'tate programma DEBUG dolzhna zagruzitsya s diska v pamyat'. Posle okonchaniya zagruzki na ekrane poyavitsya priglashenie v vide Assembler dlya IBM PC. Glava 2 31 defisa, chto svidetel'stvuet o gotovnosti programmy DEBUG dlya priema komand. Edinstvennaya komanda, kotoraya imeet otnoshenie k dannomu uprazhneniyu, eto D - dlya dampa pamyati. 1. Razmer pamyati. Snachala proverim razmer dostupnoj dlya raboty pamyati. V zavisimosti ot modeli komp'yutera eto znachenie svyazano s ustanovkoj vnutrennih pereklyuchatelej i mozhet byt' men'she, chem real'no sushchestvuet. Dannoe znachenie nahoditsya v yachejkah pamyati shest.413 i 414 i ego mozhno prosmotret' iz DEBUG po adresu, sostoyashchemu iz dvuh chastej: ® 400 - eto adres segmenta, kotoryj zapisyvaetsya kak 40 (poslednij nul' podrazumevaetsya) i ® 13 - eto smeshchenie ot nachala segmenta. Takim obrazom, mozhno vvesti sleduyushchij zapros: D 40:13 (i nazhat' Return) Pervye dva bajta, poyavivshiesya v rezul'tate na ekrane, soderzhat razmer pamyati v kilobajtah i v shestnadcaterich nom predstavlenii, prichem bajty raspolagayutsya v obrat noj posledovatel'nosti. Neskol'ko sleduyushchih primerov pokazyvayut shest. obratnoe, shest. normal'noe i desyatichnye predstavleniya. SHest.obratn. SHest. norm. Desyatichn. (K) 8000 0080 128 0001 0100 256 8001 0180 384 0002 0200 512 8002 0280 640 2. Serijnyj nomer. Serijnyj nomer komp'yutera "zashit" v ROM po adresu shest. FE000. CHtoby uvidet' ego, sleduet vvesti: D FE00:0 (i nazhat' Return) V rezul'tate na ekrane poyavitsya semiznachnyj nomer komp'yutera i data kopirajt. 3. Data ROM BIOS. Data ROM BIOS v formate mm/dd/yy nahodit sya po shest. adresu FFFF5. Vvedite D FFFF:05 (i nazhmite Return) znanie etoj informacii (daty) inogda byvaet poleznym dlya opredeleniya modeli i vozrasta komp'yutera. Assembler dlya IBM PC. Glava 2 32 Teper', poskol'ku vy znaete, kak pol'zovat'sya komandoj D (Display), mozhno ustanavlivat' adres lyuboj yachejki pamyati dlya prosmotra soderzhimogo. Mozhno takzhe prolistyvat' pamyat', periodicheski nazhimaya klavishu D, - DEBUG vyvedet na ekran adresa, sleduyushchie za poslednej komandoj. Dlya okonchaniya raboty i vyhoda iz otladchika v DOS vvedite komandu Q (Quit). Rassmotrim teper' ispol'zovanie otladchika DEBUG dlya neposredstvennogo vvoda programm v pamyat' i trassirovki ih vypolneniya. PRIMER MASHINNYH KODOV: NEPOSREDSTVENNYE DANNYE ------------------------------------------------------------ Cel' dannogo primera - proillyustrirovat' prostuyu program mu na mashinnom yazyke, ee predstavlenie v pamyati i rezul'taty ee vypolneniya. Programma pokazana v shestnadcatirichnom formate: Komanda Naznachenie B82301 Pereslat' shest.znachenie 0123 v AX. 052500 Pribavit' shest.znachenie 0025 k AX. 8BD8 Pereslat' soderzhimoe AX v BX. 03D8 Pribavit' soderzhimoe AX k BX. 8BCB Pereslat' soderzhimoe BX v CX. 2BC8 Vychest' soderzhimoe AX iz AX (ochistka AX). 90 Net operacii. CB Vozvrat v DOS. Mozhno zametit', chto mashinnye komandy imeyut razlichnuyu dlinu: odin, dva ili tri bajta. Mashinnye komandy nahodyatsya v pamyati neposredstvenno drug za drugom. Vypolnenie programmy nachinaetsya s pervoj komandy i dalee posledovatel'no vypol nyayutsya ostal'nye. Ne sleduet, odnako, v dannyj moment iskat' bol'shoj smysl v privedennom mashinnom kode. Naprimer, v odnom sluchae MOV - shest. B8, a v drugom - shest. 8B. Mozhno vvesti etu programmu neposredstvenno v pamyat' mashiny i vypolnit' ee pokomandno. V tozhe vremya mozhno prosmatrivat' coderzhimoe registrov posle vypolneniya kazhdoj komandy. Nachnem dannoe uprazhnenie tak zhe kak delalos' predydushchee - vvod komandy otladchika DEBUG i nazhatie klavishi Return. Posle zagruzki DEBUG na ekrane vysvechivaetsya priglashenie k vvodu komand v vide defisa. Dlya pechati dannogo uprazhneniya vklyuchite printer i nazhmite Ctrl i PrtSc odnovremenno. Dlya neposredstvennogo vvoda programmy na mashinnom yazyke vvedite sleduyushchuyu komandu, vklyuchaya probely: E CS:100 B8 23 01 05 25 00 (nazhmite Return) Komanda E oboznachaet Enter (vvod). CS:100 opredelyaet adres pamyati, kuda budut vvodit'sya komandy, - shest. 100 (256) bajt ot nachala segmenta kodov. (Obychnyj startovyj Assembler dlya IBM PC. Glava 2 33 adres dlya mashinnyh kodov v otladchike DEBUG). Kkomanda E zapisyvaet kazhduyu paru shestnadcatipichnyh cifr v pamyat' v vide bajta, nachinaya s adresa CS:100 do adresa CS:105. Sleduyushchaya komanda Enter: E CS:106 8B D8 03 D8 8B CB (Return) vvodit shest' bajtov v yachejki, nachinaya s adresa CS:106 i dalee v 107, 108, 109, 10A i 10B. Poslednyaya komanda Enter: E CS:10C 2B C8 2B C0 90 CB (Return) vvodit shest' bajtov, nachinaya s CS:10C v 10D, 10E, 10F, 110 i 111. Prover'te pravil'nost' vvoda znachenij. Esli est' oshibki, to sleduet povtorit' komandy, kotorye byli vvedeny nepravil'no. Teper' ostalos' samoe prostoe - vypolnit' eti komandy. Na pis. 2-1 pokazany vse shagi, vklyuchaya komandy E. Na vashem ekrane dolzhny byt' analogichnye rezul'taty posle vvoda kazhdoj komandy otladchika. Vvedite komandu R dlya prosmotra soderzhimogo registrov i flagov. V dannyj moment otladchik pokazhet soderzhimoe registrov v shest. formate, naprimer, AX=0000, BX=0000, ... V zavisimosti ot versii DOS soderzhimoe registrov na ekrane mozhet otlichat'sya ot pokazannogo na ris. 2.1. Soderzhi moe registra IP (ukazatel' komand) vyvoditsya v vide IP=0100, pokazyvaya chto vypolnyaemaya komanda nahoditsya na smeshchenii 100 bajt ot nachala segmenta kodov. (Vot pochemu ispol'zovalas' komanda E CS:100 dlya ustanovki nachala programmy.) Registr flagov na ris. 2.1 pokazyvaet sleduyushchie znacheniya flagov: NV UP DI PL NZ NA PO NC ------------------------------------------------------------ ------------------------------------------------------------ Ris. 2.1. Trassirovka mashinnyh komand. Dannye znacheniya sootvetstvuyut: net perepolneniya, pravoe napravlenie, preryvaniya zapreshcheny, znak plyus, ne nol', net vneshnego perenosa, kontrol' na chestnost' i net perenosa. V dannyj moment znachenie flagov ne sushchestvenno. Komanda R pokazyvaet takzhe po smesheniyu 0100 pervuyu vypol nyaemuyu mashinnuyu komandu. Registr CS na ris. 2.1 soderzhit znachenie CS=13C6 (na raznyh komp'yuterah ono mozhet razlichat'sya), a mashinnaya komanda vyglyadit sleduyushchim obrazom: 13C6:0100 B82301 MOV AX,0123 Assembler dlya IBM PC. Glava 2 34 ® CS=13C6 oboznachaet, chto nachalo segmentov koda nahoditsya po smeshcheniyu 13C6 ili tochnee 13C60. Znachenie 13C6:0100 oboznachaet 100 (shest.) bajtov ot nachal'nogo adresa 13C6 v registre CS. ® B82301 - mashinnaya komanda, vvedennaya po adresu CS:100. ® MOV AX,0123 - assemblernyj mnemonicheskij kod, sootvetstvuyushchij vvedenoj mashinnoj komande. |to est' rezul'tat operacii disassemblirovaniya, kotoruyu obespe chivaet otladchik dlya bolee prostogo ponimaniya mashinnyh komand. V posleduyushchih glavah my budem kodirovat' pro grammy isklyuchitel'no v komandah assemblera. Rassmatri vaemaya v dannom slechae komanda oboznachaet peresylku neposredstvennogo znacheniya v registr AX. V dannyj moment komanda MOV eshche ne vypolnena. Dlya ee vypolneniya nazhmite klavishu T (dlya trassirovki) i klavishu Return. V rezul'tate komanda MOV budet vypolnena i otladchik vydast na ekran soderzhimoe registrov, flagi, a takzhe sleduyushchuyu na ocheredi komandu. Zametim, chto registr AX teper' soderzhit 0123. Mashinnaya komanda peresylki v registr AX imeet kod B8 i za etim kodom sleduet neposredstvennye dannye 2301. V hode vypolneniya komanda B8 peresylaet znachenie 23 v mladshuyu chast' registra AX, t.e odnobajtovyj registr AL, a znachenie 01 - v starshuyu chast' registra AX, t.e v registr AH: AX: |01|23| Soderzhimoe registra IP:0103 pokazyvaet adres sleduyushchej vypolnyaemoj komandy v segmente kodov: 13C6:0103 052500 ADD AX,0025 Dlya vypolneniya dannoj komandy snova vvedite T. Komanda pribavit 25 k mladshej (AL) chasti registra AX i 00 k starshej (AH) chasti registra AX, t.e pribavit 0025 k registru AX. Teper' registr AX soderzhit 0148, a registr IP 0106 - adres cleduyushchej komandy dlya vypolneniya. Vvedite snova komandu T. Sleduyushchaya mashinnaya komanda peresylaet soderzhimoe registra AX v registr BX i posle ee vypolneniya v registre BX budet soderzhat'sya znachenie 0148. Registr AX sohranyaet prezhnee znachenie 0148, poskol'ku komanda MOV tol'ko kopipuet dannye iz odnogo mesta v drugoe. Teper' vvodite komandu T dlya poshagovogo vypolneniya kazhdoj ostavshejsya v programme komandy. Sleduyushchaya komanda pribavit coderzhimoe registra AX k soderzhimomu registra BX, v poslednem poluchim 0290. Zatem programma skopiruet soderzhimoe pegistra BX v CX, vychtet AX iz CX, i vychtet AX iz nego samogo. Posle etoj poslednej komandy, flag nulya izmenit svoe sostoyanie c NZ (nenul') na ZR (nul'), tak kak rezul'tatom etoj komandy yavlyaetsya nul' (vychitanie AX iz samogo sebya ochishchaet etot registr v 0). Assembler dlya IBM PC. Glava 2 35 Mozhno vvesti T dlya vypolneniya poslednih komand NOP i RET, no eto my sdelaem pozzhe. Dlya prosmotra programmy v mashinnyh kodah v segmente kodov vvedite D dlya dampa: D CS:100 V rezul'tate otladchik vydast na kazhduyu stroku ekrana po 16 bajt dannyh v shest. predstavlenii (32 shest. cifry) i v simvol'nom predstavlenii v kode ASCII (odin simvol na kazhduyu paru shest. cifr). Predstavlenie mashinnogo koda v simvolah ASCII ne imeet smysla i mozhet byt' ignorirovano. V sleduyushchih razdelah budet rassmotren simvol'nyj damp bolee podrobno. Pervaya stroka dampa nachinaetsya s 00 i predstavlyaet soderzhimoe yacheek ot CS:100 do CS:10F. Vtoraya stroka predstavlyaet coderzhimoe yacheek ot CS:110 do CS:11F. Nesmotrya na to, chto vasha programma zakanchivaetsya po adresu CS:111, komanda Dump avtomaticheski vydast na vos'mi strokah ekrana damp s adresa CS:100 do adresa CS:170. Pri neobhodimosti povtorit' vypolnenie etih komand sbros'te soderzhimoe registra IP i povtorite trassirovku snova. Vvedite R IP, vvedite 100, a zatem neobhodimoe chislo komand T. Posle kazhdoj komandy nazhimajte klavishu Return. Na ris.2.2 pokazan rezul'tat vypolneniya komandyD CS:100. Obratite vnimanie na mashinnyj kod s CS:100 do 111 i vy obnaruzhite damp vashej programmy; sleduyushchie bajty mogut soderzhat' lyubye dannye. ------------------------------------------------------------ ------------------------------------------------------------ Ris. 2.2. Damp kodovogo segmenta. Dlya zaversheniya raboty s programmoj DEBUG vvedite Q (Quit - vyhod). V rezul'tate proizojdet vozvrat v DOS i na ekrane poyavitsya priglashenie A> ili C>. Esli pechatalsya protokol raboty s otladchikom, to dlya prekrashcheniya pechati cnova nazhmite Ctrl/PrtSc. PRIMER MASHINNYH KODOV: OPREDELENIE DANNYH ------------------------------------------------------------ V predydushchem primere ispol'zovalis' neposredstvennye dannye, opisannye neposredstvenno v pervyh dvuh komandah (MOV i ADD). Teper' rassmotrim analogichnyj primer, v kotorom znacheniya 0123 i 0025 opredeleny v dvuh polyah sigmenta dannyh. Dannyj primer pozvolyaet ponyat' kak komp'yuter obespechivaet dostup k dannym posredstvom registra DS i adresnogo smeshcheniya. V nastoyashchem primere opredeleny oblasti dannyh, soderzhashchie cootvetstvenno sleduyushchie znacheniya: Adres v DS SHest.znach. Nomera bajtov 0000 2301 0 i 1 Assembler dlya IBM PC. Glava 2 36 0002 2500 2 i 3 0004 0000 4 i 5 0006 2A2A2A 6, 7 i 8 Vspomnim, chto shest. simvol zanimaet polovinu bajta, takim obrazom, naprimer, 23 nahoditsya v bajte 0 (v pervom bajte) segmenta dannyh, 01 - v bajte 1 (t.e. vo vtorom bajte). Nizhe pokazany komandy mashinnogo yazyka, kotorye obrabatyva yut eti dannye: Komanda Naznachenie A10000 Pereslat' slovo (dva bajta), nachinayushchee sya v DS po adresu 0000, v registr AX. 03060200 Pribavit' soderzhimoe slova (dvuh bajt), nachinayushchegosya v DS po adresu 0002, k registru AX. A30400 Pereslat' soderzhimoe registra AX v slovo, nachinayushcheesya v DS po adresu 0004. CB Vernut'sya v DOS. Obratite vnimanie, chto zdes' imeyutsya dve komandy MOV s pazlichnymi mashinnymi kodami: A1 i A3. Fakticheski mashinnyj kod zavisit ot registrov, na kotorye imeetsya ssylka, koli chestva bajtov (bajt ili slovo), napravleniya peredachi dannyh (iz registra ili v registr) i ot ssylki na neposredstvennye dannye ili na pamyat'. Vospol'zuemsya opyat' otladchikom DEBUG dlya vvoda dannoj programmy i analiza ee vypolneniya. Kogda otladchik vydal svoe defisnoe priglashenie, on gotov k priemu komand. Snachala vvedite komandy E (Enter) dlya segmenta dannyh: E DS:00 23 01 25 00 00 00 (Nazhmite Return) E DS:06 2A 2A 2A (Nazhmite Return) Pervaya komanda zapisyvaet tri slova (shest' bajtov) v nachalo segmenta dannyh, DS:00. Zamet'te, chto kazhdoe slovo vvodilos' v obratnoj posledovatel'nosti, tak chto 0123 est' 2301, a 0025 est' 2500. Kogda komanda MOV budet obrashchat'sya k etim clovam, normal'naya posledovatel'nost' budet vosstanov lena i 2301 stanet 0123, a 2500 - 0025. Vtoraya komanda zapisyvaet tri zvezdochki (***) dlya togo, chtoby ih mozhno bylo videt' vposledstvii po komande D (Dump) - drugogo naznacheniya eti zvezdochki ne imeyut. Vvedem teper' komandy v segment kodov, opyat' nachinaya s adresa CS:100: E CS:100 A1 00 00 03 06 02 00 E CS:107 A3 04 00 CB Assembler dlya IBM PC. Glava 2 37 Teper' komandy nahodyatsya v yachejkah pamyati ot CS:100 do CS:10A. |ti komandy mozhno vypolnit' kak eto delalos' ranee. Na ris. 2.3 pokazany vse shagi, vklyuchaya komandy E. Na ekrane displeya dolzhny poyavit'sya takie zhe rezul'taty, hotya adresa CS i DS mogut razlichat'sya. Dlya peresmotra informacii v segmente dannyh i v segmente kodov vvedite komandy D (Dump) sootvetstvenno: dlya segmenta dannyh: D DS:000 (Return) dlya segmenta kodov: D CS:100 (Return) Sravnite soderzhimoe oboih segmentov s tem, chto vvodilos' i s izobrazhennym na ris. 2.3. Soderzhimoe pamyati ot DS:00 do DS:08 i ot CS:100 do CS:10A dolzhno byt' identichno ris. 2.3. Teper' vvedite R dlya prosmotra soderzhimogo registrov i flagov i dlya otobrazheniya pervoj komandy. Registry soderzhat te zhe znacheniya, kak pri starte pervogo primera. Komanda oto- brazitsya v vide: 13C6:0100 A10000 MOV AX,[0000] Tak, kak registr CS soderzhit 13C6, to CS:100 soderzhit pervuyu komandu A10000. Otladchik interpretiruet etu komandu kak MOV i opredelyaet ssylku k pervomu adresu [0000] v segmente dannyh. Kvadratnye skobki neobhodimy dlya ukazaniya ssylki k adresu pamyati, a ne k neposredstvennym dannym. ------------------------------------------------------------ ------------------------------------------------------------ Ris. 2.3. Trassirovka mashinnyh komand Esli by kvadratnyh skobok ne bylo, to komanda MOV AX,0000 obnulila by registr AX neposredstvennym znacheniem 0000. Teper' vvedem komandu T. Komanda MOV AX,[0000] pereshlet coderzhimoe slova, nahodyashchegosya po nulevomu smeshcheniyu v segmente dannyh, v registr AX. Soderzhimoe 2301 preobrazuetsya komandoj v 0123 i pomeshchaetsya v registr AX. Sleduyushchuyu komandu ADD mozhno vypolnit', vvedya eshche raz komandu T. V rezul'tate soderzhimoe slova v DS po smeshcheniyu 0002 pribavitsya v registr AX. Teper' registr AX budet soderzhat' summu 0123 i 0025, t.e 0148. Sleduyushchaya komanda MOV [0004],AX vypolnyaetsya opyat' po vvodu T. |ta komanda peresylaet soderzhimoe registra AX v slovo po smesheniyu 0004. Dlya prosmotra izmenenij soderzhimogo segmenta dannyh vvedite D DS:00. Pervye devyat' bajt budut sleduyushchimi: znachenie v segmente dannyh: 23 01 25 00 48 01 2A 2A 2A velichina smeshcheniya: 00 01 02 03 04 05 06 07 08 Assembler dlya IBM PC. Glava 2 38 Znachenie 0148, kotoroe bylo zaneseno iz registra AX v seg ment dannyh po smeshcheniyu 04 i 05, imeet obratnoe predstavle nie 4801. Zamet'te chto eti shest. znacheniya predstavleny v pravoj chasti ekrana ih simvolami v kode ASCII. Naprimer, shest.23 generiruetsya v simvol #, a shest.25 - v simvol %. Tri bajta s shest. znacheniyami 2A vysvechivayutsya v vide treh zvezdochek (***). Levaya chast' dampa pokazyvaet dejstvitel'nye mashinnye kody, kotorye nahodyatsya v pamyati. Pravaya chast' dampa tol'ko pomogaet proshche lokalizovat' simvol'nye (sroch nye) dannye. Dlya prosmotra soderzhimogo segmenta kodov vvedite D DS:100 tak, kak pokazano na ris. 2.3. V zaklyuchenii vvedite Q dlya zaversheniya raboty s programmoj. MASHINNAYA ADRESACIYA ------------------------------------------------------------ Dlya dostupa k mashinnoj komande processor opredelyaet ee adres iz soderzhimogo registra CS plyus smeshchenie v registre IP. Naprimer, predpolozhim, chto registr CS soderzhit shest. 04AF (dejstvitel'nyj adres 04AF0), a registr IP soderzhit shest. 0023: CS: 04AF0 IP: 0023 Adres komandy: 04B13 Esli, naprimer, po adresu 04B13 nahoditsya komanda: A11200 MOV AX,[0012] | Adres 04B13 to v pamyati po adresu 04B13 soderzhitsya pervyj bajt komandy. Processor poluchaet dostup k etomu bajtu i po kodu komandy (A1) opredelyaet dlinu komandy - 3 bajta. Dlya dostupa k dannym po smeshcheniyu [0012] processor oprede lyaet adres, ishodya iz soderzhimogo registra DS (kak pravilo) plyus cmeshchenie v operande komandy. Esli DS soderzhit shest.04B1 (real'nyj adres 04B10), to rezul'tiruyushchij adres dannyh opredelyaetsya cleduyushchim obrazom: DS: 04B10 Smeshchenie: 0012 Adres dannyh: 04B22 Predpolozhim, chto po adresam 04B22 i 04B23 soderzhatsya sleduyushchie dannye: Soderzhimoe: 24 01 | | Adres: 04B22 04B23 Assembler dlya IBM PC. Glava 2 39 Processor vybiraet znachenie 24 iz yachejki po adresu 04B22 i pomeshchaet ego v registr AL, i znachenie 01 po adresu 04B23 - v registr AH. Registr AX budet soderzhat' v rezul'tate 0124. V processe vyborki kazhdogo bajta komandy processor uvelichivaet znachenie registra IP na edinicu, tak chto k nachalu vypolneniya sleduyushchej komandy v nashem primere IP budet soderzhat' smeshchenie 0026. Takim obpazom processor teper' gotov dlya vypolneniya sleduyushchej komandy, kotoruyu on poluchaet po adresu iz registra CS (04AF0) plyus tekushchee smeshchenie v registre IP (0026), t.e 04B16. CHetnaya adresaciya Processor 8086, 80286 i 80386 dejstvuyut bolee effektivno, esli v programme obespechivayutsya dostup k slovam, raspolozhen nym po chetnym adresam. V predydushchem primere processor mozhet sdelat' odnu vyborku slova po adresu 4B22 dlya zagruzki ego neposredstvenno v registr. No esli slovo nachinaetsya na nechet nom adrese, processor vypolnyaet dvojnuyu vyborku. Predpolo zhim, naprimer, chto komanda dolzhna vypolnit' vyborku slova, nachinayushchegosya po adrecu 04B23 i zagruzit' ego v registr AX: Soderzhimoe pamyati: |hh|24|01|hh| | Adres: 04B23 Snachala processor poluchaet dostup k bajtam po adresam 4B22 i 4B23 i peresylaet bajt iz yachejki 4B23 v registr AL. Zatem on poluchaet dostup k bajtam po adresam 4B24 i 4B25 i peresylaet bajt iz yachejki 4B23 v registr AH. V rezul'tate registr AX budet soderzhat' 0124. Net neobhodimosti v kakih-libo special'nyh metodah programmirovaniya dlya polucheniya chetnoj ili nechetnoj adressacii, ne obyazatel'no takzhe znat' yavlyaetsya adres chetnym ili net. Vazhno znat', chto, vo-pervyh, komandy obrashcheniya k pamyati menyayut slovo pri zagruzke ego v registr tak, chto poluchaetsya pravil'naya posledovatel'nost' bajt i, vo-vtoryh, esli programma imeet chastyj dostup k pamyati, to dlya povysheniya effektivnosti mozhno opredelit' dannye tak, chtoby oni nachinalis' po chetnym adresam. Naprimer, poskol'ku nachalo segmenta dolzhno vsegda nahodit'sya po chetnomu adresu, pervoe pole dannyh nachinaetsya takzhe po chetnomu adresu i poka sleduyushchie polya opredeleny kak slova, imeyushchie chetnuyu dlinu, oni vse budut nachinat'sya na chetnyh adresah. V bol'shinstve sluchaev, odnako, nevozmozhno zametit' uskoreniya raboty pri chetnoj adressacii iz-za ochen' vysokoj skorosti raboty processorov. Assembler imeet direktivu EVEN, kotoraya vyzyvaet vyravniv nivanie dannyh i komand na chetnye adresa pamyati. PRIMER MASHINNYH KODOV: OPREDELENIE RAZMERA PAMYATI ------------------------------------------------------------ Assembler dlya IBM PC. Glava 2 40 V pervom uprazhnenii v dannoj glave provodilas' proverka razmera pamyati (RAM), kotoruyu imeet komp'yuter. BIOS (bazovaya sistema vvoda/vyvoda) v ROM imeet podprogrammu, kotoraya opredelyaet pazmer pamyati. Mozhno obratit'sya v BIOS po komande INT, v dannom cluchae po preryvaniyu 12H. V rezul'tate BIOS vozvrashchaet v registr AX razmer pamyati v kilobajtah. Zagruzite v pamyat' DEBUG i vvedite dlya INT 12H i RET sleduyushchie mashinnye kody: E CS:100 CD 12 CB Nazhmite R (i Return) dlya otobrazheniya soderzhimogo registrov i pervoj komandy. Registr IP soderzhit 0100, pri etom vysvechivaetsya komanda INT 12H. Teper' nazhmite T (i Return) neskol'ko raz i prosmotrite vypolnyaemye komandy BIOS (otladchik pokazyvaet mnemokody, hotya v dejstvitel'nosti vypolnyayutsya mashinnye kody): STI PUSH DS MOV AX,0040 MOV DS,AX MOV AX,[0013] POP DS IRET V etot moment registr AX soderzhit razmer pamyati v shestnadca tipichnom formate. Teper' vvedite eshche raz komandu T dlya vyhoda iz BIOS i vozvrata v vashu programmu. Na ekrane poyavitsya komanda RET dlya mashinnogo koda CB, kotoryj byl vveden vami. SPECIALXNYE SREDSTVA OTLADCHIKA ------------------------------------------------------------ V operacionnoj sisteme DOS versii 2.0 i starshe mozhno ispol'zovat' DEBUG dlya vvoda komand assemblera tak zhe, kak i komand mashinnogo yazyka. Na praktike mozhno pol'zovat'sya oboimi metodami. Komanda A Komanda otladchika A (Assemble) perevodit DEBUG v rezhim priema komand assemblera i perevoda ih v mashinnye kody. Ustanovim n