You are on page 1of 233
Chuong 4 . GIGI THIEU HOP NGU CHO IBM PC. Téng quan. Chuong nay bao gém céc bude cén thiét dé tao ra, hdp dich va thyc hién m6t chutdng trinh Hgp nga. Dén cudi chung, ban da cé thé viét duge cdc chuting trinh don gin nhung kha thi vi, thyc hién mét sé céng viée hiu ich va chay chting trén may tinh. Ciing nhu véi batt cit ngén ngit nao khée, bude dau tién ta phai hoc ci phap. Diéu nay déi vdi Hyp ng@ tuong ddi don gidn. Tiép theo, ching téi sé chi ra cach Khai bao bién va gidi thiéu cdc lénh s6 hgc va dich chuyén s6 ligu co ban. Cuéi cing ching téi sé trinh bay cach té chite chung trinh. Ban sé thay cac chuong trinh Hgp ngit bao gém ma lénh, sé liéu va ngan xép gidng nhu_chuong L trinh ma may Béi vicac lénh cha Hop ngit qua co ban nén thu hién cac thao tac vao/ra trong Hgp ngd khé khan hon nhiéu so véi cic ngén ngit bac cao. Chung téi sit dung cdc ham cia DOS cho céc thao tac vao/ra vi chting kha dé dang va di nhanh cho hau hét cdc yéu cu ting dung. Mét chuong trinh Hgp ng truée khi c6 thé thuc hién phai duge chuyén sang dang ma may. Myc 4.10 sé gidi thich cée bude. Né minh hoa vai ky thuat lap trinh chugn bang Hop ngit va nhu la mau cho-céc bai tap. 4.1 Cu phap cua Hop ngir. Céc chung trinh Hgp ngi duge dich ra céc chi thi may bang mét chutong trinh bién dich vi thé chéing phai duge viét ra sao cho pha hgp véi céc khuén miu cia trinh bién dich 46. Trong cuén sich nay chting tdi sé sit dung trinh bién dich MICROSOFT MACRO ASSEMBLER (MASM). Ma lénh Hgp ng néi chung khéng phan biét chit hoa hay thuténg nhung chting t6i sit dung chit hoa dé phan biét ma lénh véi phan cén lai ca chuong trinh. Cac dong Iénh. Cac chuong trinh bao gém cac dong lénh, méi dong lénh trén mét dong. \ dang Iénh i mét lénh ma trinh bién dich sé dich ra ma may hay 1a mot huéng dan bién dich dé chi din cho trinh bién dich thyc hién mgt vai nhiém vu dac biét nao d6, chang han danh ché cho mét bién nhé hay khai bao mot chuong trinh con. Méi lénh hay huéng dan bién dich thudng cé 4 trudng: Tén Toan tt Toan hang Léi binh Céc truéng phai duge phan céch nhau bang it nhat mot ky tu trong hay TAB. Cing khong bat bugc phai xdp xép cdc trudng theo cét nhung chung nhat dinh phai xudt hién theo ding thi ty néu trén. Vi dy mét lénh: START: MOV CX,5 ikhdi tao b6 dém. ‘Trong vi du nay, truéng tén 1a nhdn START, todn tit 1A MOV, toan hang 1A CX va { 5.181 binh Ja” khdi tao bo dém’ Vi du vé huéng dan bién dich: MAIN PROC MAIN 1a tén va toan hang 1a PROC. Dan hudng chuong trinh con cé tén PROC. dich nay khai bao mot 4.1.1 Trung tén. ‘Trudng tén duge sit dung lam nhn Iénh, cdc tén tha tye va céc tén bién. Chuong trinh bién dich sé chuyén cac tén thanh cac dia chi bé nhé. Céc tén cé thé 6 chiéu dai tit 1 dén 31 ky tut, 06 thé chita céc chit cdi, chit sé va cdc ky ty. dic bigt (7. @ _ $ % ). Khong duge phép chén dau tréng vao gitta mot tén. Néu stt dung dau chém (.) thi né phai dig dau tién. Cac tén khéng duge bat déu bing m6t chit s6. Chugng trinh bién dich khdng phan biét chit hoa va chit thuéng trong tén. Vi du cae tén hgp | COUNTER1 75 @character SUM_OF_DIGITS $1000 DONE? TEST Vi du cae tén khéng hgp 1é: TWO WORD chia mbt khoang trong > 2abe bat adu bang mat chit od A45.28 d&u chm khOng phdi la ky tu dau tién YOUSME chia mt ky tu khdng hop |é | 4.12 Trwéng todn tu. Trong mét lénh, trudng todn tit chita ma lénh dang tvgng trung. Chuong trinh bién dich s8 chuyén. ma lénh dang tugng trung sang mi lénh cia ngén ngi may. Tung trung cla ma lénh thudng biéu thi chit nang cla cdc thao téc. Vi dy nhu: MOV, ADD, SUB. ‘Trong mét huéng dan bién dich, trudng todn tu chita oan tit gid (pseudo- op). Céc toan tit gid sé khong duge dich ra ma may ma don gian chting chi béo cho trinh bién dich lam mét viée gi d6. Chang han ton tit gia PROC duge ding dé tao ra mOt thi tuc. t 4.1.3 Trudng todn hang. Déi véi mét chi thi, trudng toan hang xéc dinh di ligu sé duge cac thao tac tac déng lén. Mét chi thj 06 thé khéng c6, c6 1 hoae 2 ton hang. Vi du: NOP khéng ton hang, khong lam gi cA. INC AX mot todn hang, cong 1 vao ndi dung AX. ADD WORD1,2 haitodnhang, céng 2 vao tinh WORD1. ‘Trong mét chi thj hai toan hang, toan hang dau tién goi la toan hang dich. Né cé thé la mét thanh ghi hodc mét 6 nhé, 1a noi chita két qua (luu ¥ mot sé chi thj khéng hu git? két qua). Toan hang tht hai la toan hang nguén. Cac chi thi thutng khéng lam thay déi toan hang nguén. Déi voi mot huéng dan bién dich, trudng toan hang thudng chia thém théng tin vé viée din huéng. 16 4.1.4 Trudng ldi gidi thich. 4.2 Ngudi lap-trinh thudng sit dung trudng Jéi gidi thich cla m@t dong lgnh dé gidi thich ding lénh dé lam cai gi. Mé dau trudng nay 1a mOt dau chim phy () va trinh bién dich b3 qua moi cdi duge danh vao sau déu chéam phay nay. Lai gidi thich c6 thé tuy ¥ (¢6 hoc khéng) nhung vi Hgp ngit 1a ng6n ngit bac tha'p cho nén ta hau nhu khéng thé hiéu duge mét chong trinh viét bing Hgp ngit khi khong cé di binh. Trén thyc té dién céc Idi gidi thich vio hau hét cdc dong lgnh la mot phuong phép hoc lap trinh tét, Nghé thuat chi gidi sé duge phat trién cing véi qua trinh thyc hanh. Khong nén viét nhiing diéu da qué rd rang nhu: MOV cx, 0 ;chuyén 0 vao CX. ‘Thay vao dé, ta nén su dung céc Idi giai thich dé dat cée chi thi vao trong ngit cinh cia chong trinh: MOV. cx,0 7CX dém sé vong 1lap,khdi tao 0 Ciing c6 thé tao nén cA mét dong ghi chu va ding ching dé tao ra céc dong tréng trong chuong trinh: 7khéi tao cac thanh ghi. MOV AX,0 MOV BX,0 Dir ligu chuong trinh. Bé vi xit ly chi thao tac vdi dit liu nhj phan, vi thé trinh bién dich phai chuyén déi tat c& cdc dang di li¢u khéc nhau thanh céc sé nhj phan. Tuy nhién trong mt chuong trinh Hgp ngit ching ta cé thé biéu dién dit dudi dang cde 86 nhj phan, thap phan, sé hex va tham chf cd céc ky ty. Cac sé. nhj phan due viét nhu 1A mt chudi céc bit két thie bang chit cai ‘B’ hay ‘b’.Vidy 1011b. . 7h ‘Mét 80 thap phan 1a chuéi cdc chit sé thap phan két thuc bang chit cdi ‘D’ hay ‘d’ (hodc khéng cé6). M6t sé hex phai bit dau bing mét chit s thap phan va két thie bang chit cai ‘H’ hay ‘h’. Vi dy OABCH (véi cach nay, trinh bién dich c6 thé biét duge ky hiéu ‘ABCH’ biéu dién mét bién cé tén ‘ABCH’ hay sé hex ABC). Tat cA cdc 6 ké trén c6 thé c6 du tuy ¥. Sau day 1a c&c vi dy céc 36 hgp 1é va khong hop 1é trong MASM: So 1100 1100b 12345 -3568D 1,234 1B4DH 1B4D FFFFH OFFFFh Cac ky ty. Kiéu thap phan nhj phan thap phan thap phan khéng hgp 1é, chita ky tu khéng 18 chit so sé hex s6 hex khong hgp 16, khong két thtic 18 'h’ 36 hex khéng hop 1é, khong bat dau bang mét chit sé thap phan sé hex Cfc ky tut va chubi cdc ky tu phai duge bao trong dau nhay don hay nhay kép. Vi du “A”, “hello. Cac ky tu duge trinh bién dich dich ra ma ASCII cha chung. Vi vay chutong trinh khéng phan biét gitfa ‘A’ va 41h (la ma ASCII cia ‘a). Bang 4.1 Cac toan ti gid dinh nghia sé ligu. Toan tir gia Biéu dién DB Dinh nghia byte Dw Binh ngbia word 8 Sareea 4.3 pp Dinh ngbia tit kép DQ Dinh nghia 4 word (4 tit lién tiép) DT Dinh nghia 10 byte (10 byte lién tiép) Cac bién. Trong Hop ngit cae bién cé vai trd giéng nhu trong céc ngén ngit bac cao. Méi bién c6 mét kiéu dit ligu va duge chuong trinh gén cho mét dia chi bé nhé. Cée toan tit gid dinh nghia sé ligu va ¥ nghia cia chung duge liét ké trong bang 4.1, Méi toan tit gid c6 thé duge ding dé thiét lap mét hay nhiéu dit ligu cda kiéu dé dude dua ra. Trong phan nay chting ta sit dung DB va DW dé dinh nghia cac bién kiéu byte va céc bién kiéu word. Cac toan tit gid khac duge ding trong chong 18 66 lién quan dén cac thao tac véi s6'c6 dé chinh xéc kép va s6 khong nguyén. 4.3.1 CAc bién kiéu byte. DAn huéng dinh nghia mét bién kiéu byte cia trinh bién dich c6 dang sau day: Tén DB gid_tri_khéi_tao Trong dé todn tix gia DB duge hiéu la “dinh nghia byte” Vi du: ALPHA DB 4 Véi din,huéng nay, Hgp ngit sé gan tén ALPHA cho mét byte nhé va khdi tgo né gia tri 4, Mét dau chéfm héi (2) dat 6 vi trf cita gid tri khdi tgo sé tao nén mét byte khéng duge khdi tao. Vi du: BYTE 0B ? Gidi han thap phan cia cdc gid tri khdi tao nim trong khodng tix -128 dén 127 véi kiéu c6 dau va ti 0 dén 255 vi kiéu khong dau. Cac kkhoang nay vita ding gid tri ciia mét byte. 4.3.2 Cac bién kiéu word. s Dan huéng dinh nghia mét bién kidu word cia trinh bién dich o6 dang sau day: Tén Dw gid_tri_khéi_tao 79 ‘Toan tit gia DW c6 nghia la “dinh nghia word”. Vi du: wWRD DW -2 Ging nhu véi bién kidu byte mét d&u chém héi 6 vi tri gid tri khdi tao c6 nghia 1A word khéng duge khéi tao gia tri dau. Gidi han thap phan cia gid tri khdi tao duge xée dinh tit -32768 dén 32767 déi voi kiéu c6 dau va tit 0 dén 65535 déi voi kiéu khong dau. 4.3.3 Cac mang. 80 Trong ngén ngi hgp ngi, mang chi la mot chudi céc byte nhé hay tit nhé. * Vi du dé dinh nghia mang 3 byte cétén B_ARRAY véi cac gia tri khdi tao 1a 10h, 20h, 30h chting ta 6 thé viét: B_ARRAY DB 10h, 20h, 30h Tén BLARRAY duge gan cho byte déu tién, BLARRAY+1 cho byte thi hai va B_ARRAY+2 cho byte thit ba. Néu nhu trinh bién dich gan dia chi offset 0200h cho B_ARRAY thi b6 nhé sé nhu sau: Phan tv Dia chi Néi dung B_ARRAY 0200h 10h B_ARRAY+1 0201h 20h B_ARRAY+2 0202h 30h Mang cc word c6 thé duge dinh nghia m6t cach tuong ty,.Vi du: W_ARRAY Dw 1000, 356, 248,13 88 tao nén mét mang c6 4 phan tit véi cdc gid tri khdi tao 1a 1000,356,248,13. TY dau tién duge gan véi ten W_ARRAY, tit tiép theo gan'vdi W_ARRAY+2, réi dén W_ARRAY+4.v.v. Néu mang bt dau tai 0300h thi b6 nhé sé nhu sau: Phan ty Dia chi N@i dung W_ARRAY 0300h 10004 WLARRAY+2 0302h 356d W_ARRAY+4 0304h 248d W_ARRAY+6 0306h 134 vine sieiabeas Byte thip va byte cao trong mét word. Déi khi ching ta mun tham chiéu dén byte thép va byte cao cha bién word. Gia sit ta dinh nghia: * WORD1 bB 1234H byte théip cla WORD] 88 chia 34h cdn byte cao chita 12h. Byte th&p cé dia chi ky higu 1a WORD1, cén byte cao c6 dia chi ky higu la WoRD1+1. Cac chusi ky ty. Mét chudi ky ty cd thé duge khéi tao bing mang cdc ma ASCII: Vidy: LETTER DB "ABC! tuong duong véi: LETTER DB 41h, 42h, 43h ‘Trong mt chuéi, irinh bién dich phén bigt cdc chiz hoa va chit thudng. Vi vay chuéi ‘abe’ duge dich ra 3 byte véi cdc gid tri 61h,62Hi va 63h. Cing cé thé két hop cae ky ty va cdc sé trong mét dinh nghia. Vi du: MSG DB ‘HELLO', OAh, 0Dh, 'S* tuong duong voi: MsG DB 48h, 45h, 4Ch, 4Ch, 4Fh, OAh, 0Dh, 24h 4.4 Cac hing co tén. Dé tao ra cdc ma lénh Hop ng dé hiéu, ngudi ta thudng ding céc tén thigng trung dé biéu dién céc hang 86. EQU (EQUates: coi bang nhu, coi nhu) . Dé gan tén cho hang, chiing ta cé thé sit dung todn tit gid EQU. Ca phap: Tén EQU hang_sé Vi du: 7 LF EQU QAh 88 gan tén LF cho OAh, la ma ASCII cia ky ty xudng dong. Ten LF bay gid ob thé duge ding dé thay cho OAh i b&t cit dau trong chuong trinh. Trinh bién dich sé djch céc lgnh: 81 0 Mov DL, OAH va: Mov DL, LE ra cing mét chi thj may. Phan ti bén phai EQU cing cé thé la mét chudi. Vi du: PROMPT EQU "TYPE YOUR NAME" Sau dé thay vi: MSG DB “TYPE YOUR NAME" Ta c6 thé viét MSG DB PROMPT Chiiy; B@ nhé khéng dinh ché cho cac hing cé tén (khi bién djch, noi nao chita tén hang thi 6 dé sé duge thay déi béi gia tri cha hing). Hinh 4.1 Mov AX,WORD1 Trudc lénh MOV Sau lénh MOV 0006 ' 0008 AX AX 0008 0008 WORD1 WORD1 45 V jénh co ban. He lenh cia b6 vi xit ly 8088 c6 dén hon mét tram lénh, trong 46 06 eéc lenh duge thiét ké danh riéng cho cc bé vi xit ly cao c&ip (xem chung 20). Trong phan nay chting ta s® xem xét 6 lénh tign dung nhét cho viée chuyén di ligu va thu hign cée phép tinh s6 hoc. Céc lgnh ma chiing t6i duta ra 6 day c6 thé ding duge cho ca céc toan hang byte va word. ‘Trong phén sau day, WORD1 va WORD? la cae bién kiéu word, BYTE1 va BYTE? Ia cdc bién kiéu byte. Nhu 44 néu trong chuong 3, AH 1a byte cao cha thanh ghi AX; BL la byte thap cba BX. 82. ee, Hinh 4.2 XCHG AH,BL True XCHG Sau XCHG , 1A 00 05 00 AH AL ARG ALS 00 05 00 1A BH BL BH BL 4.5.1 MOV va XCHG. Lénh Mov duge sit dung dé chuyén dit liéu gitta cdc thanh ghi, gitia mét thanh ghi va mét 6 nhé hoac chuyén truc tiép mt sd vao mét thanh ghi hay 6 nhé. Ct phap: MOV dich,nguén Sau day 1a mét vai vi du: MOV AX, WORDL Lénh nay doc 1a “chuyén WORD1 vao AX”. Néi dung cia thanh ghi AX duge thay bang néi dung cia 6 nhé WORD1. NOi dung cia WORD! khéng bi thay déi. Néi mét céch khéc, mt ban sao cia WORD1 duge giti vao AX (Hinh 4.1). MOV AX, BX AX lay gié tri chifa trong BX, con BX khong bi thay déi: MOV AH,’ WY Lénh nay chuyén s6 41h (ma ASCII cia ‘A’) vao thanh ghi AH, Gia trj truée dé cata thanh ghi AH bi viét dé lén (thay bang gia trj méi). Lénh XCKG (héén chuyén) duge ding dé hodn chuyén ngi dung cia hai thanh ghi, thanh ghi va mét 8 nbd. Cit phép la: XCHG dich, nguén Vi du: 83 XCHG AH,BL Lénh nay sé hon chuyén ndi dung cia hai thanh ghi AH va BL, nhu vay AH sé chia ndi dung trée day caa BL cn BL lai chita ngi dung truée day cha AH (Hinh 4.2). Mét vi dy khac: XCHG AX,WORD1 Lénh sé hodn chuyén n@i dung cia thanh ghi AX va 6 nhé WORD1. Bang 4.2 Cée kha nang két hop cho phép etia cdc ton hang trong lénh MOV va XCHG Chi thi} MOV Toan hang Thanh ghi céng| dich dung chung | Thanh ghi Onhe Hang s6 Ton hang doan Inguén, Thanh ghi céng dung| YES YES YES NO chung Hang sé YES NO YES Chi thi XCHG Toan hang Thanh ghi ich céng dung Onhé Toan hang ngudt chung Thanh ghicongdung | YES | Yes Cc han ché cla MOV va XCHG. 84 Vi ly do ky thuat, c6 mét vai han ché khi sit dung lénh MOV va XCHG. Bang 4.2 chi ra cdc kha nang két hop cho phép. Céin cht § rng céc chi thi MOV va XCHG khong hop 1¢ trong trudng hgp hai todn hang cling lA céc 6 nhé vi du : MOV WORD1,WORD2 — ;khéng hop Jé Nhung chting ta c6 thé gidi quyét vain dé nay bing cach sit dung céc thanh ghi, ching han: MOV AX,WORD2 MOV WORD1,AX 4.5.2 Cac chithi ADD, SUB, INC va DEC. C&c chi thi ADD va SUB duge sit dung dé céng hode triv néi dung cia hai thanh ghi, m@t thanh ghi va mét 6 nhé hoie céng (tru) mot s6' vao (ti) mét thanh ghi hay m6t 6 nhé. Cu phap: ADD dich, nguén SUB dich, nguén Vi du: ADD WORD1, AX Chi thj nay “cng AX vao WORD1”, sé cOng n6i dung cia thanh ghi AX véi noi dung cia 6 nh6 WORD! va chia tng trong WORD1. AX khéng bj thay déi ( Hinh 43). SUB AX, DX ‘Trong vi du nay “trir DX tix AX”, gid tri cla AX triv di gid tri cha DX, két - qua duge chita trong AX, thanh ghi DX khéng bi thay déi ( Hinh 4.4) ADD BL,5 Chi thj nay cdng sé 5 vao ni dung cia thanh ghi BL. Cang giéng nhu trudng hgp Nov va XCHG, c6é mét vai han ché khi két hgp cae ton hang cia ADD va SUB. Cac truéng hgp cho phép duge téng két trong bang 4.8. Phép cong hay trit tryc tiép gitta céc 0 nhé 1a khong hop Ié. Vi dy: . ADD —- BYTE1,BYTE2 ~ jkhéng hgp Ié Cé mét gidi phap 1a chuyén BYTE2 vao m6t thanh ghi truéc khi cng: MOV’ AL,BYTE2 sAL lay gid tri BYTE2 85 ADD BYTE1,AL je6ng vao BYTE INC (INCrement) dutge ding dé céng 1 vao néi dung cia mt thanh ghi hay 6 nhé , DEC (DECrement) trif 1 tit néi dung cia mét thanh ghi hay 6 nhé. Ca phap: Inc dich DEC dich Vi du: INC WORD1 c6ng 1 vao néi dung cua WORD1 (Hinh 4.5). DEC BYTE1 tri 1 ti bién BYTE1 (Hinh 4.6). Bang 4.3. 86 Cac két hgp cho phép cia cae ton hang trong phép cng va phép triz. Toan hang dich Toan hang nguén | Thanh ghi cong dung chung O nh Thanh ghi céng yes yes dung chung -4-4---4---4 Hang sé Hinh 4.3. ADD WORD1,AxX Truéc lénh ADD - Sau lénh ADD 01BC 01BC AX AX 0523 [oopr | WORD1 WORD1 Hinh 4.4. SUB AX,DX ‘Trude lénh SUB Sau lgnh SUB (0000 FFFF AX AX 0001 0001 DX DX Hinh 4.5. INC WORD1 Truée INC Sau INC 002 0003 WORD1 WORD1 Hinh 4.6. DEC BYTE1 Trude DEC Sau DEC 2 1 BYTEL BYTE1 Hinh 4.7, NEG BX Truée NEG Sau. NEG 0002 FFFE BX BX 4.5.3 NEG NEG dang dé phi djnh ndi dung cia todn hang dich. DEC sé thay thé néi dung béi phan ba 2 cha n6. Cu phap: 87 NEG dich ‘Toan hang dich cé thé 14 m@t thanh ghi hay mét 6 nhé. Vi dy: NEG BX : ‘Sé phi dinh nOi dung cia thanh ghi BX ( Hinh 4.7). Kiéu quy uéc ota cdc toan hang. Cae toair hang ciia cdc Iénh hai toan hang da néu phai v6 cdg kiéu, tite 1a cing 1a byte hoc word. Vi thé mgt lgnh nhu sau: MOV AX,BYTE1 chong hgp Ie la Kh6ng duge phép. Tuy nhién trinh.bién dich chap nhén ca hai }énh sau day: MOV AH,’A’ va MOV AX,’A’ Trong trudng hgp dau, trinh bién djch xét thay do toén hang dich AH la mét byte nén toan hang nguén cing phai 1a mét byte va né chuyén 41h vao AH. Dén trudng hgp sau, vi ton hang nguén 1a mét tit, né gid thiét toan hang dich cfing nhut vay va chuyén 0041h vao AX. ~ 4.6 Dich tir ngén ngit bac.cao sang Hop ngif . Dé cdc ban hiéu r5 hon nhing lénh dA néu.d trén, ching téi sé djch vai dong Ignh gan cia ngén ngit bac cao sang Hyp ngit . Chting t0i chi sit dung céc Iénh MOV, ADD, SUB; INC, DEC va NEG mée di trong vai trudng hgp néu ta ding cic Iénh néu sau nay sé thyfc hign t6t hon. Trong cde vi dy, A va Bla cdc bin word: Dong lénh Dich B=A MOV AX,A;chuyén A ‘vao AX MOV B,AX;r6i sang B Nhu da chi ra, chuyén true tigp gitta cée 6 nhé la khéng hgp lé, do vay ching ta phai chuyén ngi dung cia A sang m@t thang ghi truée khi chuyén sang B. . AP5-A, MOV AX,5. sdua 5 vao AX SUBAX,A sAX chita 5-A MOV A,AX dua né vio A 88 4.7 Vi dy nay minh hoa mét phuong phép dich cae lénh gan: thuc hién eée thao tac s6 hoc trong mt thanh ghi (chang han AX), sau d6.chuyén két qua vao bién dich. Trong vi dy nay cé mét céch khée ngdn hon: NEGA ADD A,5 sas Vi du tiép theo sé chi ra phudng phap nhan véi mét hing 86, A=B-2*4, MOV AX,B sAX chita B SUB AX,A sAX chita B-A SUB AXA sAX chita B-2*A. MOV A,AX jluu két qua vao A Cau tric chuong trinh. Nhu chyiong 3 da néu, cc chung trinh bang ngén ngit may gém c6 ma, d@ liu va ngan xép. Méi phdn chiém mét doan b6 nhé. Chuong trinh bing Hgp ngit cling c6 té chtte nhu vay. Trong trudng hgp nay, ma dit ligu va ngan xép duge edu trie nhu cée doan chuong trinh. Méi doan chuong trinh sé duge dich thanh mét doan b6 nhd béi trinh bién dich, Ching ta sit dyng cdc ding nghia doan don gidn hoa ma a duge ding cho MASM 6.0. Ta sé thao luan kg hon trong chung 14 cing véi cdc dinh nghia doan toan phin. 4.7.1 Cac ché d6 bé nhé. ich thuée cha doan ma va di ligu trong mt chitong trinh cé thé duge xéc dinh bang cach chi ra ché 4 bé nhé nhé sit dung din hung bién dich MODEL Ca phap: «MODEL kiéu_bé nhé . Cae ché dé bd nhé thudng sit dung nhat la: SMALL, MEDIUM, COMPACT va LARGE. Ching dutge trinh bay hinh 4.4. Tri khi c6 rat nhigu mé lénh hay s ligu, kigu thich hgp nhét 1a SMALL. Din huéng bién dich MODEL phdi duge dua vio truée bat ky mt dinh nghia doan nao.. Bang 4.4, Cac kiéu b6 nho, Kiéu Miéu ta SMALL Ma lénh trong mot doan Di liéu trong m6t doan. 89 MEDIUM compact LARGE HUGE 4.7.2. Doan di liéu (Data segment). Ma 16nh Dir ligu Ma 1énh Di 1iéu Ma 2énh De liéu chiém trong trong chiém chiém chiém Khéng c6 mang Ma 1énh De liéu chiém chiém nhiéu hen mot doan. mot dean, mét doan. nhiéu hon mét doan. nhiéu hon mt doan, nniéu hon mét doan, néo 16n hon 64 Kbyte. nhiéu hon mét doan. nhiéu hon mét doan, Cac ming cé.thé 1én hon 64 Kbyte. Dogn dit Tigu cia m@t chung trink chita tat c& cAe dinh nghia bin, Cang nhu vay céc dinh nghia hing cling thuéng ditge tao ra 8 day nhung chting cing 6 thé duge dua vio mgt ché khae trong chuong trinh bi vi khéng 06 6 nhé nao lién quan dén n6. Dé Khai bad mot doan di ligu ching ta sit dung din huéng bién dich .DATA, theo sau 1a céc khai bao bién hay hing. Vi dy: -DATA WORDL WORD2 MSG MASK DW 2 bw 5S DB ‘THIS IS A MESSAGE’ EQU 10010010B 4.7.3 Doan ngan xép (Stack segment). Mue dich cia khai bao dogn ngan xép 14 tao ra mt khdi bo nhé (ving ngan xép) 48 chita ngin xép, Ving ngan xp co thé di lén dé chita angan x€p véi kich thuéc lén nbat cha no. Cu phap khai bao nhu sau: -STACK kich_thuge Trong dé kich thuée 1a mét sé tu §, xae dich kich thuse eiia ving ngan xép tinh theo byte. Vi du: «STACK 100n 90 sé tuo ra 100h byte cho ving ngan xép ( kich thude hgp 1¥ cho hdu hét cdc ehuong trinh ting dung ). Néu kich_thitde bj bé qua, 1 Kbyte sé duce thiét lap cho vung ngéin xép. 4.74 Doan ma (Code segment). “‘Dogn ma chtta cde Iénh cha chuong trinh. Ci phap khai bao la: ;CODE tén Trong dé tén 1a mot tén doan tuy ¥ (khéng cAn thiét phai cé tén trong mét chugng trinh ding kiéu bé nhé .smaiL béi vi nhu. vay trinh bién dich sé phat sinh mét 1di). Bén trong doan ma, cac lénh duge té chite nhu cde thi tue, Mét dinh nghia tha tuc don gidn nhat 1a: Tén_tha_tuc PROC #than cla thi tuc Tén_tha_tuc ENDP) 4 day Tén_thi-tue IA tén cia thi tue; PROC va ENDP IA céc tofin tf gid danh déu bat dau va két thc tha tue. Sau day 1A m6t vi dy dinh nghia dogn ma: CODE MAIN PROC zede 1énh cla chuong trinh chinh MAIN ENDP | feae thi tuc khac 4.7.5 Téng hgp lai. Gid day sau khi dé nghién citu tat cd cde doan chugng trinh, ching ta e6 thé chi ra khuén méu chung cho mét chuong trinh dang kigu bé dhé . SMALL. Chi véi vai thay déi nhé, mau nay c6 thé ding cho tat cd céc chagong trinh ting dung: -MODEL SMALL -STACK 100H DATA icc G@jnh nghia s6 liéu & day ee 91 48 CODE MAIN PROC . zeac lénh & day MAIN ENDP yeac thi tuc khde 3.day . END MAIN Dang cudi cing cia chtiong trinh phii la din huéng bién dich END, theo sau la tén ca chuong trinh chinh. Cac lénh vao ra. ‘Trong chuong 1 ban da biét rang CPU lién‘lac véi cde thiét bi ngoai vi ‘théng qua cde thanh ghi vao/ra hay cén duge goi IA cée cdng vaolra. C6 hai lénh 6 thé tray nhp tre tiép edie ong 46 la IN va OUT. Céc lénh nay duge sit dung khi yéu c&u tée d6 cao, vi dy nhu trong cdc chudng trinh trd choi. Tuy nhién hau hét cde chugng trinh ting dung khéng ding céc Iénh IN va OUT bdi vi tht “nhat 1A cde dia chi céng thay déi gitta cae loai may tinh va sau nifa lap trinh vdi cc chudng trinh phuc vy duge cung eép béi cée nha san xudt d& hon nhiéu. Co hai loai chong tinh phue vu vaolra: Cée chutong trinh cia DOS va BIOS (asic Input Output System). Cac chuang trinh BIOS duge chita trong ROM va tac dong truc ti€p téi cée edng vao/ra. Trong chudng 12, ching ta sé ding ching dé thyc hign cée thao tae eg ban véi man hinh nhu di chuyén con tré hay cud man hinh. Céc chuong trinh cia DOS c6 thé thuc hién cdc.cong viéc phic tap han, vi dy nhw in mt chudi ky ty. Thue ra chting sit dung cée chugng trinh cia BIOS dé thyc hign cAc thao tée vao/ra true tiép. Lénh INT. - Lénh INT duge ding dé goi cac chuong trinh ngAt cia DOS va BIOS. Né c6 dang sau: INT s6_hiéu_ngat 4 day, s6_higu_ngét 1a mét con sé xc dinh mét chung trinh. Vi du: INT 16,8 ggi cde phuc vu ban phim cia BIOS. Chuong 15 sé trinh bay vé lénh INT mét cach chi tiét hon. Sau day ching ta sé sit dung mt chuong trinh dic biét ca DOS, phuc vu ngdt 21h. 4.8.1 Ngat 21h Ngdt 21h duge ding dé goi rit nhiéu ham etia DOS (xem phy luc C). Mai ham duge goi bing céch dat s6 ham vao trong thanh ghi AH va goi INT 21h. Ching ta hay xem xét cc ham sau day: S6 hiéu ham Chuong trinh 1 Vao mét phim . 2 Dua mot ky ty ra man hinh 9 . Dua ra mét chudi ky ty Céc ham cia ng&t 21h nhan dif ligu trong cac thanh ghi nao d6 va tra vé két qué trong cée thanh ghi khde. Céc thanh ghi nay sé duge ligt ké khi ching ti m6 ta méi ham. Ham 1: "" Vao.mét phim. Vao: AH=1 Ra: AL= Ma ASCII néu mét phim ky tu duge = 0 Néu mét phim diéu khién hay chtic nang duge nhanj Dé goi phue vu nay, ban hay thc hign cde lénh sau: MOV AH,1 sham vao.mét phim INT 21h #m& ASCII trong aL B6 vi xit ly 68 doi ngudi ett dung én mot phim_néu cn thiét. Néu mot phim * ky tt duge én, AL 56 nh§n ma ASCII va'ky ty duge hign Ién-trén man hinh, Néu mét phim khée duge én, chang han phim mii tén, F1-P10.., thi AL 6 chita ©. Trong céc lgnh tiép theo INT 21h cé thé kiém tra AL va thuc hién tac va thich hgp. Bai vi ham 1 ofa ngit 21 khong duta ra théng béo dé nguii sit dung vao mot phim nén ban sé khong biét duge la may tinh dang doi nhép 36 ligu hay dang lam cde céng viéc khac. Ham tiép theo cb thé duge'ding 46 dua ra cée thong bao nhap 86 ligu: 93 thi mét ky tut hay thi hanh mét ehite nang diéu khién. Vac: AH=2 DL= ma ASCII cia ky tu hién thi hay ky ty diéu khién. | + Ra; AL= ma ASCII cda ky ty hién thj hay ky ty diéu khién. Dé ding ham nay hién thi mét ky tu, ta dat ma ASCII cda né trong “DL. Vi dy ede Jénh sau day sé lam xuat hién dau chém héi trén man hinh: MOV AH,2 MOV DL," 2" INT 21h Sau khi ky ty duce hién thi, con tré man hinh dich sang vi tri tip theo ela dong (nu 6 cudi dong, con tré man hinh sé dinh chuyén sang déu dong tiép theo). Ham 2 ciing cé thé duge ding dé thuc hién mét chite néng diéu khién. Néu nhu DL chita ma ASCH cla kf ty digu khién, ham nay sé thi hanh chiie nding diéu khién dé, Cac ky tu diéu khién quan trong dude chi ra sau day: M& ASCI(Hex) Ky higu Chite nang 7 BEL phat tiéng bip (beep). 8 BS Tdi lai mét vi tri. 9 HT tab. A LE xudng ding. D cR xuéng ding va vé.dau déng. Khi thue hign, AL nhan m& ASCII cba ky tu diéu khién. 4.9 Chuang trinh dau tién. Chuong trinh d4u tién cia ching ta sé doc mét ky ty tit ban phim va hién thi n6 & ddu dang tiép theo. Ching ta bat du bang vige hién thi mét dau cham héi: MOV AH,2 ; ham hién thi ky tu MOV DL,’ ?’ 3s ky tu la %?” 94 INT 21h 7 hién thi ky tu Lénb thi hai chuyén 3Fh (ma ASCII cia ‘?) vao thanh ghi DL. Tiép theo ta hay doc mét ky tu: MOV AH, 1 7 ham doc mét ky ty INT 21h * ky tu trong AL Bay gid ching cfin hién thi ky tu d dong tip theo. Trude khi thye hién diéu nay, ky tu phai duc cat vao mét thanh ghi khéc (chung tdi sé gidi thich diéu nay trong chéc lat). MOV BL,AL ; c&t ky ty trong BL Dé dich chuyén con trd man hinh dén vj tri déu dong tiép theo ching ta phai thuc hién cde tac vy xudng dng va vé dau dong, Ching ta cé thé thyc hién cdc ham nay bing cach dua ma ASCII cita ching vao DL va goi ngdt 21h. MOV AH, 2 # ham hién thi ky ty MOV DL,ODh i vé déu déng INT 21h * thuc hién vé déu dong MOV DL, OAh # xudng dong INT 21h # thuc hién xuéng dong Ly do ma chiing ta phai dua ky ty ti AL vao BL la ham 2 eda ngét 21h lam thay déi AL. Cuéi cung ching ta da afin sing bién thi ky tu: MOV DL,BL j;lay ky ty INT 21h iva nién thi no Sau day la chudng trinh day di: . Chuong trinh PGM4_1.4SM TITLE PGM4_1:SAMPLE PROGRAM -MODEL SMALL «STACK 100H - CODE MAIN PROC 95 MOV AH, 2 ; ham hién thi ky ty MOV DL,‘ 2?" 7 ky ty 1a %?” i INT 21h 7 nién thi ‘ky ty jvao mét ky ty . Mov AH,1 7 ham doc mot ky ty INT 21h + ky ty trong AL MoV BL, AL ; c&t ky tu trong BL ' ixudng dong méi: > i MOV AH, 2 7 ham hién thi ky ty MOV DL, ODh 7 vé @&u dong INT 21h 7 thyc hién vé dau dong MOV DL, OAh ; xuéng déng . INT 21h ; thye hién xu6éng dong phign thi ky tu: . MOV DL, BL pldy ky ty INT 2ih iva hién thi no ytx& vé DOS ! MOV AH, 4CH yham thodt vé DOS 1 INT 21H #thoat vé DOS ‘ MAIN ENDP . END MAIN Do khéng ding cac bién nén ta bé qua doan dit ligu. Két thac mét chung trinh. Hai dong cuéi cing ca chuong trinh MAIN cén c6 d6i Idi gidi thich. Khi mét chuong trinh két thic, né phai tra didu khién vé cho DOS. Chiing ta c6 thé thyc hién diéu nay bing cach goi ham 4Ch eda ngat 21h. 4.10 Tao lap va chay mot chuong trinh. Bay gid ching ta da sin sang dé xem.xét cdc butéc tao lap va chay mot chuong trinh, Chuong trinh néu 4 trén nhut 1A mét wi du dé khao sat. C6 4 bude cu thé (hinh 4.8): 1, Dang mét chuong trinh soan thao van ban tao ra mét file chuong trinh nguén (source program file). 2. Dung mét chudng trinh bién dich tgo ré file déi tugng ngon-ngit may (object file) 2, Ding mét chuong trinh bién dich tao ra file d6i tugng ngon nga may (object file). 3. Dang chyong trinh LINK (sé trinh bay chi tiét sau) lin két m6t hay nhiéu file d6i tutgng tao ra cdc file chong trinh (run file). 4. Cho chay file chuong trinh. Trong chi d&n nay, céc file céin thiét (chvong trinh bién dich va chuong trinh lién két) 06 trong 6 dia C, cae dia cia nguéi lap trinh trong 6 dia A. Chiing ta dit 6 dia A 1a 6 dia mic dinh dé cac file tao ra s& duge chita trong dia __ cia ngudi lap trinh. Buc 1. Tao lap file churang trinh nguén. Chiing ta da sit dung mt chutong trinh sogn théo van ban tao chutong trinh 6 trén véi tén la PGM4_1.ASM. Phan mdi réng .ASM duge quy uéc ding dé inh nghia mét file nguén cia Hop nga. Buéc 2. Hgp dich chuong trinh. Ching ta sit dung MASM (Microsoft Macro Assembler) dé dinh file nguén PGM4_1.ASM sang file doi tugng ngén ngit may PGM4_1.0BJ, Lénh don gién nhat (cAu tré 1di cla ngudi sit dung xuat hién trong ving dém) la: AOC:MASM PGM4_1; Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988.- All -right reserved. : 50060 + 418673 , Byte symbol space free 0 Warning Errors 0 Severe Errors ‘Sau khi in ra céc thong tin ban quyén, MASM kiém tra cdc Idi ci php cha file nguén. Néu tim thay mét 16i nao dé né s& hién thi s6 dong cia méi di va mét huéng din ngain gon. Trong trudng hgp nay do khéng cé 16i nao, MASM sé dich ma Hgp ngit thanh file 46i tugng ngén ngit may véi ten PGM4_1.0BJ. Hinh 4.8 Cac buéc lap trinh. a tgo lap chung tink gud : File ASM Y File OBJ lién két chuong trinh OBJ File .EXE Dau cham phay theo sau céu lénh cé nghia la ching ta khéng muén phat sinh thém cdc file khéc naa. Ta hay bé n6 di va xem cdi gi xdy ra: gp dich chugng trinh nguén A>C:MASM PGM4_1 Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981, 1988. All right reserved. Object filename [ PGM4_1.0Bd ]..: Source listing. [NUL.LST] ¢ PGM4_1 cross_reference [NUL.CRF ]: © PGM4_ 1 50060 + 418673 Byte symbol space free 0 warning Errors 0 Severe Errors Lan nay MASM in ra cdc tén file e6 thé duge tg0 nén va dgi ching ta dua vao tén méi. Cc tén mée dinh duge viét trong d&u ngaéc vuéng. Muén chap nhaén mét tén chi cn nbéin phim Return, Tén mic dinh NUL c6 nghia la sé khong tao tén file dé néu ta khong dua vao mot tén, do vay 4 day ta tra Idi véi ten PGM4_1. File nguén listing. File nguén listing ( file LST) 1A m6t file vin ban cée dong duge dénh 36 hién thi ma Hgp nga bén canh ma may tudng ting déng thai dua ra cae thong tin khac vé chuong trinh. Diéu nay dac biét cé ich cho cde muc dich gd r6i bai vi cae 16i cla MASM dua ra kém theo a0 dong. File tham khao ngang (Cross_reference file). Fie tham khéo ngang (file CRF) 1a mét bang ligt ké cée tén xudt hign trong chufong trinh va sé thit tu cac dong ma né cé mat. N6 cdn thiét khi xdc dinh cae bién va cae nhan trong mt chudng trinh én. Vi dy vé cdc file LST va .CRF duge chi ra trong phy lye D cing véi cae phan chon khée cha MASM. Buséc 3. Hop dich chuong trinh. File .OBJ duge tgo lap 4 bude 2 1a mét file ngon ng’ may nhung né khong thé thyc hién duge bdi 1é khuén mau cia né cha thich hgp véi mot File chugng trinh: . 1, No khong biét duge noi ma chuong trinh sé dude nap vao trong bd nhé dé thi hanh, va dia chi ma méy cé thé chuta duge dién vao. 2. Mét vai tén ding trong chung trinh cé thé chifa dude djnh nghia. Vi du: trong mt chuong trinh lén cé thé cén phai tao ra vai file, va mét tha tuc trong mét file nay cé thé tham tro téi mot tén duge dinh nghia trong file Kha. Chuong trinh LINK sé gém mét hay nhiéu file déi tugng, dién vao moi dia chi cdn thiéu va két hop céc file déi tuong thanh mét file kh thi duy nh&tt ( file -EXE). File nay 06 thé duge nap vao trong bé nhé va chay luén. Dé lién két chuong trinh ban hay danh vao: BOC:LINK = PGM4_ Giéng nhy trén, néu khong c6 dau chim phy, chuong trinh lién két sé dua ra thong bao dé ban vAo cdc tén cita cfc file phat sinh (xem phy lye D), Butie 4. Chay mét chuong trinh. Dé chay mot chudng trinh ban chi céin danh vao tén File chuong trinh cé ho§c khéng cé phan mé rong .EXE. A> PGM4_} 2A a Chuang trinh in ra dau‘? va dgi chting ra dua vao mét ky ty. Ta dénh vio A va chuong trinh lap lai né 4 dong ti€p theo. - 4.11 Hién thj mét chudi. ‘Prong chuong trinh déu tién, ta ding cac ham 1 va 2 cha ng&t 21h dé doe va hién thj mét ky ty. Sau day 1A mot ham khéc cua ng&t 21h dude ding dé hién thi mét chudi cac ky ty: Ngat 21h, Ham 9: Hién thi mét chudi. Vio: DX=dia chi tuong déi (offset) clia chudi. ; Chudi phai két thie bang ky tu ‘S ‘ Ky ty '8 ‘ danh dau két thie chudi va khong duge hién thi. Néu nut chuéi chita ma ASCII cia ky tu diéu khién thi cdc chic nang diéu khién sé duge thi hanh. Bé lam vi dy cho ham nay, ching ta sé viét mt chuong trinh in chudi “HELLO?” ra. man hinh, L4i chae- nay duge dinh nghia trong doan di ligu : MSG DB “HELLO! $” 1 AOQ Lénh Lea. Ham 9 cia ng&t 21h yéu céu dia chi tuong doi cha chudi ky ty chia trong DX. Dé thuc hién diéu nay ching ta sé ding mot lénh mdi: LEA dich, nguén ‘Trong dé dich la mét thanh ghi cong dung chung, nguén la mét 6 nhé. LEA ¢6 nghia la “Load Effective Address” (nap dia chi thyc). Né sé ldy ra va chép dja chi tugng déi cia nguén sang dich. Vi du: LEA Dx, MSG sé nhap dia chi tuong di cia bién MSG vao DX. . _-Boi vi chutong trinh thi hai cia ching ta cé chia doan dit liéu nén né sé f duge bat ddu vét lénh khdi tao DS. Phan tiép sau day sé gidi thich tai sao cae lénh dé 1a cin thiét. Doan md dau chuong trinh, Khi mét chutong trinh duge nap vao b§ nhé, DOS sé danh cho né 256 byte doan mé dau chuong trinh (PSP_Program Segment Prefix). PSP chita cdc théng tin vé chudng trinh vi thé chuang trinh cé thé truy nhép vang nay. DOS sé dua Gia chi ciia PSP vao cA trong DS dn ES truée khi thi hank chuong trinh. Két ( qua Ja DS khong chtia dja chi cha doan dif ligu. Dé chay dang, m6t chuong trinh 6 chita doan dit ligu sé duge bat dau véi hai lénh sau: Mov AX, @DATA Mov DS, AX @parta la tén cia doan dit ligu duge dinh nghia béi .DATA. Chuong trinh bién dich s& dich @DATA thanh ja chi. Ta phai ding hai lénh vi JA mét a6 (dia chi dit ligu) khong thé chuyén tryc tiép vao mOt thanh ghi doan. Véi thanh ghi DS da duge khdi tao, chting ta ¢6 thé in'ra léi chao“HELLO! bang céch dua dia chi cia né vao thanh ghi DX réi goi ngat 21h: LEA DX, MSG i lay théng bao MOV AH,9 : ham hién thi chuéi INT 21h + nién thi chuéi Sau day 1a chutong trinh day dit Chuong trinh PGM4_2.ASM 101 Sau day 1a chuong trinh day di Chuong trinh PGM4_2.ASM TITLE PGM4_2: Chuong trinh in chuéi ky ty. MODEL SMALL STACK 1008 DATA MSG DB “HELLO! $” = CODE MAIN PROC rkadi tao DS MOV AX, @DATA Mov DS, AX rhién thi théng bdo LEA DX,MSG ; léy théng bdo MOV AH, 9 + ham hién thi chudi INT 21h 7 hién thi chudi wtrd vé DOS . Mov AH, 4CH INT 21H MAIN ENDP END MAIN ° Va day 1a két qua khi chay chuong trinh: A> PGMA 2 HELLO! 4.12 Mat chuong trinh déi chit thudng thanh chit hoa. Bay gid ching ta sé téng két cdc kién thite trinh bay trong chuong nay vio mét chuong trinh duy nh&t, Chuong trinh nay sé bat dau bing viée nhac ngwi sit dung duta vao mét chit thudng, trén ding tiép theo n6 96 dua ra mgt thong bao khac vdi chit da duge ddi sang dang in hoa. Vi du: ENTER A LOWER CASE LETTER : a IN UPPER CASE IT IS : A Chang ta ding cac tén CR va LF dé dinh nghia cac hang s6.0DH va OAH. MSG1 DB ‘ENTER A LOWER CASE LETTER : $¢ MSG2 DB CR,LF,’IN UPPER CASE IT IS : CKAR DB 2,75 ° Khi dinh nghia MSG2 va CHAR’ ching ta sit dyng m6t manh khoé hitu hiéu: Béi vi chuong trinh phai hién thi thong bdo thit hai va mét chi cai (sau khi da déi thanh chit hoa) trén dong tiép theo, MSG2 bat dau vdi ma ASCTI cia ‘ky tu xudng dong va trd vé déu dong. Khi MSG2 duge hién thi bing ham 9 cia ng&t 21h cde chtte nang diéu khién nay sé duge thi hanh va thong bao duge hién. thj 6 dong tiép theo, Do MSG2 khéng két thtc bang ky ty ‘S', ngat 21h sé hién thi cd ky ty chita trong CHAR. Chuong trinh cia ching ta bat déu vdi viée hién thj théng béo thit nhat va dye kg tu: LEA DX,MSG1 ; lady théng bao dau tién MOV AH, 9 7 ham hién thi chudi INT 2th + nién thi théng bao déu tién MOV AH, 1 7 ham doc m6t ky tu INT 21h + doc mét chit thuéng vao AL Sau khi dé doc vao chit thutng, chuong trinh phai déiné sang dang cho hoa. Trong bang ma ASCII, cae chit thudng bat ddu tai 61h va céc chi hoa bit dau tai 41h, vi vay dé déi kidu chit chi edn lay néi dung AL triz di 20h: ° SUB AL, 20H ; @éi thanh chit hoa MOV CHAR, AL. 7 va luu trip no Bay gid chuong trinh sé hién thi thong béo thé hai va chét 6 dang in hoa; DX, MSG2 3 ldy théng bao tha hai . AH, 9 3 ham hién thi chudi 2ib ; hién thi théng bao thir hai 7 va chit hoa 2” sau day 1A chutong trinh day di: Chuwong trinh PGM4_3.ASM TITLE PGM4_3:SAMPLE PROGRAM 103 -MODEL SMALL -STACK 1008 DATA cR EQU ODH LF EQU OAH : MSG1 DB ‘ENTER A LOWER CASE LETTER: $° MSG2 DB CR,LF,! IN UPPER CASE IT IS 3" CHAR DB 2S > . CODE MAIN — PROC Fkndi tao DS MOV AX, @DATA MOV DS, AK yin dong nhac ngudi sit dung LEA DX,MSGL ;14y théng bao dau tién MOV AH, 9 yham hién thi chudi INT 21h phién thi thong bao dau tién jvao mot ky tu va déi thanh chit hoa Mov AH, 1 pham doc mot ky ty INT 21h ;doc mot chit thuéng vao AL SUB AL,20H ;d6i thanh cht hoa MOV CHAR,AL va luu trit né phién thi trén déng tiép theo LBA DX, MSG2 ;ldy théng bao tht hai MOV AH, 9 yham hién thj chuéi* INT 2in phién thi théng bdo thir ;hai va chit hoa jtrd vé DOS MoV AH, 4CH INT 218 MAIN ENDP END MAIN TONG KET: + Cae chuong trinh bing Hyp nga duige tao nén tiv cdc dong Ignh. Méi dong lénh c6 thé 1A mét Iénh sé duge may tinh thi hinh hay mot ddmehudng cho chong trinh bién dich. Cae déng lénh bao gém céc trudng tén, tofn ti, (cae) toan hang va truéng 18) binh. MOt tén ob chita d&n 31 ky ty. Cac ky ty 06 thé 1a che chit efi, chit s6 hay cc ky higu je bigt nao dé. Cfc sé 06 thé duge viét d dang nhj phan, thap phan hay hex. Cfc ky ty va chudi ky ty phai duge bao boc béi dtu ngofe don hay ngode kép. Cac dan huéng DB va DW duce ding dé dinh nghia céc bién byte va cae bién word, 5QU sit dung khi muén gan tén cho hing. Néi chung mét chutong trinh chita mt doan ma, mét doan dif ligu vA mét doan ngan xép. MOV VA XCHG duge ding dé chuyén sé ligu. C6 mét vai han ché khi sit dung céc lénh nay, vi du chting khong thé thao tac truc tiép gitia cde 6 nhé. ADD, SUB, INC, DEC va NEG 1a cdc lénh 86 hoc cd ban. Cé hai c&ch xudt va nh§p di ligu 46i voi IBM PC : lién lec truc tiép vdi cc thiét bj ngoai vi théng qua cdng va sit dung cdc phye vy ngat cla DOS va BIOS. Phuong php tryc ti’p khé lap trinh va phu thuge vao cfc vi mach phan céing nhat dinh. Xudt vi nhip cdc ky ty hay céc chudi cé thé thy hién’ nhd phye vu ngét 21h cia DOS. Ham 1 cia ngét 21h doc mot kf ty tit ban phim vao thanh ghi AL. Ham 2 caa ngat 21h hién thj ky ty cé ma ASCII chita trong thanh ghi DL. Néu DL chita ma ASCII cata mét ky ty diéu khién thi ehitc nang diéu khién 86 duge thi hanh. . Ham 9 cia ngét 21h hién thj chudi 6 dja chi tuong déi trong DX. Chudi phai dude két thtic bing ky ty ‘S‘ 105 Thuat ngit tiéng Anh Array assembler directive CODE segment .CRF file DATA segment destinasion operand .EXE file instruction AST file memory MODEL object file ‘M6t chudi céc byte hay tix nhd. Din huéng bién dich: Din hvéng cho chudng trinh bién dich thye hign mét vai nhigm vy dc biét. Doan ma. Vang chung trinh chita cdc lénh. File tao nén bai trinh bién dich trong dé ligt ké cée tén xuéit hign trong chung trinh va sO cia cée dang ma ching xust hign. Doan da ligu. Vang chugng trinh chifa céc bién. ‘Toan hang dich. Toan hang dau tién cia lénh. NO sé chifa két qua tra vé. Gidng nhu File chuong trinh, Lénh hay chi thj. M@t ding lgnh duge chuong trinh bién dich djch ra ma may. File c6 cdc dong duge dénh sd tao bdi trinh bién dich trong d6 chita ma H¢p ngit, nd may vA cdc théng tin khéc vé chuong trinh. Kiéu bo nhé, T6 chic cla mot chung trinh cho biét téng sé c&c ma va dit ligu. File doi tugng. File ngén ngit may duge chong trinh bién dich tao rd ti file chung trinh ngudn. PSP (program segment prefix) Doan mé ddu chuong trinh :Vang 256 byte pseudo_op run file source operand source program file 106 détng trude chuong trinh trong bg nhé chia céc théng tin vé chuong trinb, ‘Toan tit gid. Din huéng bién djch. File chyong trinh. File ngén ngd may kha thi tao ‘nén béi chung trinh LINK. ‘Toan hang nguén. Toan hang thi hai, thuéng khong thay déi khi thyc hién enh. ‘Tép chuong trinh nguén. Tép van ban chung trinh tgo ra bling mét chong trinh sogn thao van ban. STACK segment variable Cac 1énh méi Doan ngan xép. Phdn cita chudng trinh chita ngan x@p hién hanh. - Bign. Tén tugng trung cho mot 6 nhd chia dit Tigu. ADD Int NEG DEC LEA SUB INC MOV XCHG Cac toan tix gid ‘mo. . CODE . MODEL EQU . DATA . STACK Bai tap: “1. Tén nao trong cdc tén sau day la hgp Ié trong Hgp ngit cho IBM PC ? a. TWO_WORD b. 21 c. Two_word d @ e, $145 f. LET’'S_GO g. TS. 2. 86 nao trong cdc s6 sau day 18 hgp 18. Néu ching hgp 18, hay chi r6 ching la sé nhi phan, thap phan hay sé hex. . 246 . 246h 1001 |. 1,101 e. 2A8h f. FFF Eh h. bh g. Oah i: 1110b Boge 3. Hay néu toan tt gid dinh nghia dif ligu cho cdc bién va hang sau day néu nhu chung hgp 18: a. Mét bién kiéu word duge khdi tao véi gid tri 52. b. Mot bién kiéu word WORDI, khéng dugc khii tao. c, Mét bién kiéu byte B dude khdi tao véi gid tri 52h. d. Mét bién kiéu byte C1 khéng duge khdi tao. e, Mot bin kiéu word WORD? dutge khdi tao véi gid tri 65536. £ Mot mang kiéu word duge khéi tao v6i 5 gid tri déu nguyén (tif 1 dén 5). g. Mét hing BEL bing 07h. h. Mét hing MSG bing‘ THIS 1S A MESSAGE $*. 4. Gia thiét rang cac sé ligu sau day duge nap vao bé nhé bat dau tai vi tri offset O000h: A DB 7 B DW 1ABCh c DB ‘HELLO’ 108 a. Hay cho biét céc dia chi offset cia cdc bién A, B va C, b. Hay cho biét ngi dung ciia byte tai offset 0002h dudi dang sohex. ¢. Hay cho biét noi dung cla byte tai offset 0004h duéi dang sé hex. d. Hay cho biét dja chi offfset ciia ky ty ‘0’ trong ‘HELLO’. 5. Hay cho biét mdi lénh dudi day Ia hgp Ié hay khéng hgp Ié, trong dé W1 va W2 [a cdc bién WORD; B1, B2 ia cdc bién BYTE. a. yov DS, AX b. Mov DS, 100h c wov DS, ES da. Mov WL, DS e. XCHG = W1,W2 f SUB 5,81 B ADD B1,B2 bh. ADD AL, 256 i. Mov W1,BL 6. Chi dung cdc I¢nh MOV, ADD, SUB, INC, DEC va NEG hay dich cac dong lénh gan ola ngén ngit bac cao sau day sang Hop ngit véi A, B, Ca cae bién kiéu word. Bon e. 77. Hay viét cae lénh ( khong phdi cae chung trinh day di) thuc hin cac céng viée sau day: a. Doc mét ky tu va hign thi né d vi trf tiép theo trén cng mot dong. b, Doc mét chit hoa (bd qua viée kiém tra 16i) va hién thj no 6 vj tri tiép theo trén cling mét dong dudi dang chit thuéng. 8, Viet mot chung trinh thyc hign cdc céng viée sau day: a, Hién thi dau hdi chéim (2). b.Doc hai chi sé thap phan c6 téng nhé hdn 10: e. Hign ilij vac 80 dé véi tong cia chting véi ding thong bao tuong ting, Vi du: 227 Tong caa 2'va 7189. 9. Hay viét mét chuong trinh thy hién cdc céng vie sau day: a. Dua ra thong bdo cho nguai sit dung. b. Doc 3 chit cai diiu cia ho, tén dém, tén cia mot ngudi. ¢. Hign thi ching ty trén xudng trén 1é trai. . Vi du: Ban hay vao 3 chit cAi ddu: NTB N Tt B 10. Vigt m6t chuong trinh doc mét chit s6 hex trong khong (A-F) r6i hign thi né tren dang tiép theo dang nhj phan. Vi du: Ban vao mét chi s6‘hex: C Dang thap phan oda né la: 12 11. Vit m6t chuong trinh hién thi m6t bang 10x10 dién day d&u sao. Goi y: Khai bao mot chudi xde dinh hép trong doan dit-ligu réi hién thi no bang ham 9 cia ngat 21h. 12. Viét mot chuang trinh: a. Hign thi dau". b. Doe 8 cha cdi. ©. Hign thi ching trong mOt bing 11x11 duge dién day cde dafu sao. 4, Phat ting kéu bip eda may tinh. 10 Chitong 5 TRANG THAI CUA BO XU LY VA THANH GHICO Téng quan ‘Mot diém khéc biét quan trong gitta may tfnh va eéc logi may khée d6 1A may tinh ¢6 kha nang quyét dinh. Cac mgch trong may tinh cé kha nang thyc hién nhiing quyét dinh don gian dya trén trang thai hign tai cia bd xit ly. Doi véi bd vi xi ly 8086, trang théi cha bé vi xit ly duge thé hign trong 9 bit riéng biét goi la céc cB. Moi quyét inh cita bé vi xi ly déu dua trén gid tri eda cde cd nay. Cc ed duge d&t trong thanh ghi cd vA ching duge phn thanh 2 logi cd trang thai va cd diéu khién, Cd trang thai phan anh két qua ciia cfc phép tinh, Trong chuong nay chting ta sé thy ching bi Anh huéng ra sao béi cdc chi thi may. ‘Trong chuong 6 ching ta sé nghién cifu viée st! dung ching dé xay dung céc chuong trinh c6 nhiéu lénh ré nhanh va ving lap. Cé diéu khién duge sit dung 48 cho phép hoc khéng cho phép mét thao tac nao dé eda b@ vi xit ly, chting sé duge mé ta 4 ede chitong eudi. Trong phan 5.1 chung téi sé gidi thigu chudng trinh DEBUG cua DOS, ching ta sé thay cach ait dung DEBUG dé thyc hign tig lénh trong ghutong trinh cia nguéi sit dung, hién thj cdc thanh ghi, cdc od va cdc 6 nhé. 5.1 Thanh ghi co . Hinh 5.1 cho thay cdu tric cia thanh ghi cd, Cac od trang thai nim 4 cfc bit 0, 2, 4, 6, 7 va 11 edn cae od diéu khién nim 6 céc bit 8, 9 va 10. cée bit khac khong cé y nghia. Chu y rang khéng cdn nhé cd nao nim 4 bit nao, Bang 5.1 trinh bay tén cdc 8 va ky hidu cia ching. Trong chuong nay ching ta sé tap trung vao céc cd trang thai. li ; 1141312 11109 8 7 6 6 4 3 210 LI "pF be tr FF be er [pr PF | FF | Hinh 5.1 Thanh ghi co Cac c6 trang thal Nhu da n6i trén, bé xit ly sit dung cd trang thai dé phan anh két qua cia mot phép tinh, ching han khi lénh SUB AX,AX duoc thc hign cd ZF s€ duge thiét lap 1 nhd vay né chi ra ring két qua bing 0 da duge tao ra. Bay gid chting ta hay xem céc cd trang thai. : C8 nhé (Carry Flag- CF) C8 CF dude thiét lap 1 khi c6 nhé ti bit msb trong phép cong hay c6 vay vio bit mab trong phép triy. Nguge lai no bang 0. C CF cing bj anh hudng béi eée Iénh quay va dich (xem chong 7). Cé chan Ié (Parity Flag- PF) Ca PF duge thiét lap 1 néu byte thélp cata két qua cé 86 chin cae bit 1(parity chin). N6 bang 0 néu byte thiip c6 sf 1é bit 1(parity 1é). Vi dy két qua cha mét 7 phép-céng cée word la FFFEh, nhu vay byte thiip 6 7 bit 1 do d6 PF=0 Cé nhe phy (Auxillary Flag- AF) Ci AF duge thiét lap 1 néu e6 nhé tix bit 3 trong phép cng hoke c6 vay vio bit 3 trong phép tri. Ca AF duge sit dung trong cée thao tée véi sf thap phan ma hod nhj phan (s6' BCD). C& Zero (Zero Flag- ZF) C8 ZF dutgc thiét lap 1 khi két qué bing 0 va nguge lei. Cé dau (Sign Flag- SF) C8 SF duge thiét lap 1 khi bit msb cia két qué bing 1 6 nghia 1a két qua lA am néu ban lam vige véi af c6 défu. Ngugé lai SFO néu bit msb ota két qua bang 0. 112 Cé tran (Gwerflow Flag OF) Ca OF duge thiét lap 1 khi xy ra tran nguge lai no bang 0, khai niém tran sé duge gidi thich sau day. Ga trang thai Bit | Tén got Kyhigu | 0 | cannes cr 2 | Cochanis PF 4 Cé nhé phy AF 6 | cazERO aE 7 | caddu SF 11] Catan oF Cé diéu khién [Be], Teg | Kyhiee | 8 | Cabay "Fr 9 | Cangat IF 10 | C&inh hung DF : Bang 5.1 Tén cd vA cae ky hiéu. 5.2Hléntugngtran : : Hién tugng tran gan lién véi mét su that 14 pham vi cia cdc s6 biéu dién trong may tinh cé gidi han. . Chuong 2 da chi ra ring pham vi cita cde 36 thap phan c6 délu c6 thé biéu dién bing m9t word 16 bit 1A tit -32768 dén 32767, véi mot byte 8 bit thi pham vi la tit -128 dén 127, Déi vai cae sO khéng dau thi pham vi la ti 0 dén 65535 cho mét word va tit 0 dén 255 cho mét byte, Néu két qud cia mét phép tinh nam ngoai pham vi nay thi hign tugng tran sé xay ra va két qué nhan dude bi cat bot s& khéng phai la két qua dting. 113 Cac vi du vé hién tugng tran Su tran e6 dau va khéng 6 difu Ia cfc hign tung de lap nhau. Khi ching ta thuc hién mét thao tac 56 hoe nhu cong hay trit, c6 4 kha nang xdy ra la: (1) khong tran, (2) chi tran c6 défu, (3) chi tran khong déu, (4) tran c6 dau va khong | défu déng thai. Day 1a mét vi dy yé hién tugng tran khong d&u nhung khéng tran c6 dau: Gia sit AX chtta FPFFh, BX chia 0001b va lénh ADD AX,BX duge thuc ' hién, Két qua dang nhj phan nhu sau: . qqi1 1111 1112 1111 + 0000 0000 0000 0001 ee 1 0000 0000 0000 0000 : : Néu chting ta lam viée vdi cée 's6 khong da&u, két qua ding phai 1a an 100000h= 65536, nhung két qua nay nim ngoai pham vi biéu dién cia mét * word nén két qué cdn lai trong thanh ghi AX 1a Oh, day 14 mgt két qua sai, nhu \ vay hign tugng tran khong dau da Say va, Nhung két qua nhgn duge lai ding vai cde 86 06 déu, FFFFh =-1 khi hiéu 1a 60 cd détu, trong khi 46 0001h = 1 vay téng etia chiing bing 0, r3 rang hign tugng tran c6 dau da khéng xay ra. Bay gid chang ta hay xem mOt-vi du vé hién tugng tran c6 du nhung lai khong tran khéng dau, Gid'stt AX va BX cing chifa 7FFFh, hay thue hién phép cong ADD AX,BX. DEBUG A:PGM5_1.EXE DEBUG sé dap lai bing d&u nhac cia né: “-*, va doi lénh dua vao. Trude hét ching ta cé thé xem cdc thanh ghi bang cach dénh yao Iénh "R”. -R AX=0000 BX=0000 CX=001F DX=0000 SP=000A BP=0000 Si=0000 Dt=0000DS=0EDS ES=0ED5 SS-0EES CS=0EE6 1P=0000 NV UP DI PL NZ NA PO NC 0EE6:0000 Ba0040 MOV AX, 4000 ‘Trén man hinb cho thay noi dung ca cée thanh ghi d dang hex, tai dong thit 3 chiing ta thay: OBES: 0000 B80040 MoV AX/'4000 FE6:0000 La dja chi cia lénh tiép theo sé duge thyc hign cho duéi dang segment :offset. 890040 1a ma may cia lénh dé. Doan OEE6 1a noi DOS quyét dinh nap chwong trinh yao, néu ban thi lam vi dy nay 06 thé ban s@ nbn duge dja chi kkhée, 8 c&p chit xudt hign bén phai cia ding thif 2 1A trang thai hin tai ofa che 3, Céc c3 xuétt hién theo trinh ty: OF, DF, IF, SF, ZF, AF, PF va CF. Bang 5.2 trinh bay eéc kg higu DEBUG sit dung cho cée 03. Cae ban 06 thé thity cite «8 da bi DEBUG xoa, ¥ nghia eta ede 0d di va chuong 15. 1 khién sé duge gidi thich 6 chung 11 Dé ting bude thuc hi n chudng trinh. chting ta sit dung lénh "T (Traces, trude khi lam diéa dé hay hién thi lai noi dung cdc thanh ghi mét lin naa 000 CX=001F Dx=0000 SP-000R BP=000 sT=0000 SODS=0EDS eS-ORDS ss=0ERS BE6 1P=0000 NV UP pI pi. We NA PO NC . . . OEEO:9000 BROuaS MOV AX, 4000 Cc Lénh dau tién la MOV AX .4000h ——_. - 000 SP= SUB AX, PEFF Bay gid AX chita 4000h + 4000h = 8000h. SF tré thanh LONG) dé chi ra két gua 18 s¢ din. Dau higu tran duge chi ra béi OF = 1 (OV) vi chiing ta cng 2 36 duong vA nban duge mot sé am. PF dit bling 1 (PE) vi byte thap cba két qua khéng cé bit 1 nao. Bay gid ching ta thyc hign lénh SUB AX,OFFFFh: 121 -T AX=8001 BX=0000 CX=001F DX=@000 SF=000A BP=0000 S1=0000 DI=0000DS=0EDS FS=0EDS SS=0FES CS 0g N¥ UP DE NG NZ c pO cy OEEE: 0008 FID, NEG AK AX chia 8000h- FFFFh - 001h. OF déi trd lai thanh O (NV), vi chung ta trit 2 cing d&u khéng thé xdy ra hig tugng tran c6 déu. Tuy nhién CF = 1 chi ra rang da c6 hign tugng tran khdng du vi ching ta da tri mgt 36 khéng dau ton hon ti mét s6 nhé hon. khi€n-cho ¢6 sul vay vao bit msb, PF = 0 vi byte thap cla AX c6 mov bit 1 duy nhat. Bay gid chung ta tiép tuc vdi lenh NEG AX: 7 AX=7PFF BK=0000 CX=001F Dx-G000 S DI=O000DS*CEDS ES=OEDS SS=0EES CS=OEE6 T AC PE CY OCA BP-000¢ SI=0000 =000A NV UP DL PL NZ (EE6:000A 40 INC * AX AX chia s6'bi 2 effa 8001h = 7FFFh. Doi véi Iénh NEG CF luon bang 1 tit khi két qua bing 0 nhung trudng hop nay lai khéng xiy ra 6 day, Cd OF = 0 vi két qua khéng phai la 8000h. Cuéi cing chting ta thy hién Ignh INC AX; -T AX=8000 BX=0000 CX=O01F DX=0000 SP-000A BP=0000 $1-0000 EDS ES

You might also like