Download as pdf or txt
Download as pdf or txt
You are on page 1of 114

CHNG 1 : SO NH PHAN

Trong Computer d lieu c ghi nh bang cac mach ien co kha nang the hien mot so trang thai xac nh . Moi mach ien nh vay la mot phan t nh can ban . So gia tr mot phan t nh can ban co the bieu dien cung chnh la so trang thai mach ien tao nen no co the xac nh. Do kha nang cua ky thuat che tao mach, va cung do gia thanh cua mach ien, cac phan t nh tren cac Computer hien nay eu c thiet lap t cac mach ien co hai trang thai xac nh bi mc ien the cao va thap. Tng ng vi hai trang thai cua mach ien, moi phan t nh mang mot trong hai gia tr 0 va 1. Mot phan t nh nh vay c goi la mot bit . * Cac toan t tren bit : A 0 0 1 1 B 0 1 0 1 NOT A 1 1 0 0 A AND B 0 0 0 1 A OR B 0 1 1 1 A XOR B 0 1 1 0 A XOR (A XOR B) 0 1 0 1

1.1_ N V LU CHA THONG TIN: e co the bieu dien c nhieu gia tr hn, thong thng ngi ta lu cha thong tin di dang tng nhom bit, moi nhom bieu th cho mot phan t cua thong tin. - Mot nhom 4 bit c goi la nibble. - Mot nhom 8 bit c goi la byte. Byte la n v lu cha thong tin c s tren cac Computer hien nay. Cac boi so cua byte la : 1 KB = 1024 byte ( 2 luy tha 10 ) 1 MB = 1024 KB 1 GB = 1024 MB - Mot nhom 16 bit c goi la word. - Mot nhom 32 bit c goi la double word (dword). Computer truy nhap en cac thong tin theo n v nho nhat la byte . 1.2_HE EM: Cac gia tr so lu cha trong Computer di dang tng nhom cac bit vi cach bieu dien 0 va 1 khac han cach bieu dien so thong thng cua chung ta (dung cac ky so 0,1...9). Cach bieu dien so cua chung ta da tren c s mi ky so 0,1...9 c goi la he em thap phan, cach bieu dien so trong Computer da tren c s hai ky so 0 va 1 c goi la he em nh phan. 1.2.1_Quy tac cua mot he em theo v tr: He em cua chung ta hien nay la mot he em theo v tr, da tren c s mi ky so 0,1...9. Gia tr cua mot so c bieu dien bang mot day cac ky so, trong o gia tr cua moi ky so tuy thuoc vao v tr cua no trong day. Th du : 1 9 7 4 1*100000 + 9*10000 + 7*1000 + 4*100 + 3*10 + 5 105 104 103 102 101 3 10 1 5

Goi so cac ky hieu e bieu dien mot he em theo v tr goi la c so C cua he em ta co cong thc tong quat : x = Ci * Ki (Ki la cac ky so cua he em) 1.2.2_Cac he em thong dung : He nh phan : s dung cac ky so 0 va 1 (bin : binary ) He bat phan : s dung cac ky so 0,1...7 (Oct: ) He thap phan: s dung cac ky so 0,1...9 (dec : decimal) He thap luc : s dung cac ky so 0,1...9,A..F (hex : hexa ) Bang oi chieu cac he em: Dec 0 1 2 3 4 5 6 7 Hex 0 1 2 3 4 5 6 7 Bin 0000 0001 0010 0011 0100 0101 0110 0111 Dec 8 9 10 11 12 13 14 15 Hex 8 9 A B C D E F Bin 1000 1001 1010 1011 1100 1101 1110 1111

1.2.3_Quy c bieu dien cac he em :

Th du : 1991, 01000101b, 0F1h, 078h. Viec s dung he nh phan tren Computer gap mot so kho khan : e bieu dien mot gia tr can qua nhieu ky so lam cho ngi s dung phai ghi chep nhieu va rat kho nh. T nhan xet : he nh phan la mot he con hoan toan cua he thap luc: tap hp 4 bit nh phan co the bieu dien 16 gia tr so khac nhau ( 24 ), ngi ta thng dung cac ky so thap luc (0,1..9,A.Z) e bieu dien thay cho tng nhom 4 bit trong mot so nh phan. 1 1 F 1.3_ CAC PHEP TNH TREN HE NH PHAN Cac phep tnh c ban + - * / tren so nh phan c thc hien vi cac quy tac nh tren he thap phan . Tuy vay, phai chu y rang cac so nh phan lu trong Computer c ghi nhan bang mot so cac bit xac nh : co so cac ky so xac nh. Do o cac phep tnh ch co the thc hien tren khuon kho cac la cac bit tran . Cac so nh phan chung ta e cap ke tiep la cac so nh phan c lu trong mot so bit xac nh (8,16,32), tc la co chieu dai khong oi . 1 1 1 0 A 1 0 0 1 4 0 0 1 1 D 0 1

Cac so dang bin ket thuc bang b. Cac so dang hex ket thuc bang h. Cac so hex nen bat au bi ky so 0 (bat buoc khi ky so au tien la A..F).

1.3.1_Phep cong nh phan: 2

Quy tac : 0 + 0 = 0 0+1=1 1 + 1 = 0 nh 1 ( 10 ) Th du : 10011011 + 00101011 ______________ 11000110

11010111 + 00111011 ________________ 100010010 Bt tran

1.3.2_Phep tr nh phan: Quy tac : 0-0=0 1-1=0 1-0=1 0 - 1 = 1 nh 1 10011011 00101011 _____________ 01110000 1.3.3_Phep nhan nh phan: Quy tac : 0*0=0 0*1=0 1*1=1 Th du : 11010111 x 101 ____________ 11010111 00000000 11010111 ___________________ 10000110001 1.3.4_Phan bu nh phan: Phan bu cua mot so nh phan c nh ngha la mot so nh phan c tao thanh t so ban au theo quy tac cac bit eu c ao ngc (NOT). 11010111 00111011 ______________ 10011100

Th du :

Th du : phan bu cua 01001101 la 10110010 3

01001101 1 0 1 1 0 0 1 0 <--- Phan bu Mot so cong vi phan bu cua no se cho ket qua la mot gia tr nh phan co tat ca cac bit bang 1 . Phan bu cua mot so nh phan cung c goi la bu 1 cua so nh phan o. 1.4_SO AM TRONG HE NH PHAN: Cac so nh phan tren la cac so khong dau (nguyen dng). e bieu dien so co dau (nguyen am) ta khong the n thuan them mot dau tr trc mot so nh phan bi v Computer ch co hai ky hieu 0 va 1 e ghi nh thong tin! Yeu cau can phai co mot cach mo ta cac so am cung tren c s cac ky hieu 0 va 1 a phat sinh t ay . Ngi ta nh ngha so am qua khai niem so oi trong ai so : mot so khi cong vi so oi cua no se bang 0. Nh vay so nh phan bieu dien cho gia tr -3 phai la mot so khi cong vi so nh phan bieu dien cho gia tr +3 tao ra ket qua la 0 . T nhan xet mot so cong vi phan bu cua no se cho ket qua la mot so nh phan co tat ca cac bit eu bang 1, ta co ket luan sau: so-nh-phan + phan-bu + 1 = 0 ( co mot bit tran ! ) ===> so oi = phan bu + 1 ( bu 2 ) Trong qua trnh xac nh cach ky hieu cho cac so am ngi ta nhan thay cac so am tao thanh bao gi cung co bit cao nhat la 1, va cac so dng tng ng co bit cao nhat la 0 . Cac nhan xet tren a en cac he qua ve so nh phan co dau nh sau : Cac so am bao gi cung co bit cao nhat la 1 . Mot so am cong so oi tng ng cua no se cho ket qua la 0 . Cac so co dau cong vi nhau se cho ket qua ung nh phep cong cac so nguyen ( Hay chng minh -3+2 = -1 ) .

CHNG 2 : CAU TRUC MOT MAY VI TNH IBM PC

TIMER

CLOCK

CPU

INTERRUPT CONTROLLER

DMA

MEMORY

SYSTEM BUS

KEYBOARD CONTROLLER

VIDEO CONTROLLER

DISKETTE CONTROLLER

HARD DISK CONTROLLER

IO INTERFACE

2.1_BO X LY TRUNG NG Trung tam cua mot may vi tnh IBM PC la bo x ly trung ng (CPU) 8088 do Intel san xuat . 8088 la mot vi mach ac biet, co kha nang t thc hien mot loat cac menh lenh c liet ke trc,co kha nang t phan oan e chon cach ap ng vi cac tnh huong trong qua trnh thc hien lenh. Moi menh lenh 8088 c bieu th bang mot nhom cac byte. Cac byte ay c goi la ma lenh (opcode) cua bo x ly . Khi thc hien cong viec cua mnh CPU oc cac ma lenh c lu cha trong bo nh cua may tnh va thc hien chung theo th t lien tiep nhau. 2.2_BO NH Bo nh la ni lu cha cac menh lenh ma CPU se phai thc hien,cung la ni ghi nh cac thong tin, cac gia tr trung gian, cac ket qua cua qua trnh lam viec ... Bo nh c tao thanh t hai loai chnh : - Bo nh ch oc - ROM (Read Only Memory) - Bo nh oc/ghi - RAM (Random Access Memory) Cac thong tin ghi tren ROM la co nh va khong xoa c: mang tnh chat vnh cu Cac thong tin tren RAM co the c sa oi tuy thch, nhng nhng g ang c lu gi trong RAM se mat i khi tat may. Trong mot may tnh, moi phan t nh thuoc ROM hoac RAM c ghi nhan bi mot so th t (goi la a ch). 2.3_CAC MACH HO TR e co the hoat ong c, CPU can en s ho tr cua nhieu vi mach khac. ong thi, CPU cung khong the giao tiep vi ngi s dung bang cac gia tr nh phan bieu dien di dang cac xung ien . No phai nh en cac mach giao dien (Interface) nh keyboard controller,video controller ... Cac mach giao dien nay se ieu ong trc tiep en cac phng tien giao tiep cu the vi ngi s dung (nh man hnh,ban phm,may in ...) theo cac yeu cau,cac thong tin c gi en t CPU. 2.4_PORT e lien lac vi cac vi mach ho tr,cac mach giao dien, CPU dung mot he thong a ch rieng ( khac vi he thong a ch nh v cua bo nh ) e xac nh oi tng can oi thoai . Moi a ch trong he thong nay c goi la mot cong (port) . Moi vi mach ho tr, moi mach giao dien se chiem dung mot so cong xac nh . Khi can giao tiep, CPU ch can s dung en cac cong tng ng. 5

2.5_CLOCK Cac mach ien t khi nao co thi gian thc hien giong nhau. Do o, e cac phan t trong mot may tnh hoat ong nhp nhang an khp vi nhau phai co mot bo phan em nhp . am nhiem cong viec nay la mot bo phan tao xung nhp cho tat ca cac mach ien trong may . Bo phan nay c goi la ong ho cua may . May co ong ho vi tan so cang cao th se chay cang nhanh. 2.6_BUS CPU va cac mach co lien quan c noi song song vi mot dai cac kenh lien lac, nguon cung cap ien ... cau truc nay c goi la bus. Bus c chia thanh 4 phan chnh: 1. Command bus 2. Address bus 3. Data bus 4. Power bus He thong quan ly bus goi la Bus controller Giao tiep thong qua bus c thc hien nh sau : Gia s CPU can tang gia tr t mot phan t nh tai a ch X len 1 n v, no phai trai qua cac bc sau : 1. at a ch X vao address bus 2. a yeu cau oc memo vao command bus 3. i Bus thong bao san sang : bus controller lay gia tr tai a ch X at vao Data bus 4. Tiep nhan gia tr can oc t data bus 5. Tang gia tr ay len 1 ( phep toan c thc hien trong CPU ) 6. at gia tr mi tr lai data bus 7. a yeu cau ghi memo vao command bus (address bus ang gi gia tr cu)

8. CHNG 3 : BO VI X LY 8088
3.1_CAC THANH GHI CUA BO VI X LY 8088 Bo vi x ly 8088 co mot so phan t dung e ghi nh cac gia tr trung gian trong qua trnh lam viec,tao ra cac a ch,lam cac phep tnh...Cac phan t nay goi la cac thanh ghi (Register). 8088 la bo vi x ly 16 bit, cac tac vu cua 8088 thng dc thc hien tren 16 bit dong thi,cac thanh ghi cua 8088 eu la cac phan t nh 16 bit.Cac thanh ghi hoan toan co the s dung nh cac phan t nh thuoc ve RAM. iem khac nhau gia thanh ghi va cac phan t nh thuoc RAM la Thanh ghi la cac phan t thuoc bo vi x ly (ve mat vat ly). Mot so tac vu ac biet nh nhan hay chia, ket qua bat buoc phai at trong thanh ghi Mot so thanh ghi ch dung e xac nh a ch cho 8088 Cac tac vu tren thanh ghi nhanh hn nhieu so vi cac tac vu tren RAM. Bi v e thc hien cac tac vu tren RAM,8088 phai i qua mot qua trnh nh sau : a) oc thong tin t RAM (thong qua Bus) b) Thc hien tac vu c) Ghi tra lai thong tin vao RAM (thong qua Bus) Bo vi x ly 8088 co 14 thanh ghi 16 bit,c chia thanh nhom theo chc nang nh sau: 3.1.1_Nhom thanh ghi a dung : AX,BX,CX,DX : Moi thanh ghi co the s dung nh AH,AL,BH,BL,CH,CL,DH,DL FEDCBA98 7654321 AH AL BH BL CH CL DH DL 3.1.2_Nhom thanh ghi con tro va ch muc : SP,BP,SI,DI : thng dung e tao cac a ch, cung co the dung e lu cha cac so lieu nh nhom thanh ghi a dung 3.1.3Nhom thanh ghi phan oan : ... 3.1.4Thanh ghi con tro lenh IP : Ch dung e xac nh offset cua ma lenh 3.1.5Thanh ghi c hieu Flag : Ghi lai trang thai cua cac phep tnh so hoc, ket qua cua cac phep so sanh ... F E D C B A 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF CS,DS,SS,ES : Ch dung e xac nh Segment, khong cho phep thc hien cac phep tnh so hoc,logic hai thanh ghi 8 bit vi cac ten

AX BX CX DX

3.2CACH XAC NH A CH CUA 8088 7

Bo vi x ly 8088 dung mot so 20 bit e xac nh a ch cho cac phan t trong vung nh (memory), tng ng vi 1MB v tr. Bang cac gia tr 16 bit,ta ch co the tao ra a ch cho 0FFFFh phan t ( 64 KB hay 65536 byte ). Do o e co the nh v 1 MB a ch bang cac thanh ghi 16 bit, 8088 s dung nguyen tac truy nhap bo nh theo tng segment,moi segment co kch thc 64 KB, iem bat au cua segment phai la mot a ch chia het cho 010h ( 16 thap phan ) . a ch cua segment c tnh bang paragraph ( 1 paragraph = 16 byte ). a ch mot phan t nao o thuoc oan se c xac nh thong qua a ch tng oi (offset) cua phan t o trong oan va v tr cua oan . T nguyen tac tren, ta co cac ket qua sau : a ch 20 bit = Segment*16 + Offset Cach bieu dien : Segment:offset Cung mot a ch, co the bieu dien di nhieu hnh thc khac nhau. Th du: 0040:006C va 0000:046C la hai cach bieu dien mot a ch Segment ch la khai niem logic, do o khong co v tr co nh cho tng segment . Ta hoan toan co the mo ta cac segment phu lap len nhau. Bo vi x ly 8088 luon xac nh segment thong qua gia tr cua cac thanhghi segment. Do o e xac nh segment ta phai gan cac gia tr tng ng cho cac thanh ghi segment. Thanh ghi CS ch nh segment cua oan ma chng trnh ang thc hien,IP mang gia tr offset. V vay CS:IP luon la a ch cua lenh ang c thc hien. Thanh ghi DS ch nh segment cua d lieu,thong thng cac a ch eu c can c theo segment DS . Thanh ghi SS ch nh segment cua STACK ( se noi ro hn trong phan sau). Thanh ghi ES dung trong cac tac vu ve chuoi hoac theo yeu cau rieng. 3.3CAC XAC NH OFFSET CUA 8088 Offset cua bo vi x ly 8088 c xac nh theo nguyen tac sau : Offset la mot hang so TD : [046Ch] Offset la gia tr cua mot trong cac thanh ghi ch muc BX,SI,DI,BP TD : [BX] Offset la gia tr cua mot tong c tao thanh t cac hang so,cac thanh ghi ch muc ... Nguyen tac nay co mot so han che : - SI va DI khong c cung co mat trong tong - BX va BP khong c cung co mat trong tong TD : [SI+BX] [DI+BX+020h] TD : [SI+BP+041h] Segment mac nhien : khi xac nh mot a ch, khong phai luc nao ta cung phai ch ra thanh ghi segment nao se c s dung . Neu khong co ch nh cu the thanh ghi segment, cac offset tao thanh t cac hang so va cac thanh ghi ch muc BX,SI,DI luon c hieu la i kem vi thanh ghi segment DS . Offset c tao thanh t BP c hieu la i kem vi thanh ghi SS Neu chung ta ch nh ro rang thanh ghi segment i kem vi offset, cac gia tr mac nhien ve segment se b vo hieu hoa . 3.4 BO 8088 THC HIEN MOT CHNG TRNH RA SAO ? 3.4.1The nao la mot chng trnh : Chng trnh la mot tap hp cac ma lenh va cac d lieu . Ma lenh (code) : la cac lenh 8088 se thc hien D lieu (data) : la cac thong tin chng trnh se s dung en .Th du : chng trnh cua ban se in 8

dong ch Do you like me ? ra man hnh th dong ch ay phai co mat trong chng trnh cua ban. Vung lu cha dong ch nay trong chng trnh c goi la mot vung d lieu (data) . Chng trnh cua ban cung can en mot so vung nh e lu cha cac gia tr trong qua trnh chng trnh c thc hien, cac vung nh nay cung c goi la vung d lieu . Phai chu y, bo 8088 khong the phan biet au la code, au la data ! 3.4.2Cach thc 8088 thc hien mot chng trnh : Gia s a co chng trnh trong RAM va CS:IP ch en lenh au tien cua chng trnh . 8088 oc byte xac nh bi CS:IP,nhan dien lenh, t o suy ra chieu dai cua lenh . 8088 cong them vao IP chieu dai cua lenh, roi bat au thc hien lenh . Sau khi thc hien lenh, 8088 oc tiep byte ang c xac nh bi CS:IP va c the qua trnh nay lap i lap lai mai . Chng trnh cua chung ta c thc hien t lenh au tien en lenh cuoi cung theo phng cach nay . Nhng lam cach nao e a mot chng trnh vao RAM va lam cach nao e an nh CS:IP ch en lenh au tien cua chng trnh ay ? Tat ca cac tac vu nay eu do he ieu hanh thc hien . Chng trnh cua chung ta c lu cha tren a thanh mot file co phan m rong (uoi ac tnh) la COM hay EXE . Khi ta go t ban phm ten cua file nay va nhan ENTER, he ieu hanh se oc file ay vao RAM, sau o a vao CS va IP cac gia tr e CS:IP ch vao lenh au tien cua chng trnh va c nap vao. Sau o la qua trnh thc hien chng trnh cua chung ta nh a neu tren. Lam cach nao e ket thuc chng trnh cua chung ta ? Nh a neu tren, 8088 khong ngng oc va phan giai cac lenh theo a ch c CS va IP xac nh,do o ket thuc mot chng trnh nao o khong co ngha la 8088 ngng hoat ong (!) . Qua trnh ket thuc mot chng trnh c thc hien bang cach lam cho CS:IP ch vao mot iem xac nh trc trong vung ma cua he ieu hanh ( con goi la chuyen ieu khien cho he ieu hanh ) . Sau o la qua trnh i lenh cua he ieu hanh . Qua trnh i lenh cua he ieu hanh nh chung ta nhn thay, co ve nh may tnh ang ngng lam viec,ch chung ta ra lenh tiep ! ay la ieu lam tng cua nhieu ngi mi bat au lam quen vi Computer. Chung ta phai luon nh rang may tnh lien tuc phan giai va thc hien cac lenh c CS:IP ch en va ch ngng khi chung ta ... tat may ! 3.4.3Chung ta tao ra chng trnh bang cach nao : Cac ma lenh trong chng trnh cua chung ta la cac so nh phan bieu dien thanh tng byte . Chung ta se rat kho khan neu phai viet mot chng trnh bang tng so nh phan nh vay . Trong thc te chung ta se viet mot chng trnh nguon, o la mot file vi cac ac iem : - S trnh bay tuan thu theo mot so quy tac chung - Moi lenh cua 8088 se c goi bang mot cai ten gi nh . - Cac a ch c xac nh bi cac ten rieng do ngi viet quy nh .... - Chng trnh nguon se c mot chng trnh ac biet bien dch (compile) thanh mot file vi ay u cac ma lenh va cac d lieu a mo ta trong chng trnh nguon . V vay chung ta khong can phai thac mac lenh nay hoac lenh kia co ma may la g ! 3.4.4Mot chng trnh nguon se c bien dch bang Assembler 86 : Code Segment Assume CS:Code,DS:Code org 0100h Main proc near M1: mov dx,offset chuoi1 ; in chuoi1 ra man hnh mov ah,9 ; int 021h ; mov ah,1 ; Read Keyboard 9

int 021h ; cmp al,Y ; Kiem tra ky t doc vao je KT ; neu la Y hay y th nhay den KT cmp al,y je KT mov ah,02 ; Neu khong, Beep mot tieng roi quay lai M1 mov dl,7 int 021h ; jmp M1 KT: mov dx,offset chuoi2 ; In chuoi2 mov ah,9 ; int 021h ; int 020h ; Ket thuc chng trnh Main endp Chuoi1 db 13,Do you like me ? $ ; Ma 13 e tr ve au dong Chuoi2 db Thank you !$ Code ends end main

10

CHNG 4 : ASSEMBLER 86
Ng phap cua cac trnh hp dch thong dung hien nay nh MASM,TASM ... kha phc tap, do o tai lieu nay se ch trnh bay cac phan can ban ma hau het trnh hp dch thong dung eu chap nhan. Nhng phan can ban nhat cua ng phap cua assembler cho bo x ly 8088/86 se c trnh bay trong chng nay. Cac phan khac se c e cap en trong cac chng sau. 4.1NG PHAP CUA ASSEMBLER 86

SEGMENT-A Offset Var_X neu co khai bao Segment

Offset Var_X neu khong khai bao Segment

SEGMENT-B

Var_X

SEGMENT-C

4.1.1Khai bao segment Chng trnh cua chung ta co the s dung en nhieu segment khi c thc hien : e truy nhap en moi segment, ta phai gan a ch cua segment tng ng cho cac thanh ghi segment . Sau o, cac phan t thuoc ve segment se c truy nhap thong qua offset cua no trong segment ay. Lu y la viec gan gia tr cho cac thanh ghi segment ch c thc hien trong luc chng trnh ang thc hien . Trong qua trnh hp dch, trnh hp dch khong the kiem soat c gia tr thc cua thanh ghi segment . Do o s phan chia chng trnh thanh cac segment hoan toan la cac y niem cua ngi lap trnh . Mot trong cac nhiem vu quan trong cua trnh hp dch la xac nh chnh xac cac offset theo cac segment cua chng trnh chung ta . Neu khong co mot s lu y nao ve segment se c s dung, trnh hp dch se cho rang toan bo chng trnh trong cung mot segment . Khi ay cac phan t thuoc chng trnh eu c trnh hp dch xac nh a ch tng oi (offset) theo iem au cua chng trnh . Th du : mot v tr thuoc SEGMENT-B se c tnh offset theo c ly t au SEGMENT-A cho en v tr cua no trong toan bo oan ma chng trnh c tao ra .Khai bao ve Segment se lu y trnh bien dch ve pham vi cua cac segment cung cac phan t thuoc ve chung.Theo o trnh bien dch se xac nh ung cac offset tng ng theo nguyen tac : phan t c xet thuoc segment nao se c xac nh c ly theo iem khi au cua segment ay . 11

Mot Segment c khai bao vi trnh hp dch theo dang thc sau : Ten-segment Segment [word/byte] [Public] . . ( Pham vi cua segment ) . . Ten-segment ends Cac phan t thuoc ve segment nao phai c mo ta ben trong cau truc segment o. e xac nh thanh ghi segment se dung cho segment c mo ta ta dung khai bao sau : Assume Thanh-ghi:Ten-segment[,Thanh-ghi:Ten-segment [...] ] TD : Assume CS:Code,DS:Code ;xac nh vi trnh hp dch CS va DS se cung mang gia tr cua Code segment . Lu y : Ch th Assume ch la s khai bao cho trnh hp dch biet cac thanh ghi segment se c s dung nh the nao ch khong tao ra phep gan gia tr cho cac thanh ghi ay ! 4.1.2Khai bao thu tuc Chng trnh cua chung ta c viet thanh cac thu tuc (procedure) . Mot procedure co cau truc nh sau : Ten-procedure proc [near/far] . . Ten-procedure endp Ben trong thu tuc la cac lenh, cac khai bao ve d lieu ... Moi mot lenh, moi mot khai bao eu c viet di dang mot dong lenh . Khai bao thu tuc trong hp ng ch la hnh thc . Chung ta co the bo qua cac khai bao ay ma van tao lap c mot so chng trnh n gian . Tuy vay viet chng trnh di dang cac thu tuc se lam chng trnh cua chung ta tr nen ro rang va de quan ly hn . Khi chng trnh c viet di dang cac thu tuc, viec khai bao thu tuc rat quan trong. Trnh hp dch se can c tren cac khai bao ay ma xac nh chnh xac cac ma lenh tng ng vi cac ch th JMP, CALL va RET . 4.1.3Cau truc mot dong lenh A. Dong lenh mo ta : Mo ta hang ( khong tao ra ma lenh ) Ten EQU Gia tr Mo ta hang dung e nh ngha mot so gia tr se c dung en trong chng trnh . Sau khi c mo ta, moi khi s dung en gia tr nao chung ta ch can dung ten tng ng . Trnh hp dch se t ong thay the gia tr thc cua hang vao oan ma tng ng . Mo ta bien Ten Loai Danh sach gia tr ( Trong o Loai co the la [Byte/Word/Dword] ) Mo ta bien dung e xac nh mot a ch,t o bat au lu cha cac thong tin vi tnh chat neu trong Loai va chi tiet c liet ke trong Danh sach gia tr. Khi can truy nhap en cac thong tin nay chung ta dung ten bien nh mot moc a ch. 12

Th du : Bien-A a ch tai ni khai bao Bien-A Bien-A[1] a ch Bien-A + 1 Bien-A[2] a ch Bien-A + 2 Bien-A[-1] a ch Bien-A - 1 Trnh hp dch se t ong oi ra a ch thc cua bien trong cac ch th co dung en bien. Mo ta nhan Ten LABEL Loai ( Trong o Loai co the la [Byte/Word/Dword/Near/Far] ) Mo ta nhan dung e xac nh mot v tr trong chng trnh,tnh chat cua a ch ay tuy thuoc vao Loai c khai bao . Trnh hp dch se tao ra cac a ch,cac c ly thc trong cac ch th co lien he en ten nhan. Mo ta bien va nhan cho phep chung ta ch nh cac v tr trong chng trnh theo v tr logic cua chung ch khong theo a ch thc cua chung . Khi hp dch, trnh hp dch se tnh cac c ly thc s va thay the chung vao cac ma lenh tng ng . e lay a ch mot phan t dung cau truc : Offset Ten-phan-t Th du : Mov dx,offset Bien-A Cac quy nh chung : Ten : la mot chuoi tao bi cac ky t, cac ky so va - (dau gach di). Ten khong c bat au bang ky so. Trnh hp dch quy nh sau dau cham phay (;) la cac li chu thch. Ta co the at bat c ghi chu g ay . Moi gia tr trong mo ta hang hoac bien co the la : - Mot hang so, mot ten hang a khai bao - Mot bieu thc gom cac hang so,ten hang tao thanh t cac phep toan: - So hoc : + - * / - Logic : NOT AND OR XOR - va dau () Th du : GT-A equ 020h ; Co gia tr la 00100000b GT-B equ 040h ; Co gia tr la 01000000b Bien-A db NOT 010h ; Co gia tr la 11101111b Bien-B db GT-A OR GT-B ; Co gia tr la 01100000b B. Dong lenh thc hien [Nhan:] Lenh oi tng Ten : la mot chuoi tao bi cac ky t, cac ky so va - (dau gach di). Ten khong c bat au bang ky so. Sau dau cham phay (;) la cac li chu thch . Ta co the at bat c ghi chu g ay . 4.1.4Cac loai (kieu) c ban Loai : Loai byte : khai bao bang t khoa DB. Moi phan t trong danh sach gia tr chiem 1 byte 13

Th du: a/ So-hoc-vien DB 0,0,0 ;khai bao So-hoc-vien la mot gia tr kieu byte, chiem tat ca 3 byte, gia tr ban au cua ca 3 byte nay la 0 b/ File-name DB Thidu1.asm,0 ;khai bao File-name la mot gia tr kieu byte, chiem tat ca 11 byte, gia tr ban au cua cac byte nay lan lt la ma cua tng ky t trong dau nhay va cuoi cung la 0 c/ Buffer DB 20 dup (0) ;khai bao Buffer la mot gia tr kieu byte, chiem tat ca 20 byte, cac byte mang gia tr c mo ta trong cap dau ngoac n ( 0 ). Chu y : - Ch co kieu byte mi chap nhan chuoi ky t - e bieu dien mot byte,ta co the ghi gia tr cua byte o di dang so thap phan, so thap luc, so nh phan hoac la mot ky t (co ma tng ng) at gia hai dau nhay n . TD : 65, 041h, A la cac cach bieu dien khac nhau cua cung mot gia tr . - Cac vung nh lu cha gia tr c khai bao c goi la cac bien cua chng trnh - Kieu c khai bao ch dung lam gia tr ngam nh e xac nh loai d lieu c thao tac trong cac lenh . Ta hoan toan co the ch nh kieu bat ky cho mot bien trong cac lenh mot cach tng minh. Loai word : khai bao bang t khoa DW Moi phan t trong danh sach gia tr chiem 2 byte (1 word) Loai double word : khai bao bang t khoa DD Moi phan t trong danh sach gia tr chiem 4 byte (2 word) Chu y : D lieu lu cha trong RAM co mot so iem khac vi cach bieu dien thong thng cua chung ta : nhng so bieu dien bang nhieu byte nh loai word, double word c ghi nh trong RAM theo quy tac byte thap ng trc, byte cao ng sau. Th du : gia tr hai byte 01234h c ghi nh tai a ch 0462:0180 nh sau : 0462:0180 034h 0462:0181 012h Chu y : Khi noi mot gia tr c ghi nh tai mot a ch nao o ta phai hieu la c ghi nh bat au t a ch a ch ra ! 4.1.5Phan loai chng trnh oi vi he ieu hanh DOS, chng trnh cua chung ta c chia thanh hai loai chnh : - Loai COM : ch s dung 1 segment, co kch thc toi a gan 64 KB khi c thc thi, cac thanh ghi segment eu c gan gia tr cua segment hien lu cha chng trnh . Do o trong mot file COM, neu khong co nhu cau truy nhap en cac vung nh ngoai segment cua chng trnh, khong can phai chu y en viec xac nh gia tr cac thanh ghi segment. Gia tr cua IP khi chng trnh c thc thi luon luon bang 0100h . - Loai EXE : s dung nhieu segment, khong han che ve kch thc khi c thc thi, cac thanh ghi segment can c gan gia tr cua segment co lien quan . Gia tr cua IP khi chng trnh c thc thi tuy thuoc tng chng trnh cu the . Trong tai lieu nay, cac chng trnh th du eu c viet di dang COM . 4.2CAC LENH CAN BAN 4.2.1Lenh MOV Dang lenh : MOV ch,nguon 14

Ket qua : d lieu se c em t nguon vao ch (gia tr cua nguon van gi nguyen) Trong o nguon va ch co the la : - Thanh ghi - So - Offset . Neu la offset th phai ch ra se s dung byte hay word bang cach s dung cac khai bao : Byte PTR offset ( 8 bit ) Word PTR offset ( 16 bit ) Th du : MOV AX,BX MOV AX,word PTR [SI+3] MOV AH,0Fh MOV word PTR [SI+BX],BX MOV AH,byte PTR [BX] MOV byte PTR [DI+4],9 e lay a ch cua mot ten ( nhan hoac bien ) ta thc hien nh sau : MOV DX,offset chuoi1 hoac LEA DX,chuoi1 Lenh tren se a vao DX offset cua chuoi1 Chu y : - ch va nguon phai co kch thc bang nhau - Bo vi x ly 8088 khong the thc hien cac tac vu vi ca hai oi tng cung c nh v bi offset . Do o lenh sau la khong hp le : Mov byte ptr [SI],byte ptr [DI+2] 4.2.2Lenh XCHG Dang lenh : XCHG ch,nguon Ket qua : d lieu gia nguon vao ch se c oi cho cho nhau 4.2.3Cac lenh cong,tr Dang lenh : ADD ch,nguon ADC ch,nguon (cong) SUB ch,nguon SBB ch,nguon (tr) Ket qua : gia tr cua ch c cong (hay tr) vi nguon, ket qua c at vao ch .Gia tr cua nguon khong oi Neu la ADC hay SBB, ket qua c cong them hay tr bt 1 khi bit CF = 1.

4.2.4Cac lenh nhan,chia *Lenh nhan : MUL gia tr 8 bit (thanh ghi/offset) Thanh ghi AL c nhan vi gia tr 8 bit,ket qua la gia tr 16 bit at trong AX Th du : Mov AL,3 Mov CL,2 Mul CL ket qua AX=6 MUL gia tr 16 bit (thanh ghi/offset) Thanh ghi AX nhan vi gia tr 16 bit, ket qua la gia tr 32 bit at trong DX va AX 15

Th du : Mov AX,3 Mov CX,0100h Mul CL ket qua DX=0 AX=0300h *Lenh chia : DIV gia tr 8 bit (thanh ghi/offset) Thanh ghi AX c chia cho gia tr 8 bit, ket qua la gia tr 8 bit at trong AL,so d at trong AH Th du : Mov AX,035h Mov CL,010h Div CL Ket qua AL=3 AH=5 DIV gia tr 16 bit (thanh ghi/offset) Gia tr 32 bit at trong thanh ghi DX va AX (giong nh ket qua phep nhan 16 bit) chia cho gia tr 16 bit, ket qua la gia tr 16 bit at trong AX,so d at trong DX Th du : Mov DX,038h ; gia tr 32 bit trong DX va Mov AX,02147h ; AX la 0382147h Mov CX,01000h Div CX ket qua AX=0382h (thng so) DX=0147h (so d) 4.2.5Lenh CMP va lenh TEST Dang lenh : CMP ch,nguon TEST dch,nguon Cach thc hien : CMP thc hien phep tnh : nguon ch, TEST lay nguon AND vi ch. Ket qua : Khong lam thay oi gia tr cua ch va nguon, ket qua thc hien c ghi nhan trong thanh ghi c hieu Flag,e nhan nh ket qua phng phap thong thng la dung nhom lenh chuyen ieu khien co ieu kien. 4.2.6Lenh JMP (chuyen ieu khien khong ieu kien) Dang lenh : JMP Nhan 4.2.7Nhom lenh chuyen ieu khien co ieu kien . Dang lenh : Cac gia tr khong dau JB Nhan JBE Nhan, JNA Nhan JE/JZ Nhan JAE Nhan, JNB Nhan JA Nhan Cac gia tr co dau JL Nhan JLE Nhan, JNG Nhan JE/JZ Nhan JGE Nhan, JNL Nhan JG Nhan Y ngha < <= = >= > 16

JNB Nhan JNE Nhan JNA Nhan

JNL Nhan JE Nhan JNG Nhan

>= <> <=

Thng c dung ngay sau lenh CMP hoac lenh TEST Th du : CMP AX,BX ; So sanh AX vi BX JB M-1 ; Neu AX < BX th chuyen ieu khien en M-1 M-0: MOV Max,AX ; Neu AX >= BX th gan Max = AX JMP M-2 ; Roi chuyen ieu khien en M-2 M-1: MOV Max,BX ; Gan Max = BX, sau o thc hien tiep tai M-2 M-2: ... ; Ket qua : Max la gia tr ln nhat Max dw 0 ; gia AX va BX 4.2.8Nhom lenh logic Dang lenh : AND ch,nguon XOR ch,nguon, OR ch,nguon NOT ch 4.2.9Nhom lenh shift Dang lenh : SHL ch,1 hay SHL ch,CL SHR ch,1 hay SHR ch,CL Tac dung : ay cac bit cua ch theo chieu t bit thap en bit cao (sang trai/SHL) hay theo chieu t bit cao qua bit thap(sang phai/SHR) vi so bit la 1 hay la gia tr trong CL. Bit b ay lot ra ngoai c at trong CF . Cac khoang trong do lenh shift tao ra c ien bang gia tr 0 Trc khi SHL Sau khi SHL 1 Sau khi SHL 2 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 0 0 1 1 0 1 1 CF = 0 CF = 1 CF = 0 Trc khi SHR Sau khi SHR 1 Sau khi SHR 2 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 CF = 0 CF = 1 CF = 1 Dang lenh : ROL ch,1 hay ROL ch,CL ROR ch,1 hay ROR ch,CL

17

Tac dung : Bit cao nhat va bit thap nhat cua ch c xem nh ng canh nhau trong mot vong tron . ROL va ROR se ay cac bit theo chieu t bit thap en bit cao (ROL) hoac theo chieu t bit cao sang bit thap (ROR) trong vong tron ay vi so bit la 1 hay la gia tr trong CL . Trc khi ROL Sau khi ROL 1 Sau khi ROL 2 0 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 0 1 1 Trc khi ROR Sau khi ROR 1 Sau khi ROR 2 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 Dang lenh : RCL ch,1 hay RCL ch,CL RLR ch,1 hay RCR ch,CL Tac dung : tng t ROL va ROR, nhng bit gia tr cua CF c at chen vao gia iem noi cua bit cao nhat va bit thap nhat.Vong quay gom 9 ( hay 17 ) bit . Trc khi RCL Sau khi RCL 1 Sau khi RCL 2 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 0 1 1 Trc khi RCR Sau khi RCR 1 Sau khi RCR 2 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 1 CF = 0 CF = 1 F=1

18

CHNG 5 : STACK - PROCEDURE - INTERRUPT


5.1Khai niem ve STACK Bo vi x ly 8088 danh rieng cac thanh ghi SS va SP cho viec quan ly STACK, o la mot cau truc ac biet c quy nh nh sau : STACK la mot vung nh thuoc ve segment do SS xac nh Thanh ghi SP ong vai tro mot con tro xac nh iem lam viec cua STACK Co hai tac vu chuan tren STACK : - PUSH thanhghi/offset (16 bit) :Cat gia tr 16 bit trong thanhghi/offset vao stack - POP thanhghi/offset (16 bit) :Lay gia tr 16 bit trong stack at vao thanhghi/offset Cach thc hien : Tac vu Push : tr SP cho 2, sau o at mot gia tr 16 bit vao a ch SS:SP Tac vu Pop : lay gia tr 16 bit tai a ch SS:SP roi cong SP vi 2 Neu ta dung tac vu Push e cat nhieu gia tr vao STACK, cac gia tr nay c xep thanh mot hang, gia tr nao c push vao trc ng au hang, gia tr nao push vao sau ng cuoi hang .Tac vu Pop se lay cac gia tr t STACK theo th t t cuoi hang . Do o th t lay cac gia tr t STACK bang Pop phai ngc lai th t a cat chung bang Push . Trong qua trnh thc hien chng trnh e tranh hien tng cac qua trnh trung gian lam sai lac gia tr cac thanh ghi, bien phap thong thng la cat gia tr cac thanh ghi nay vao STACK trc khi thc hien qua trnh trung gian . Thc hien qua trnh trung gian xong, lay lai gia tr au cho cac thanh ghi t STACK. Th du : push DX ; cat DX push AX ; cat AX mov ah,2 ; mov dl,7 ; beep int 021h ; pop AX ; lay lai AX pop DX ; lay lai DX Chu y : - So phan t co the cat vao stack ch tuy thuoc vao kch thc cua stack. - a cat gia tr nao vao stack th phai nh lay ra ! 5.2THU TUC Chng trnh cua chung ta co mot so oan c s dung nhieu lan . oi vi cac oan chng trnh nay, tot nhat la to chc thanh cac thu tuc (procedure) Moi lan can s dung ta ch can goi en chung theo cac ten a c at . Viec to chc thanh thu tuc se giup cho chng trnh ngan gon va ro rang hn nhieu. Bo vi x ly 8088 cung cap cac lenh co lien quan en thu tuc nh sau :

5.2.1Ch th CALL 19

CALL Ten-procedure Tac vu CALL se chuyen ieu khien chng trnh en procedure c ch nh bang cach cat a ch cua lenh ke tiep vao stack,roi ch CS:IP en a ch cua procedure c ch nh. CALL word ptr <a-ch> Chuyen ieu khien bang cach push IP vao stack,sau o nap cho IP word lu cha tai a-ch CALL dword ptr <a-ch> Chuyen ieu khien bang cach push CS, push IP, sau o nap cho IP word ptr a-ch[0], nap cho CS word ptr a-ch[2] 5.2.2Ch th RET RET [n] Quay tr lai lenh ke tiep lenh CALL a goi procedure.Mot procedure thong thng se ket thuc bang lenh RET. Thc hien bang cach lay t stack a ch a c lu nh trong lenh CALL roi gan lai cho CS:IP. Neu ch th RET i kem vi mot hang so th sau khi CS va IP c phuc hoi, SP se c cong them hang so ay ( tng ng vi viec loai bo khoi stack ngan ay byte ). 5.2.3NEAR va FAR : Neu procedure c goi bi lenh CALL trong cung segment,th ch can thay oi IP e chuyen ieu khien.Do o ch co IP c cat vao stack, va lenh RET tng ng cung ch lay lai gia tr cho IP t stack . Ket qua la CS khong thay oi trong khi thc hien cac lenh tren. Trong trng hp nay lenh CALL va RET tng ng c goi la NEAR . Khi thc hien mot CALL near, IP c cat vao stack (push) Khi thc hien mot RET near, IP c lay ra t stack (pop) Ngc lai vi NEAR, la FAR. Khi thc hien mot CALL far, trc tien CS c cat vao stack, ke tiep la IP . Sau o ca IP lan CS eu c gan gia tr mi . Khi thc hien mot RET far, trc tien IP c lay ra t stack, ke tiep la CS . 5.2.3Quy nh cua trnh hp dch ve NEAR va FAR Neu procedure-A la NEAR th mac nhien cac lenh RET thuoc procedure-A la NEAR va cac li goi ti procedure-A (CALL procedure-A) la NEAR Neu procedure-B la FAR th mac nhien cac lenh RET thuoc procedure-B la FAR va cac li goi ti procedure-B (CALL procedure-B) la FAR 5.3INTERRUPT 5.3.1Interrupt tren 8088/8086 Bo vi x ly 8088 danh rieng vung nh t 0000:0000 en 0000:03FF e tao thanh mot bang ngat (interrupt table). Bang ngat co 256 phan t lien tiep c anh so t 0-255 (0-0FFh). Moi phan t cua bang ngat chiem 4 byte tao thanh a ch (hai byte au cha offset va hai byte sau cha segment) cua mot procedure ac biet goi la mot interrupt. Interrupt la mot procedure loai FAR, nhng ch c goi bang lenh : INT so-hieu. Khi thc hien lenh INT, Flag c cat vao stack ke tiep la CS va IP. ieu khien c chuyen hng bang cach nap cho CS va IP cac gia tr tng ng trong bang ngat (lay t phan t co th t bang so hieu i kem vi ch th INT ) Interrupt ket thuc bang lenh IRET, khi thc hien IRET, IP, CS va Flag c tra lai gia tr cu. Mot interrupt co the c phat ong bang hai cach : do phan cng hay do phan mem . 20

5.3.2Interrupt cng (hard interrupt) Khi mot thiet b ngoai vi can thong bao mot oi ieu g o vi CPU thong thng mot interrupt se c phat ong.Chng trnh ang c thc hien bi CPU se tam dng lai, ch th INT Int-no c thc hien ngay tc khac vi Int-no la so hieu cua interrupt c phat ong.Cac interrupt c phat ong theo kieu nay c goi la cac interrupt cng . Cac interrupt cng luon luon cat tat ca cac thanh ghi c s dung en vao stack trc khi thc hien cong viec cua mnh. Cong viec mot interrupt cng thc hien thng chiem mot thi gian rat ngan.Sau o cac thanh ghi se c hoan tra t stack va interrupt ket thuc bang tac vu IRET . Nh vay, cac interrupt cng a tam ngat oan chng trnh hien thi e thc hien mot so tac vu nao o ap ng vi nguyen nhan a tao ra interrupt, sau o lai cho oan chng trnh ay tiep tuc . Ngi s dung va ban than chng trnh ang chay van c tng mnh ang lam chu hoan toan Computer ! Cac interrupt cng c ieu khien bi interrupt controller . Tren IBM PC o la vi mach 8259A cua Intel . 8258A cho phep quan ly 8 interrup cng . Tren IBM AT, hai vi mach 8259A c s dung cung cap 16 interrupt cng . Moi interrupt cng c ky hieu : IRQ <n> ( n = 0..7 hoac 0..15 ) Moi IRQ se c ch nh tng ng vi mot so hieu t 0 en 255 . o chnh la so hieu cua interrupt c phat ong. e tranh trng hp interrupt cng b long vao nhau ( mot interrupt cng c phat ong tr lai trong khi oan chng trnh cua no cha ket thuc) Interrupt controller se khong cho phep phat ong them bat c interrupt cng nao khac sau khi mot interrupt cng c goi . Do o trc khi ket thuc, mot interrupt cng phai cho phep interrupt controller hoat ong tr lai (enable interrupt) bang cach gi ra port 020h gia tr 020h. mov al,020h out 020h,al ... iret 5.3.2 Interrupt mem (soft interrupt) Mot interrupt c phat ong bi mot ch th INT ngay ben trong oan chng trnh ang c thc hien goi la mot interrupt mem . Noi mot cach khac, interrupt mem la mot interrupt c chng trnh s dung chu ong goi en . Le d nhien, mot chng trnh cung co the co y goi en mot interrupt cng . Nhng hanh ong ay se chang lam interrupt ay tr thanh mem ! Thong thng viec goi thang en mot interrupt cng t chng trnh se tao ra cac hau qua khong tot ep g cho lam : oan chng trnh cua interrupt c inh ninh rang mot thiet b ngoai vi, hay mot tac nhan ngoai nao o ang ch i no tra li ! So lng interrupt cng rat t so vi so cac phan t cua bang ngat,do o hau het cac interrupt con lai eu c s dung nh cac interrupt mem Cac tac vu ieu khien cac thiet b ngoai vi nh man hnh, ban phm, may in,a cng,a mem ... can phai co cac procedure phc tap am nhan.Cac procedure nay mot phan c cung cap bi ROM BIOS,mot phan thuoc ve he ieu hanh . Chng trnh cua chung ta khi co yeu cau s dung en cac thiet b ngoai vi ch can goi en procedure tng ng . S dung lenh CALL e truy nhap en cac procedure thuoc ve ROM BIOS hay he ieu hanh oi hoi a ch cua cac thu tuc ay phai co nh.Yeu cau ay hau nh khong the thc hien c bi v vi moi version mi cua ROM BIOS hay he ieu hanh, ta lai co mot bo cac a ch mi ! Va nh vay cac chng trnh viet theo cach nay ch co the chay c vi mot ROM BIOS va mot he ieu hanh xac nh . e giai quyet van e tren, ta co the viet cac procedure ay di dang cac interrupt va e ROM BIOS hay he ieu hanh t cai at a ch cua chung vao bang ngat theo tng so hieu a quy nh trc . Khi can s dung en cac procedure ay, chng trnh cua chung ta ch can thc hien ch th INT tng ng . 21

Cac interrupt theo ngha neu tren chnh la cac interrupt mem . Thong thng mot interrupt mem c goi kem theo mot so tham so, cac tham so ay c at trong cac thanh ghi theo mot quy tac a nh trc . Moi interrupt co the cung cap nhieu chc nang khac nhau, cac chc nang nay c goi la cac service hoac cac function . Chc nang c ch nh bang so hieu at trong AH khi thc hien lenh INT . 5.3.3Cac interrupt tren IBM AT ( Theo Norton Utilities ) Int-no Interrup Name 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 Divide by Zero Single Step Nonmaskable Breakpoint Overflow Print Screen Reserved Reserved System Timer <--> IRQ 0 Timer Output 0 Keyboard <--> IRQ 1 Keyboard Reserved <--> IRQ 2 [Cascade] Reserved <--> IRQ 3 COM2 Reserved <--> IRQ 4 COM1 Reserved <--> IRQ 5 LPT2 Diskette <--> IRQ 6 Floppy Disk Reserved <--> IRQ 7 LPT1 Video Equipment Determination Memory Size Determination Fixed Disk/Diskette Asynchronous Communication System services Keyboard Printer Resident BASIC Bootstrap Loader Real-Time Clock Services Keyboard Break User Timer Tick Video Parameters Diskette Parameters Video Graphics Characters Program Terminate General DOS functions Terminate Address Int-no Interrup Name 23 Ctrl-Break Handler Address 24 Critical Error Handler 25 Absolute Disk Read 26 Absolute Disk Write 27 Terminate and Stay Resident 28 DOS Idle 29 DOS Internal - FAST PUTCHAR 2A-2D Reserved for DOS 2E DOS - Execute Command 2F Multiplex (process interface) 30-32 Reserved for DOS 33 Microsoft Mouse Driver 34-3E Reserved for DOS 3F Overlay Manager 40 Diskette BIOS Revector 41 Fixed Disk Parameters 42 Relocated Video Handler 43 Reserved 44 Novell Netware API 45 Reserved 46 Fixed Disk Parameters 47-49 Reserved 4A User Alarm 4B-5F Reserved 60-66 Reserved for User Programs 67 Expanded Memory 68-6F Reserved 70 Real-Time Clock 71-74 Reserved 75 Redirect to NMI Interrupt 76-79 Reserved 7A Novell Netware (API) 7B-7F Reserved 80-85 Reserved for BASIC 86-F0 Reserved for BASIC interpreter F1-FF Reserved for User Programs

22

5.3.4Lay a ch mot interrupt Truy nhap trc tiep bang ngat : xor ax,ax mov es,ax mov ax,word ptr es:[Int-no*4] mov Offs-Int,ax mov ax,word ptr es:[Int-no*4+2] mov Seg-Int,ax ... Offs-Int dw 0 Seg-Int dw 0 Dung chc nang 035h cua interrupt 021h mov ah,035h ; AH = 035h : get int-addr mov al,Int-no ; AL = Int-no int 021h ; Return : mov Offs-Int,bx ; BX = Offset mov Seg-Int,es ; ES = Segment 5.3.5Thay a ch mot interrupt Truy nhap trc tiep bang ngat : CLI ; Cam interrupt xor ax,ax mov es,ax mov word ptr es:[Int-no*4],Offset-New-Int mov word ptr es:[Int-no*4+2],Segment-new-Int STI ; Cho phep interrupt ... Dung chc nang 025h cua interrupt 021h mov ah,025h ; AH = 025h : set int-addr mov al,Int-no ; AL = Int-no mov dx,Offset-new-Int ; ; DS:DX = New-Int address int 021h 5.3.6Thay the mot interrupt Mot vai chng trnh trong qua trnh thc hien a thay the mot so interrupt cua he thong bang cac oan chng trnh cua mnh . Neu interrupt nay khong thuoc ve ROM BIOS lan he ieu hanh th ay ch la mot cach cai at cac thu tuc di dang interrupt.Khi can goi en thu tuc nao ch can goi interrupt tng ng . 5.3.7Xo mui interrupt ( Hook interrupt vector ) Neu interrupt b thay the thuoc ve ROM BIOS hay he ieu hanh, thong thng oan chng trnh thay the phai am nhiem tat ca cac kha nang cua interrupt cu : phai viet lai nhng g a co . Trong trng hp nay ngi ta thng chon mot giai phap khac : moi khi interrupt c phat ong chng trnh thay the se c chuyen quyen, interrupt cu se c goi thc hien t chng trnh thay the neu co yeu cau . Giai phap nay cho phep chung ta bo sung them mot so chc nang, hay tao mot so hieu ng phu cho mot interrupt ma van gi c tat ca cac kha nang cua no. 23

Nguyen tac nay co the c thc hien nh sau : Lay a ch interrupt cat vao Old-Int mov ah,035h mov al,Int-no int 021h mov word ptr Old-Int[0],bx mov word ptr Old-Int[2],es ... Old-Int dd 0 Thay a ch interrupt bang a ch cua New-Int mov ah,025h mov al,Int-no mov dx,offset New-Int int 021h Khi New-Int c goi : New-Int se lam mot so tac vu can thiet nh kiem tra,thay oi tham so ... roi chuyen quyen cho OldInt bang cach nhay thang en au vao cua Old-Int. New-Int proc near ; Thc hien cac tac vu can thiet jmp dword ptr cs:Old-Int New-Int endp Hoac Old-Int se c goi nh mot thu tuc, khi quyen ieu khien c tra ve, New-Int bat au kiem tra va bien oi ket qua tra ve t Old-Int . Cuoi cung ket thuc bang IRET New-Int proc near pushf call dword ptr cs:Old-Int ; Thc hien cac tac vu can thiet iret New-Int endp

5.4MOT SO CHC NANG CUA INTERRUPT 021H Interrupt 021h tren IBM PC c danh rieng cho he ieu hanh DOS. Hau het cac chc nang cua DOS c cung cap qua interrupt nay . Trong cac th du ke tiep chung ta se s dung en mot so cac chc nang can ban sau : 5.4.1Read keyboard and echo Input : AH = 1 Output : AL = ASCII code Chc nang : oc mot ky t t ban phm, neu cha co th ch cho en khi mot phm c go . Phm c oc cung ong thi c in ra man hnh tai v tr con tro hien thi. 5.4.2Print character Input : AH = 2 DL = ASCII code 24

Output : None Chc nang : in mot ky t ra man hnh tai v tr con tro hien thi. Cac ky t ieu khien se anh hng len chc nang nay. Mot so ky t ieu khien tren IBM PC : 7 : Bell, co tac dung lam loa beep mot tieng 8 : Backspace, co tac dung keo lui con tro sang trai mot ky t 10 : Line feed (LF), co tac dung di con tro xuong hang ke tiep 13 : Carry return (CR), co tac dung a con tro ve au dong hien tai 5.4.3Print string Input : AH = 9 DS:DX = string terminated by $ Output : None Chc nang : in mot chuoi ra man hnh bat au t v tr con tro hien thi . Chuoi c quy nh ket thuc bi ky t $ . Trong chuoi chap nhan cac ky t ieu khien.

25

CHNG 6 : MOT SO CAU TRUC VA GIAI THUAT CAN BAN


6.1CAU TRUC IF 6.1.1IF Bien-A <= 5 THEN Bien-B:=1 ELSE Bien-B:=0 cmp Bien-A,5 ; So sanh Bien-A vi 5 ja L1 mov Bien-B,1 ; Nho hn hay bang jmp L2 L1: mov Bien-B,0 ; Ln hn L2: ... 6.1.2IF Bien-A <= 5 THEN ..... ELSE Bien-B:=0 cmp Bien-A,5 ; So sanh Bien-A vi 5 jbe L1 jmp L2 L1: ; Nho hn hay bang . ; . ; Kch thc oan ma nay ln hn . ; 128 byte . jmp L3 L2: ; Ln hn mov Bien-B,0 L3: ... 6.2CAU TRUC CASE 6.2.1Case Bien-A of 0 : Loai-A:=Loai-A+1; 1 : Loai-B:=Loai-B+1; 2 : Loai-C:=Loai-C+1; 3 : Loai-D:=Loai-D+1; end; cmp Bien-A,0 jne L1 inc Loai-A ; Loai-A:=Loai-A+1 jmp L4 L1: cmp Bien-A,1 jne L2 inc Loai-B ; Loai-B:=Loai-B+1 jmp L4 L2: 26

cmp Bien-A,2 jne L3 inc Loai-C ; Loai-C:=Loai-C+1 jmp L4 L3: cmp Bien-A,3 jne L4 inc Loai-D ; Loai-D:=Loai-D+1 jmp L4 L4: ; End-case ... 6.2.2Case Bien-A of 0..9 : Loai:=0; A..Z : Loai:=1; end; cmp Bien-A,0 jae L1 jmp L2 L1: ; Bien-A >=0 cmp Bien-A,9 ja L2 Mov Loai,0 ; Bien-A <=9 jmp L4 L2: cmp Bien-A,A jae L3 jmp L4 L3: ; Bien-A >=A cmp Bien-A,Z ja L4 Mov Loai,0 ; Bien-A <=Z L4: ... Chu y : e kiem tra xem mot gia tr co thuoc mot khoang cho trc hay khong ta co the dung giai thuat sau : Khoang cho trc : M1..M2 Gia tr can kiem tra : X at trong AL ( hoac AX ) sub AL,M2+1 ; Ket qua am neu X <=M2 (1) add AL,(M2-M1)+1 ; Ket qua am neu X < M1 (2) jnc Khong-thuoc-ve ; tng ng vi JAE jc Thuoc-ve ; tng ng vi JB e chng minh, hay xem anh hng cua cac phep tnh so hoc len cac c hieu va tac dung cua c hieu len cac lenh chuyen ieu khien co ieu kien. Neu X thuoc ve M1..M2 th phep tnh (1) phai cho ket qua am (2) phai cho ket qua dng. Ket qua cong hai phan t, trong o co mot phan t am tao thanh mot ket qua dng se co bit tran --> CF = 1 Ch th JB c thc hien neu CF = 1 Ch th JAE c thc hien neu CF = 0 27

6.2.3Chuyen ieu khien theo nhieu gia tr va c ly chuyen ieu khien ln hn 128 cmp ah,0 je L1 cmp ah,1 je L2 cmp ah,2 je L3 cmp ah,010h je L4 cmp ah,011h je L5 cmp ah,012h je L6 jmp End-case L1: jmp Case-0 L2: jmp Case-1 L3: jmp Case-2 L4: jmp Case-10 L5: jmp Case-11 L6: jmp Case-12 Case-0: ... jmp End-case Case-1: ... jmp End-case Case-2: ... jmp End-case Case-10: ... jmp End-case Case-11: ... jmp End-case Case-12: ... End-case: ...

28

6.3CAU TRUC FOR 6.3.1FOR Bien-A:=0 TO 100 DO .... mov Bien-A,0 L1: ... inc Bien-A cmp Bien-A,100 ja L2 jmp L1 L2: ... 6.3.2Ch th LOOP <nhan> Ch th LOOP <nhan> thc hien nh sau : tr cx 1,kiem tra cx a bang 0 cha, neu cha se chuyen quyen ieu khien en <nhan> . Neu cx = 0 th tiep tuc lam cac lenh ke tiep . Dung ch th LOOP e ieu khien cac vong lap lam chng trnh cua chung ta tr nen ngan gon va thc hien nhanh hn. Trong khi dung ch th LOOP e ieu khien vong lap hay can than khi lam thay oi gia tr cua CX . Th du : mov cx,10 ; Lap 10 lan L1: push cx ; Bao toan CX mov ah,2 ; Chc nang 02h interrupt 021h mov dl,7 ; In ma so 7 : beep mot tieng int 021h pop cx ; Phuc hoi CX loop L1 Chu y : Khi au qua trnh LOOP neu CX=0 th vong lap se thc hien 65536 lan trc khi ket thuc ! e kiem tra CX co bang 0 hay khong, ta co the dung ch th JCXZ <nhan> .ay la mot lenh chuyen ieu khien co ieu kien.Chuyen ieu khien c thc hien neu CX=0 Moi lan loop CX b giam 1 nhng ay la phep toan noi cua 8088, thanh ghi c hieu hoan toan khong b anh hng . Do o khi ket thuc qua trnh lap mac du CX luon bang 0 nhng hien tng nay khong c ghi nhan bi c hieu ZF. 6.4MOT SO KY THUAT CAN BAN 6.4.1Xoa/Dng/ao mot bit Xoa bit 2 cua AL AND AL,NOT 4 ; 11111011b Dng bit 2 cua AL OR AL,4 ; 00000100b NOT bit 2 cua AL XOR AL,4 ; 00000100b 29

6.4.2Kiem tra mot bit ... test al,8 ; kiem tra bit 3 cua AL jz L2 L1: ; Bang 1 ... jmp L3 L2: ; Bang 0 ... L3: 6.4.3Kiem tra nhieu bit ong thi khac khong ... and al,8 OR 4 ; Xoa cac bit khac bit 3 va bit 2 cmp al,8 OR 4 ; Kiem tra bit 3 va bit 2 jne L2 L1: ; ong thi bang 1 ... jmp L3 L2: ; Co t nhat 1 bit bang 0 ... L3: 6.4.4Ky thuat nhan va chia tren so nh phan Tac vu nhan va chia thng chiem nhieu thi gian thc hien hn cac tac vu cong tr, shift ... Do o cac chng trnh assembler thng co gang chuyen cac tac vu nhan chia thanh nhng oan chng trnh ch gom cac tac vu cong tr va shift, rol ... Ta co cac so tnh chat sau : - Shift left 1 bit tren mot gia tr nh phan cho ket qua tng t nhan gia tr nh phan o cho 2 - Shift right 1 bit tren mot gia tr nh phan cho ket qua tng t chia gia tr nh phan o cho 2 Th du 1 : Nhan mot gia tr vi 10 . Dung quy tac A*10 = A*8+A*2 mov ax,gia-tr-au ; shl ax,1 ; AX = gia-tr-au*2 mov bx,ax ; BX = gia-tr-au*2 shl ax,1 ; AX = gia-tr-au*2*2 shl ax,1 ; AX = gia-tr-au*2*2*2 add ax,bx ; AX = gia-tr-au*(2*2*2+2) ; AX = gia-tr-au*10 Th du 2 : Nhan mot gia tr vi 14. Dung quy tac A*14 = A*16-A*2 mov ax,gia-tr-au ; shl ax,1 ; AX = gia-tr-au*2 mov bx,ax ; BX = gia-tr-au*2 shl ax,1 ; AX = gia-tr-au*2*2 shl ax,1 ; AX = gia-tr-au*2*2*2 30

shl ax,1 ; AX = gia-tr-au*2*2*2*2 add ax,bx ; AX = gia-tr-au*(2*2*2*2-2) ; AX = gia-tr-au*14 6.5MOT SO GIAI THUAT CHUYEN OI 6.5.1Tao chuoi so dec t mot gia tr nh phan 2 byte (Khong nh dang) Num-to-Dec proc near ; ; Input : ; AX = gia tr can chuyen oi ( 2 byte ) ; DS:SI = Buffer (Kch thc 5 byte,xoa trong bang 020h) ; Output : ; Dec-string c at vao buffer va canh theo le phai ; push ax push bx push cx mov bx,5 mov cl,10 NTD1: div cl ; add ah,0 ; Chuyen so d thanh ky so ; Chu y : 0..9 la cac ma lien tuc mov byte ptr [si+bx],ah dec bx ; bx = bx-1 xor ah,ah ; Chia al cho 10,so d trong ah cmp al,0 jne NTD1 ; Neu AL # 0 th lap lai pop cx pop bx pop ax ret Num-to-Dec endp 6.5.2Tao chuoi so dang dec t mot gia tr nh phan 4 byte (Co nh dang) Num-to-Dec proc near ; ; Input : ; DX,AX = gia tr can chuyen oi ( 4 byte ) ; DS:SI = Buffer ( Khong can phai xoa trong trc ) ; CX = Kch thc chuoi so ( format/picture ) ; Cho CX = 0 se tao ra loi ; Output : ; Dec-string c at vao buffer va canh theo le phai ;

31

push ax push bx push cx push dx push si push di mov di,10 add si,cx NTD1: mov bx,ax ; BX = 2 byte thap mov ax,dx ; Chia 2 byte cao cho 10 xor dx,dx div di xchg ax,bx ; (so-d*65536 + 2 byte thap)/10 div di add dl,0 ; So d chnh la ky so can tm dec cx jcxz NTD3 NTD2: mov byte ptr ds:[si],dl dec si mov dx,bx or dx,ax jnz NTD1 mov dl, loop NTD2 NTD3: pop di pop si pop dx pop cx pop bx pop ax ret Num-to-Dec endp 6.5.3Tao chuoi so dang dec t mot gia tr nh phan 4 byte (Co nh dang) NUM-TO-DEC proc near ; ; Input : ; ; DX,AX = Gia tr can chuyen oi ; (DX : 2 byte cao, AX : 2 byte thap) ; ES:DI = a ch cua buffer ; CH = Kch thc chuoi so ( format/picture ) ; ; Output : 32

; Dec-string c at vao buffer va canh theo le phai cld mov bx,ax ; DX,BX cha gia tr can oi mov al, mov cl,9 ; Chuoi so co chieu dai toi mov si,offset NTD-table ; a 9 ky so NTD1: cmp dx,word ptr cs:[si+2] ; So sanh DX,BX vi dword jb NTD2 ; ang c DS:SI ch en ja NTD3 ; ( Bat au t hang t ) cmp bx,word ptr cs:[si] ; So sanh 2 byte cao trc jae NTD3 ; 2 byte thap sau NTD2: add si,4 ; Di en hang ke tiep cmp ch,cl jbe NTD21 ; Xoa trong phan au buffer stosb ; NTD21: dec cl jnz NTD1 NTD3: inc cl NTD4: mov al,0-1 NTD5: inc al sub bx,word ptr cs:[si] ; Tr hai gia tr 4 byte sbb dx,word ptr cs:[si+2] ; jnc NTD5 ; Ket qua van cha am add bx,word ptr cs:[si] ; Neu ket qua am, tra lai adc dx,word ptr cs:[si+2] ; ket qua dng nho nhat ; --> chuyen xuong hang ; ke tiep stosb ; AL = ky so hang ang xet dec cl ; CL = hang ang xet add si,4 ; Di en hang ke tiep jnz NTD4 ret NUM-TO-DEC endp NTD-table dd 1000000000 ; hang t dd 100000000 ; hang tram trieu 33

dd 10000000 ; hang chuc trieu dd 1000000 ; hang trieu dd 100000 ; hang tram ngan dd 10000 ; hang chuc ngan dd 1000 ; hang ngan dd 100 ; hang tram dd 10 ; hang chuc dd 1 ; hang n v

Chu y : Giai thuat cua 6.5.1 va 6.5.2 : chia so can oi cho 10, suy ra ky so tng ng t so d cua phep toan chia . Qua trnh tao ra chuoi so thap phan theo chieu t phai sang trai. e tranh trng hp ket qua chia b tran,th du 6.5.2 a dung en hai lan chia trung gian, trong o ket qua cua moi lan chia luon khong tran. Giai thuat cua 6.5.3 : dung mot bang liet ke gia tr cac hang n v cua he thap phan theo th t t ln en nho . Khi chuyen oi se tien hanh do bang t tren xuong cho en khi gap gia tr nho hn gia tr can chuyen oi . Th du : gia tr can chuyen oi la 170900 th gia tr tm thay la 100000 (tieu bieu cho hang tram ngan) Lay gia tr can chuyen oi tr cho gia tr tm thay va lap lai cho en khi hieu so nho hn so tr . So lan lap chnh la gia tr cua ky so tng ng. Trong th du tren, so lan lap la 1, hieu so la 70900 Cho so tr la phan t ke tiep trong bang, lap lai qua trnh tren cho en khi do het bang . Giai thuat cua 6.5.3 ch dung cac tac vu cong tr va co the m rong cho cac so co kch thc tuy y . 6.5.4Tao chuoi so dang hex t mot gia tr nh phan 1 byte Num-To-Hex proc near ; ; Input : ; AL = gia tr can chuyen oi ( 1 byte ) ; DS:SI = Buffer ; Output : ; Hex-string c at vao buffer ( 2 ky so hex ) ; push ax push cx mov ah,al ; AH = AL mov cl,4 shl ah,4 ; Xoa 4 bit cao (nibble cao) shr ah,4 ; AH = nibble thap shr al,4 ; AL = nibble cao add ax,03030h ; AH = AH+0, AL = AL +0 cmp ah,9 jbe NTH1 add ah,A-9-1 NTH1: 34

cmp al,9 ; Neu AL >9 --> A..F jbe NTH2 add al,A-9-1 ; Cong them khoang cach t A NTH2: ; en 9 tr 1 . mov word ptr [si],ax ; ky so tng ng vi nibble pop cx ; cao se at trc . pop ax ret Num-To-Hex endp 6.5.5Tao chuoi so dang bin t mot gia tr nh phan 1 byte Num-to-Bin proc near ; ; Input : ; AL = gia tr can chuyen oi ( 1 byte ) ; DS:SI = Buffer ( 8 byte ) ; Output : ; Bin-string c at vao buffer ( 8 ky so bin ) ; push ax push bx xor bx,bx ; BX = 0 NTB1: mov ah,0 shl al,1 ; CF = bit b ay lot ra ngoai adc ah,0 ; CF = 0 --> AH = 0+0 = 0 ; CF = 1 --> AH = 0+1 = 1 mov byte ptr [si+bx],ah inc bx ; bx = bx+1 cmp bx,8 ; a het 8 bit cha ? jne NTB1 pop bx pop ax ret Num-to-Bin endp 6.5.6oi chuoi so dec thanh gia tr nh phan 4 byte DTN proc near ; Input : ; DS:SI = Buffer cha num-str dang decimal ; CL = chieu dai cua num-str ; Output: ; CF=1 --> loi chuyen oi ; CF=0 --> DX:AX = gia tr nh phan tng ng push bx push cx 35

push si xor ch,ch xor ax,ax xor dx,dx DTN0: cmp byte ptr [si], ; Bo qua cac khoang trong jne DTN1 ; ben trai chuoi so inc si loop DTN0 jmp DTN3 ; Chuoi so rong DTN1: mov bl,byte ptr [si] inc si sub bl,03Ah ; kiem tra 0<= BL <=9 add bl,0Ah jae DTN3 ; Co mot ky t la trong ; chuoi so push bx shl AX,1 ; nhan 2 rcl DX,1 ; push dx push ax shl AX,1 ; roi nhan 4 rcl DX,1 shl AX,1 rcl DX,1 pop bx ; cong don add ax,bx ; a*2 + a*8 = a*10 pop bx adc dx,bx pop bx xor bh,bh add ax,bx ; cong ky so mi vao hang n adc dx,0 ; v js DTN3 ; Ket qua b tran --> loi loop DTN1 DTN2: clc jmp DTN4 DTN3: ; Neu gap loi, CF=1, ket qua stc ; chuyen oi d dang trong DTN4: ; DX|AX pop si pop cx pop bx 36

ret DTN endp 6.5.7oi chuoi so hex thanh gia tr nh phan 4 byte HTN proc near ; Input : ; DS:SI = Buffer cha num-str dang hexa ; CL = chieu dai cua num-str ; Output: ; CF=1 --> loi chuyen oi ; CF=0 --> DX:AX = gia tr nh phan tng ng ; push bx push cx push si xor ch,ch xor bx,bx ; DX|BX cha ket qua trung xor dx,dx ; gian mov ah,0Fh HTN0: cmp byte ptr [si], ; Bo qua cac khoang trong jne HTN1 ; ben trai chuoi so inc si loop HTN0 jmp HTN4 ; Chuoi so rong HTN1: mov al,byte ptr [si] inc si sub al,0 jc HTN4 ; AL < 0 --> loi cmp al,9 jb HTN2 sub al,A-9-1 cmp ah,al jc HTN4 ; AL > F --> loi HTN2: push cx mov cl,4 HTN3: shl bx,1 ; Nhan DX|BX vi 16 rcl dx,1 ; loop HTN3 ; or bl,al ; Cong don gia tr mi pop cx 37

loop HTN1 ; Cho en khi het chuoi so HTN4: mov ax,bx pop si pop cx pop bx ret HTN endp 6.5.8oi chuoi so bin thanh gia tr nh phan 4 byte BTN proc near ; Input : ; DS:SI = Buffer cha num-str dang binary ; CL = chieu dai cua num-str ; Output: ; CF=1 --> loi chuyen oi ; CF=0 --> DX:AX = gia tr nh phan tng ng ; push bx push cx push si xor ch,ch xor bx,bx xor dx,dx BTN0: cmp byte ptr [si], ; Bo qua cac khoang trong jne BTN1 ; ben trai chuoi so inc si loop BTN0 jmp BTN2 ; Chuoi so rong BTN1: mov al,byte ptr [si] inc si sub al,0 jc BTN2 ; AL < 0 --> loi cmp al,1 ja BTN2 ; AL > 1 --> loi shr al,1 ; Bit gia tr at trong CF rcl bx,1 ; rcl dx,1 ; Chuyen vao DX|BX loop BTN1 BTN2: 38

mov ax,bx pop si pop cx pop bx ret BTN endp

39

CHNG 7 : CAC TAC VU VE CHUOI


7.1LODSB/LODSW Tac dung : nap vao AL (oi vi LODSB) hay AX (oi vi LODSW) gia tr tai a ch xac nh bi DS:SI . Sau o: Neu DF = 0 tang SI 1 n v oi vi LODSB, 2 n v oi vi LODSW Neu DF = 1 giam SI 1 n v oi vi LODSB, 2 n v oi vi LODSW 7.2STOSB/STOSW Tac dung : lay gia tr cua AL (oi vi LODSB) hay AX (oi vi LODSW) at vao byte hay word tai a ch xac nh bi ES:DI . Sau o Neu DF = 0 tang DI 1 n v oi vi STOSB, 2 n v oi vi STOSW Neu DF = 1 giam DI 1 n v oi vi STOSB, 2 n v oi vi STOSW 7.3SCASB/SCASW Tac dung : So sanh gia tr cua AL (oi vi SCASB) hay AX (oi vi SCASW) vi byte hay word tai a ch xac nh bi ES:DI . Sau o Neu DF = 0 tang DI 1 n v oi vi SCASB, 2 n v oi vi SCASW Neu DF = 1 giam DI 1 n v oi vi SCASB, 2 n v oi vi SCASW 7.4CMPSB/CMPSW Tac dung : so sanh 1 byte (oi vi CMPSB) hay 1 word (oi vi CMPSW) tai DS:SI vi gia tr tng ng tai ES:DI . Sau o Neu DF = 0 tang SI va DI 1 oi vi CMPSB, 2 oi vi CMPSW Neu DF = 1 giam SI va DI 1 oi vi CMPSB, 2 oi vi CMPSW 7.5MOVSB/MOVSW Tac dung : lay 1 byte (oi vi MOVSB) hay 1 word (oi vi MOVSW) tai a ch xac nh bi DS:SI at vao a ch xac nh bi ES:DI . Sau o Neu DF = 0 tang SI va DI 1 oi vi MOVSB, 2 oi vi MOVSW Neu DF = 1 giam SI va DI 1 oi vi MOVSB, 2 oi vi MOVSW e thay oi c hieu DF bo vi x ly 8088/8086 co cac lenh sau : - STD : dng c hieu DF ---> DF = 1 - CLD : xoa c hieu DF ---> DF = 0 7.6TIEN TO REPEAT (REP) Cac tac vu ve chuoi thng c s dung tren nhieu byte/word lien tiep . Do o can mot vong lap e thc hien nhieu lan mot tac vu ve chuoi . Th du : mov al,020h ; dung ma ASCII 020h (khoang trong) mov cx,30 ; e xoa trong bien buffer1 co chieu lea di,Buffer1 ; dai 30 byte cld L1: ; stosb ; Co the thay oan chng trnh lap loop L1 ; nay bang ch th 40

... ; REP STOSB Cac tien to repeat thng c s dung chung vi cac tac vu ve chuoi e thay the cac vong lap noi tren . Tien to REP khi i kem vi mot tac vu chuoi se co tac dung lap i lap lai tac vu chuoi o cho en khi CX = 0 . Moi lan lap, CX t ong giam 1 . Chu y : Viec CX b tr 1 sau moi lan lap khi s dung tien to REP khong anh hng en thanh ghi c hieu nh cac tac vu so hoc va logic. Nh vay e thc hien n lan lien tiep mot tac vu chuoi ta can lam : mov cx,n rep <tac vu chuoi> Tien to REPE (repeat while equal) : giong REP nhng se ket thuc qua trnh lap bat c khi nao phep so sanh co ket qua khong bang xay ra. Tien to REPNE (repeat while not equal) : giong REP nhng se ket thuc qua trnh lap bat c khi nao phep so sanh co ket qua bang xay ra. REPE va REPNE thng c dung vi SCASB/SCASW hoac CMPSB/CMPSW 7.7CHUOI TRONG PASCAL ( KIEU STRING ) oi vi PASCAL,chuoi la mot oan d lieu gom nhieu byte lien tiep nhau, va thng co y ngha la mot day cac ky t hn la mot day cac byte. Noi mot cach khac, cac thong tin lu cha trong chuoi thng dung e mo ta mot oan van theo ngon ng cua con ngi . Chuoi ch la mot khai niem cua ngi lap trnh . Moi chuoi cua PASCAL chiem 256 byte lien tiep vi cau truc : Byte au tien trong mot chuoi cua PASCAL c dung e ghi nh o dai hien tai cua thong tin ang c chuoi lu cha . Gia tr nay c goi la str-len . Cac byte ke tiep dung e lu cha thong tin cua chuoi. Thong tin cua chuoi ch tnh t byte au tien cua vung lu cha thong tin en byte th str-len . TURBO PASCAL a ra khai niem chuoi vi kch thc toi a be hn 256 byte Cac chuoi c khai bao nh : string[30] co kch thc 31 byte string[50] co kch thc 51 byte 7.7CAC TH DU NG DUNG Chuoi c nhac en trong cac th du sau la chuoi cua PASCAL 7.7.1oi cac mau t cua mot chuoi thanh cac ch cai in hoa Up-string proc near ; Input ; DS:SI = a ch cua chuoi can oi push ds pop es mov di,si mov cl,byte ptr es:[di] ; Chieu dai chuoi xor ch,ch inc si inc di US-1: 41

cld lodsb call Up-char ; stosb loop US-1 ret Up-string endp

Up-char proc near ; Input ; AL = ky t can oi ; ; Output ; AL = ky t a c oi cmp al,a jb UC-end ; Kiem tra AL co thuoc ve cmp al,z ; a..z hay khong ja UC-end sub al,a-A UC-end: ret Up-char endp 7.7.2Tm mot byte trong mot chuoi Find-char proc near ; Input ; ES:DI = a ch cua chuoi ; AL = Byte can tm ; Output ; ZF = 0 --> khong tm thay ; ZF = 1 --> ES:DI la a ch cua byte can tm mov cl,byte ptr es:[di] xor ch,ch ; CX = Str-len inc di cld repne scasb ret Find-char endp 7.7.3Tm mot chuoi con trong mot chuoi me Find-string proc near ; Input ; ES:DI = a ch cua chuoi me 42

; DS:SI = a ch cua chuoi con can tm ; Output ; ZF = 0 --> khong tm thay ; ZF = 1 --> DX = v tr tm thay trong chuoi me mov cl,byte ptr es:[di] xor ch,ch ; CX = Chieu dai cua chuoi me mov bl,byte ptr ds:[si] xor bh,bh ; BX = Chieu dai cua chuoi con inc si inc di mov dx,cx cld lodsb ; Lay ky t au cua chuoi con at vao AL dec si ; nh lai SI FS-begin: repne scasb ; so sanh cac ky t cua chuoi me vi AL jne FS-end ; ZF = 0 --> JNE = OK dec di ; nh lai DI inc cx ; nh lai CX cmp cx,bx ; Kiem tra chieu dai con lai cua chuoi me jb FS-end ; neu be hn chuoi con th ket thuc ; ZF = 0 --> JNE = OK push si ; DS:SI = a ch chuoi con push di ; ES:DI = a ch ky t bang vi ky t ; au cua chuoi con push cx mov cx,bx ; CX = chieu dai chuoi con repe cmpsb ; Bat au so sanh chuoi con vi chuoi me pop cx pop di pop si je FS-end ; ZF = 1 --> JE = OK inc di dec cx jmp FS-begin FS-end: pushf sub dx,cx inc dx ; DX = V tr tm thay trong chuoi popf 43

ret Find-string endp Co the sa oi bai tren thanh mot thu tuc co the tm mot chuoi con trong ca mot segment ( 64 Kb ). 7.7.4Insert mot byte vao mot chuoi Insert-Char proc near ; ; DS:SI = a ch chuoi me ; AL = byte can chen vao ; DX = v tr can chen ( tnh t 1 ) ; push ds pop es ; ES = DS mov cl,byte ptr ds:[si] cmp cl,255 je IC-end ; Khong the chen them inc byte ptr ds:[si] ; Tang kch thc chuoi me len 1 xor ch,ch add si,cx ; DS:SI = a ch byte cuoi chuoi me mov di,si inc di sub cx,dx inc cx ; CX = tong so ky t can dch chuyen std ; SI,DI se giam sau moi lan MOVSB rep movsb mov byte ptr ds:[si+1],al ; DS:[SI+1] = a ch can chen IC-end: ret Insert-Char endp 7.7.5Delete mot byte t mot chuoi Delete-Char proc near ; ; DS:SI = a ch chuoi me ; DX = v tr can xoa ( tnh t 1 ) ; push ds pop es ; ES = DS mov cl,byte ptr ds:[si] cmp cl,0 je DC-end ; Khong the delete dec byte ptr ds:[si] ; Giam kch thc chuoi me xor ch,ch add si,dx ; DS:SI = a ch byte se c xoa 44

mov di,si inc si sub cx,dx ; CX = tong so ky t can dch chuyen cld rep movsb DC-end: ret Delete-Char endp 7.7.6Trch mot chuoi con t mot chuoi me Sub-string proc near ; ; Input ; DS:SI = a ch chuoi me ; ES:DI = a ch chuoi con ; BX = so byte can chep ; DX = v tr bat au ( tnh t 1 ) ; ; Output ; BX = chieu dai chuoi con

mov cl,byte ptr ds:[si] xor ch,ch ; CX = chieu dai chuoi me add si,dx ; DS:SI = a ch iem bat au chep mov byte ptr es:[di],0 ; Neu iem bat au vt qua chieu dai cmp cx,dx ; hien tai cua chuoi me th cho lai jb SS-end ; chuoi rong sub cx,dx inc cx ; CX = so byte cho en het chuoi me cmp cx,bx ; Neu so byte can chep vt qua kch jbe SS-1 ; thc chuoi me th ch chep en mov cx,bx ; cuoi chuoi me. SS-1: mov byte ptr es:[di],cl ; Gan chieu dai cho chuoi con cld inc di rep movsb SS-end: ret Sub-string endp

45

CHNG 8 : KEYBOARD
Ban phm cua may IBM PC la mot thiet b bao gom : Cac phm : moi phm xac nh bi mot so th t goi la scan code (scan code la mot gia tr 8 bit) Co 3 loai ban phm chnh : - ban phm 83 phm cua IBM PC - ban phm 84 phm cua IBM PC/AT - ban phm 101 phm cua IBM PC/AT Cac en hieu bao trang thai cho cac phm ac biet Bo vi x ly rieng vi nhiem vu tiep nhan thong tin t cac phm va chuyen cac thong tin nay en computer. 8.1NGUYEN LY HOAT ONG CUA BAN PHM 8.1.1Scan code Khi mot phm c nhan xuong, ban phm thong bao va chuyen scan code cua phm ay cho computer Neu phm a c nhan xuong va gi im (khong buong tay) sau mot thi gian (initial delay), ban phm se tiep tuc chuyen scan code cua phm ay cho computer theo mot toc o xac nh (repeat rate) . Ta goi scan code trong trng hp nay la Pressed-key Khi phm c ngng nhan (buong tay), ban phm chuyen scan code cua phm ay cho computer sau khi cong them 128 (dng bit so 7) Ta goi scan code trong trng hp nay la Released-key Bang B.8.1 : Scan code cua cac phm tren ban phm 83/84 Hex Key Hex Key Hex Key Hex Key Hex Key 01 Esc 12 E 23 H 34 .> 45 NumLock 02 1! 13 R 24 J 35 /? 46 ScrollLock 03 2 14 T 25 K 36 Shft(Rt) 47 Home [7] 04 3# 15 Y 26 L 37 * PrtSc 48 Up [8] 05 4$ 16 U 27 ;: 38 Alt 49 PgUp [9] 06 5% 17 I 28 39 Spacebar 4A K07 6 A 18 O 29 A A 3A CapsLock 4B Left [4] 08 7& 19 P 2A Shft(L) 3B F1 4C [5] 09 8* 1A [A 2B \ 3C F2 4D Right[6] 0A 9( 1B ] A 2C Z 3D F3 4E K+ 0B 0 1C Enter 2D X 3E F4 4F End [1] 0C -1D Ctrl 2E C 3F F5 50 Down [2] 0D += 1E A 2F V 40 F6 51 PgDn [3] 0E bksp 1F 30 B 41 F7 52 Ins [0] 0F Tap 20 T,T 31 N 42 F8 53 Del [.] 10 Q 21 F 32 M 43 F9 54 SysReq 11 W 22 33 33 ,< 44 F10

oi vi ban phm 101 phm, scan code tng ng vi cac phm m rong (Ctrl,Alt,Enter th hai, cac phm Ins,Delete,Home,End,PgUp,PgDn va cac phm mui ten th hai ) luon c tao thanh mot cap gia tr 46

vi byte au bang 0E0h va byte ke tiep la scan code tng t vi scan code cua ban phm 83/84 . To hp cac phm m rong se tao thanh mot chuoi cac scan code vi y ngha tng t tren ban phm 83/84 Bang B.8.2 : Scan code cua cac phm m rong tren ban phm 101/102 ---------------------------------------------U---------------------------Key Hex Sequence Key Hex Sequence| F11............................................. 57 Home ..................... e0 47 | F12 ............................................ 58 Shft-Home.............. e0 aa e0 47 | Right-Alt ................................... e0 38 End ......................... e0 4f | Right-Ctrl................................... e0 1d Shft-End ................. e0 aa e0 4f | PrintScreen................................ e0 2a e0 37 Up........................... e0 48 | Shft-PrintScreen (SysReq)........ e0 37 Shft-Up................... e0 aa e0 48 | Ctrl-PrintScreen (SysReq) ........ e0 37 Down ...................... e0 50 | Alt-PrintScreen ......................... 54 Shft-Down .............. e0 aa e0 50 | Pause ......................................... e1 1d 45 e1 9d c5 PageUp................... e0 49 | Ctrl-Pause (Break) .................... e0 46 e0 c6 Shft-PageUp........... e0 aa e0 49 | Insert.......................................... e0 53 PageDown.............. e0 51 | Shft-Insert.................................. e0 aa e0 52 Shft-PageDown ..... e0 aa e0 51 | Delete........................................ e0 53 Right ....................... e0 4d | Shft-Delete................................ e0 aa e0 53 Shft-Right ............... e0 aa e0 4d | Left ............................................ e0 4b K Enter ................... e0 1c | Shft-Left .................................... e0 aa e0 4b K / .......................... e0 35 | Shft- K / .................................... e0 aa e0 35 Chu y : cac ten phm trong bang B.8.1 va B.8.2 co ky hieu K i trc la cac phm thuoc phan Key Pad cua ban phm (bang so ben tay phai) 8.1.2 I/O control Lien lac gia ban phm va computer c thc hien thong qua keyboard controller . Giao tiep vi ban phm co the c chia thanh hai loai chnh : a.Tiep nhan scan code Khi nhan c thong tin t ban phm,keyboard controller se phat ong interrupt 09h. Scan code gi en c at tai port 060h. oan chng trnh cua interrupt 09h co nhiem vu oc gia tr ay t port 060h vadien giai thanh cac thong tin hu dung . b.Thiet lap cac thong so cho ban phm. Co the thiet lap cac trang thai lam viec khac nhau cua ban phm bang cach gi mot control code ra port 060h va ke tiep la cac thong so tng ng. Cac control code hp le la : v 0FFh : Reset the keyboard and start internal diagnostics. v 0FEh : Resend the last transmission. v 0FDh-0F7h : No operator (NOP). v 0F6h : Set keyboard to defaults and continue scanning. v 0F5h : Set keyboard to defaults and disable keyboard scanning. v 0F4h : Enable the keyboard. KBD sends ACK, clears buffer, and starts scanning. v 0F3h : Set typematic rate and delay. First send 0F3h, then send data byte: 7 6 5 4 3 2 1 0 0 delay Rept rate bits 0-4 set the repeat rate 47

bits 5-6 set initial delay before first repeat: 00=250ms;01=500ms; 10=750ms; 11=1000ms bit 7 is always 0 Repeat rate setting (bits 0-4) Value Character/sec Value Character/sec 0 30.0 0Ah 10.0 1 26.7 0Dh 9.2 2 24.0 10h 7.5 4 20.0 14h 5.0 8 15.0 1Fh 2.0 v 0F2h-0EFh : No operator (NOP). v 0EEh : Echo. Diagnostics aid. Simply sends 0EEh right back. v 0EDh Turn LED lock key lights on or off. First send 0EDh, then send data byte: 7 6 5 4 Not used 3 2 c 1 n 0 s ScrollLock LED 0=OFF, 1=ON NumLock LED 0=OFF, 1=ON CapsLock LED 0=OFF, 1=ON Lu y : sau khi gi control code ra port 060h,phai co mot khoang thi gian tre (nen ln hn 10ms) trc khi gi tiep data byte. Th du : mov al,Ctrl-code out 060h,al xor cx,cx ; Delay: loop Delay mov al,Data-byte out 060h,al 8.2INTERRUPT 09H 8.2.1Shift va Toggle key Interrupt 09h quy dnh hai loai phm ac biet : 1. Shift key : bao gom Ctrl, Shift va Alt . Trang thai cua cac phm nay quyet nh gia tr cua cac phm khac . Th du : khi nhan phm C ta nhan c ky t c, neu nhan Shift-C ta nhan c ky t C . Mot phm shift khi c nhan xuong se bat au anh hng en cac phm go sau o cho en khi phm shift c buong ra . 2. Toggle key : gom Caps Lock va Num Lock . ay la cac cong tac hai chieu . Khi Caps Lock c bat len, trang thai shift cua cac phm ky t se ao ngc . Khi Num Lock c bat len, cac phm mui ten tren bang so ben phai se mat tac dung. Tnh trang cua cac phm shift va toggle c interrupt 09h ghi nh tai a ch 040:017. Moi lan nhan c mot scan code, interrupt 09h oi chieu vi tnh trang hien thi cua cac phm shift va toggle e suy ra ma ASCII ch thc cua phm c go vao .y ngha cac bit cua byte tai a ch 040:017 ( hay 0000:0417 ) 7 6 5 4 3 2 1 0 X Insert state : 1 = ON ; 0 = OFF 48

Caps Lock : 1 = ON ; 0 = OFF X Num Lock : 1 = ON ; 0 = OFF X Scroll Lock : 1 = ON ; 0 = OFF X 1 = Alt pressed X 1 = Crtl pressed X 1 = Left shift pressed X 1 = Right shift pressed

8.2.2Thu tuc cap nhat keyboard status byte (040:017) ; Thu tuc sau c thc hien ngay sau khi interrupt 09h c goi Update-KBD-Flag proc near push ds mov ax,040h mov ds,ax in al,060h ; Port 060h : keyboard data mov ah,al and al,07Fh ; Xoa bit 7 push cs pop es ; ES = CS lea di,KBD-Table-1 ; mov cx,8 cld repne scansb ; Do KBD-Table-1 jne UKF-end ; Khong phai la shift key hay toggle key mov al,1 ; CX = bit-no cua Keyboard status byte shl al,cl cmp cx,3 ; Neu bit-no > 3 --> Toggle key jbe UKF-Shift ; --> Khong xet released-key UKF-Toggle: test ah,080h ; jnz UKF-end ; Released-key xor byte ptr ds:[017h],al ; switch bit jmp UKF-end UKF-Shift: test ah,080h ; jnz UKF-Shift-Clear ; Released-key UKF-Shift-Set: or byte ptr ds:[017h],al ; set bit jmp UKF-end UKF-Shift-Clear: not al and byte ptr ds:[017h],al ; clear bit 49

UKF-end: pop ds ret Update-KBD-Flag endp KBD-Table-1 db 052h ; Insert scan-code ; 7 db 03Ah ; Caps Lock scan-code ; 6 db 045h ; Num Lock scan-code ; 5 db 046h ; Scroll Lock scan-code ; 4 db 038h ; Alt scan-code ; 3 db 01Dh ; Ctrl scan-code ; 2 db 02Ah ; Left shift scan-code ; 1 db 036h ; Right shift scan-code ; 0 db 0 8.2.3Keyboard buffer Scan code cua cac phm khac vi hai loai phm tren (Shift key va Togglekey),ngoai tr Insert,c chuyen thanh hai byte theo hai trng hp : Trng hp phm c go vao la mot phm bnh thng, byte thap cha ma ASCII cua phm c go,byte cao cha scan code. Trng hp phm go vao la mot phm ac biet nh cac phm F1 en F10 cac phm mui ten (cursor key), cac phm Home,End,PgUp,PgDn,Delete, Insert th byte thap se bang 0, byte cao cha scan code. Cap gia tr tren c interrupt 09h at vao mot hang i tai a ch040:01Eh.Hang i nay la mot buffer co kch thc 020h byte c anh dau bang hai v tr : au (KBD-head) va cuoi (KBD-tail) . Cac gia tr nay at tai : 040:01Ah : offset cua iem au ( 1 word ), Segment=040h 040:01Ch : offset cua iem cuoi ( 1 word ), Segment=040h Khi au, khi keyboard buffer con trong, iem au c cho trung vi iem cuoi . Khi mot phm c go, scan code va ascii code c at vao v tr iem cuoi ang ch en, sau o iem cuoi c tang them 2 . Neu iem cuoi ang ch en v tr cuoi cung cua buffer (ve mat vat ly), no se c at lai cho trung vi v tr au tien cua buffer (ve mat vat ly) Neu nh v tr ke tiep cua iem cuoi bang vi v tr hien tai cua iem au : keyboard buffer a ay, cac phm c go ke tiep se khong c at vao keyboard buffer . Khi co yeu cau oc ban phm, cap gia tr ang c iem au ch en se c lay ra (xem nh la mi do ban phm gi en), sau o iem au c tang them 2 . Neu iem au ch en v tr cuoi cung cua buffer (ve mat vat ly), no se c at lai cho trung vi v tr au tien cua buffer (ve mat vat ly) . Le d nhien neu iem au ang trung vi iem cuoi,se khong co phm nao c oc. Tom lai ban phm c khai thac theo nguyen ly : gia tr cua cac phm c gi en t ban phm c interrupt 09h ghi nh va sap xep theo th t trc sau trong mot buffer rieng,khi cac chng trnh ng dung oc ban phm, gia tr cu nhat trong buffer se c chuyen giao. Minh hoa ve cach quan ly keyboard buffer : a.Khi au KBD-head va KBD-tail ang trung nhau : Keyboard buffer ang trong KBD-head KBD-tail b.Phm T c go : 50

KBD-head T KBD-tail c.Phm E c go : KBD-head T E KBD-tail d.Phm S c go : KBD-head T KBD-tail e.Phm T c go : T KBD-tail f.Co yeu cau oc ban phm --> Phm T c oc T KBD-tail 8.2.4: Thu tuc cap nhat keyboard buffer ( them mot phm vao hang i ) Insert-key proc near ; Input ; AH : Scan code ; AL : ASCII code ; Output ; AX = 0FF00h --> buffer a ay T KBD-head E S KBD-head T E S E S

push bx push si push ds mov bx,040h mov ds,bx mov bx,word ptr ds:[01Ch] ; BX = iem cuoi hang i mov si,bx add bx,2 ; cmp bx,03Eh ; Cuoi buffer hay cha jb IK-1 mov bx,1Eh ; Neu roi th quay tr ve au buffer IK-1: cmp bx,word ptr ds:[01Ah] ; Kiem tra xem a ay buffer cha jne IK-2 mov ax,0FF00h 51

jmp IK-3 IK-2: mov word ptr ds:[si],ax ; at scan-code va Ascii-code vao ; hang i mov word ptr ds:[01Ch],bx ; Cap nhat iem cuoi IK-3: pop ds pop si pop bx ret Insert-key endp 8.2.5Thu tuc oc mot phm t keyboard buffer Read-key proc near ; Input ; AH = 0 --> neu cha co phm trong hang i th ch ; AH = 1 --> neu cha co phm trong hang i th AX = 0FF00h ; Output ; AH : Scan code ; AL : ASCII code push bx push ds mov bx,040h mov ds,bx RK-1: mov bx,word ptr ds:[01Ah] ; BX = iem au hang i cmp bx,word ptr ds:[01Ch] ; Co bang iem cuoi khong ? jne RK-2 ; Neu bang --> cha co phm trong ; hang i . or ah,ah jz RK-1 ; AH = 0 --> ch mov ax,0FF00h ; AH # 0 --> cho AX=0FF00h roi ket thuc jmp RK-4 RK-2: mov ax,word ptr ds:[bx] ; at scan-code va Ascii-code vao AX add bx,2 cmp bx,03Eh jne RK-3 ; Cuoi buffer hay cha ? mov bx,01Eh ; Neu roi th quay tr ve au buffer RK-3: mov word ptr ds:[01Ah],bx ; Cap nhat iem au . RK-4: pop ds pop bx ret 52

Read-key endp 8.3INTERRUPT 016H e giup cac chng trnh co the truy nhap en ban phm mot cach de dang,BIOS cung cap mot so cac chc nang n gian va thuan tien thong qua interrupt 016h. Interrupt 016h cung cap cac chc nang can ban sau : 8.3.1oc keyboard buffer Input : AH = 0 Output : AH = scan code AL = ASCII code (0 neu la phm ac biet) oc mot phm t keyboard buffer,neu cha co phm trong keyboard buffer se ch cho en khi co phm go vao ( do interrupt 09h cap nhat ).Khi oc se xoa luon ma phm trong keyboard buffer ( Ch cap nhat KBD-head ch khong thay oi thong tin trong keyboard buffer). 8.3.2Kiem tra keyboard buffer Input : AH = 01 Output : ZF = 1 : khong co phm nao trong keyboard buffer. ZF = 0 : a co phm trong keyboard buffer, AH = scan code, AL = ASCII code Kiem tra keyboard buffer, neu keyboard buffer khong trong th oc nh chc nang 0 nhng khong cap nhat lai KBD-head. 8.3.3oc keyboard status byte Input : AH = 02 Output : AL = status byte ( thong tin nh neu phan tren ) oc status byte tai a ch 0000:0417h Chu y rang chc nang 01 cua interrupt 021h a s dung interrupt 016h e oc ban phm, va ch cho lai byte thap cua phm go vao. V vay, s dung interrupt 016h e oc ban phm la phng phap tot nhat cho cac chng trnh Assembler. 8.3.4Ma cua mot so cac phm ac biet : (gia tr AX sau khi oc bang chc nang 0 hay 1 cua interrupt 016h) Cursor-up equ 04800h F1 equ 03B00h Cursor-down equ 05000h F2 equ 03C00h Cursor-left equ 04B00h F3 equ 03D00h Cursor-right equ 04D00h F4 equ 03E00h ESC-key equ 0011Bh F5 equ 03F00h Enter-key equ 01C0Dh F6 equ 04000h Ins-key equ 05200h F7 equ 04100h Del-key equ 05300h F8 equ 04200h Backspace equ 00E08h F9 equ 04300h Home-key equ 04700h F10 equ 04400h End-key equ 04F00h PgUp-key equ 04900h Ctrl-left equ 07300h PgDn-key equ 05100h Ctrl-right equ 07400h Ctrl-Home equ 07700h Ctrl-PgUp equ 08400h Ctrl-End equ 07500h 53

Ctrl-PgDn Alt-F1 Alt-F2 Alt-F3 Alt-F4 Alt-F5 Alt-F6 Alt-F7 Alt-F8 Alt-F9 Alt-F10

equ equ equ equ equ equ equ equ equ equ equ

07600h 06800h 06900h 06A00h 06B00h 06C00h 06D00h 06E00h 06F00h 07000h 07100h

Ctrl-F1 Ctrl-F2 Ctrl-F3 Ctrl-F4 Ctrl-F5 Ctrl-F6 Ctrl-F7 Ctrl-F8 Ctrl-F9 Ctrl-F10

equ equ equ equ equ equ equ equ equ equ

05E00h 05F00h 06000h 06100h 06200h 06300h 06400h 06500h 06600h 06700h

8.4MOT CHNG TRNH VE BAN PHM Cac thu tuc Num-to-dec va Num-to-hex s dung trong th du nay la cac bai tap mau cua chng 6. main proc near lea dx,Mess1 ; In Mess1 mov ah,09h int 021h M1: lea di,Key-name ; Xoa Key-name cua phm trc mov cx,10 ; cld ; mov al, ; rep stosb ; xor ax,ax ; oc keyboard int 016h push ax mov key-name,al ; at ASCII code va nhan c vao ; Key-name lea si,Function-table mov cx,7 or al,al ; AL = 0 --> Function key jz M2 lea si,Control-table ; AL <> 0 --> Test Control key xchg ah,al mov cx,10 M2: call Get-name ; Do ten Function/Control key pop ax push ax xor ah,ah lea si,Ascii-code-hex+1 54

call Num-to-hex ; Tao ASCII code (hex) lea si,Ascii-code-dec mov bx,3 call Num-to-dec ; Tao ASCII code (dec) pop ax push ax mov al,ah xor ah,ah lea si,Scan-code-hex+1 call Num-to-hex ; Tao SCAN code (hex) lea si,Scan-code-dec call Num-to-dec ; Tao SCAN code (dec) lea dx,Mess2 mov ah,09h int 021h pop ax ; AX = read key cmp al,27 ; ( 01Bh ) ESC-key --> Ket thuc je M3 jmp M1 M3: int 020h main endp Mess1 db Test-key program ,10,10,13 db Press ESC to abort, another key to continue db 10,10,13,$ Mess2 db Key name is : Key-name db 10 dup ( ) db ASCII CODE : ascii-code-hex db 000h ( ascii-code-dec db 000) db SCAN CODE : scan-code-hex db 000h ( scan-code-dec db 000) ,13,$ Get-Name proc near ; DS:SI = Key-table addr ; AL = ID code ; CX = Element size ; Key-table elements structure : ; 1 byte for ID code ( ID-code=0 --> end table ) ; cx-6 byte for name GN1: cmp ah,byte ptr [si] 55

je GN2 cmp byte ptr [si],0 jz GN3 add si,cx jmp GN1 GN2: inc si dec cx lea di,Key-name cld rep movsb GN3: ret Get-Name endp Control-table db 00Dh, CR(Enter) db 01Bh, ESC db 00Ah, LF db 009h, Tab db 020h, Space bar db 008h, Backspace db 000h Function-table db 048h, Up db 050h, Down db 04Bh, Left db 04Dh, Right db 052h, Insert db 053h, Delete db 047h, Home db 04Fh, End db 049h, PgUp db 051h, PgDn db 03Bh, F1 db 03Ch, F2 db 03Dh, F3 db 03Eh, F4 db 03Fh, F5 db 040h, F6 db 041h, F7 db 042h, F8 db 043h, F9 db 044h, F10 db 000h,

56

CHNG 9 : CLOCK - TIMER - SOUND


9.1CLOCK e thc hien mot lenh, CPU phai trai qua nhieu giai oan, moi giai oan c mot nhom cac mach ien thc hien, ket qua cua giai oan trc c chuyen cho giai oan sau thc hien tiep cho en khi lenh c hoan tat. Trong qua trnh thuc hien, e cac mach ien hoat ong nhp nhang ong bo vi nhau, ngi ta a dung cac xung ien vi tan so xac nh e eu khien cac mach ien ay.Cac mach ien se ch hoat ong khi xuat hien xung,va se thc hien mot tac vu nao o (tng ng vi mot giai oan) trong qua trnh xuat hien xung.Cac xung ong vai tro cua ngi cam c hieu ra lenh cho cac mach ien lam viec mot cach nhp nhang,ung luc.Cac xung ien nay c goi la nhp ong ho cua may ien toan (CLOCKS) . oi vi may IBM PC/XT chuan nhp ong ho la 4772727 Hz (4.77 MHz) . Nhp ong ho nay c tao ra t nguon dao ong goc ( co tan so 14.31818 MHz ) bang cach chia tan so goc cho 3. Cac may IBM AT s dung cac bo vi x ly 80286 va 80386 a dung nhp ong ho vi tan so cao hn : 6,8,12,16,25,33 ... MHz nen a co toc o ln hn. Mat khac so chu ky e thc hien mot lenh cua cac bo vi x ly 80286,80386 thng t hn 8088/8086, ay cung la ly do lam toc o cua chung cao hn. 9.2TIMER Mot so tac vu trong may tnh can c thc hien theo mot chu ky xac nh hoac trong nhng thi gian xac nh . Th du : em gi Ch motor cua o a at en toc o xac nh . ........ Cac yeu cau nay oi hoi phai co mot he thong ong ho bao thc c goi la TIMER . oi vi cac may vi tnh thuoc ho nha IBM PC/XT/AT chip 8253-5 hoac cac chip tng ng am nhan nhiem vu tren . TIMER chip cung cap nhieu kenh (CHANNEL) tn hieu ong ho, moi kenh cho mot muc ch rieng . Tan so lam viec cua moi kenh eu co the xac nh bang cach cung cap cac tham so thch hp cho TIMER chip . Nhng chip co kha nang thay oi tnh trang lam viec thong qua cac menh lenh va cac tham so c goi la cac chip co the thao chng dc (programmable chips). 8253-5 cung cap 3 kenh : - Kenh 0 cung cap tn hieu ong ho he thong c xac nh tan so chuan khoang 18.206 Hz sau khi bat may . - Kenh 1 dung e ieu khien qua trnh lam ti bo nh (RAM refresh) - Kenh 2 dung e ieu khien loa. 9.3THAO CHNG CHO 8253-5 Tren IBM PC/XT/AT 8253-5 c ieu khien thong qua cac port : - Port 040h : data port of channel 0 - Port 041h : data port of channel 1 - Port 042h : data port of channel 2 - Port 043h : control port of 8253-5 9.3.1Nguyen ly hoat ong cua 8253-5 57

Chip 8253-5 c cung cap mot dao ong tai ngo vao co tan so 1.19318 MHz. Dao ong nay c tao ra bang cach chia dao ong goc cho mot gia tr thch hp ( 12 tren PC/XT ) . Moi kenh cua 8253-5 la mot bo em (Counter) va mot thanh ghi 16 bit lu gi so em (selected count register) goi tat la SCR. e thiet lap trang thai lam viec cho moi kenh ta can phai gan gia tr cho SCR cua moi bo em cung cac tham so bang cach gi mot byte ieu khien ra control port cua 8253-5 e ch nh kenh va mode lam viec,ke tiep la cac tham so ra data port tng ng . Byte ieu khien co dang thc : SC1 SC0 RL1 RL0 M2 M1 M0 BCD Vi chi tiet ve cac thanh phan nh sau : RL1 RL0 SC1 SC0 0 0 Select Counter 0 0 0 Counter Latching operator 0 1 Select Counter 1 0 1 Read/Load high byte only 1 0 Select Counter 2 1 0 Read/Load low byte only 1 1 Illegal 1 1 Read/Load low byte first and then high byte M2 0 0 X X 1 1 M1 0 0 1 1 0 0 M0 0 1 0 1 0 1

Mode 0 Mode 1 Mode 2 Mode 3 Mode 4 Mode 5

0 1

Binary Counter 16-bits Binary Code Decimal (BCD) Counter (4 decades)

9.3.2Cac mode cua 8253-5 Mode 0 : Interrupt on terminal Count Tn hieu ra mc thap sau khi mode c ch nh . Sau khi SCR c nap gia tr, tn hieu ra tiep tuc mc thap va bo em bat au lam viec . Khi au bo em c nap gia tr cua SCR, sau o giam 1 khi co tn hieu xuat hien ngo vao . Khi bo em giam en 0 (terminal count),tn hieu ra se chuyen len mc cao va gi luon trang thai nay cho en khi mode c nh lai hoac SCR c nap lai . Nap lai SCR trong khi bo em ang lam viec, se tao ra ket qua : - Nap byte th nhat : bo em ngng hoat ong - Nap byte th hai : bo em lam viec tr lai vi so em mi Mode 1 : Programmable One-Shot Giong mode 0,nhng viec nap lai SCR trong khi tn hieu ngo ra mc thap se khong co tac dung . Mode 2 : Rate generator Tn hieu ra se mc thap trong mot thi hang va se mc cao trong thi hang ke tiep,qua trnh nay c lap i lap lai cho en khi nh lai mode. Thi hang co gia tr bang khoang thi gian thc hien N ( N la gia tr trong SCR ) chu ky cua tn hieu vao.Nh vay tn hieu ra se la dang xung vuong vi tan so bang tan so ngo vao chia cho 2*N . Mode 3 : Square Wave Rate generator Giong nh mode 2, nhng tn hieu se mc thap trong thi hang va mc cao trong thi hang ke tiep.Do o tn hieu ra se la xung vuong vi tan so bang tan so ngo vao chia cho N . Nh vay tan so cua tn hieu cua ngo ra trong mode 3 se bang 1.19318 MHz chia cho gia tr cua SCR. e tao ra mot dao ong co tan so f ta can cho so em cua kenh tng ng mot gia tr xac nh bi : 1193180 58

n = -----------f Mode 4 : Software Triggered Strobe Sau khi mode 4 c thiet lap, tn hieu ngo ra se mc cao . Khi SCR c nap, bo em bat au lam viec . Khi bo em giam en 0, tn hieu ngo ra se chuyen sang mc thap trong khoang thi gian bang 1 chu ky cua tn hieu xung vao,sau o tr lai mc cao . Neu SCR c nap lai trong luc bo em ang hoat ong, gia tr nay se c nap vao bo em cho chu ky ke tiep. Mode 5 : Hardware Triggered Strobe Sau khi mode 5 c thiet lap, tn hieu ngo ra se mc cao . Khi SCR c nap, bo em bat au lam viec . Khi bo em giam en 0, tn hieu ngo ra se chuyen sang mc thap trong khoang thi gian bang 1 chu ky cua tn hieu xung vao,sau o tr lai mc cao . 9.3.3Thao chng cho Chanel-2 oc SCR cua Channel-2 vao CX mov al,10110110b ; Yeu cau oc 2 byte cua SCR t Channel-2 out 043h,al ; a ra control port in al,042h ; Lay byte th nhat (Low byte) mov cl,al ; Cat vao CL in al,042h ; Lay byte th hai (High byte) mov ch,al ; Cat vao CH ---> CX = SCR value Ch nh tan so cua Channel-2 la 512 Hz dang xung vuong mode 3 mov dx,012h ; Double word trong DX,AX co gia tr 1193180 mov ax,034DCh mov cx,512 div cx ; mov bx,ax ; BX = 1193180/512 mov al,10110110b ; Yeu cau nh mode 3 cho channel-2 out 043h,al ; ong thi nap gia tr mi cho SCR mov al,bl out 042h,al ; Load low byte mov al,bh out 042h,al ; Load high byte 9.4NGUYEN LY HOAT ONG CUA ONG HO HE THONG (SYSTEM CLOCK) Ngo ra cua channel-0 cua 8253-5 c noi lien vi chip ieu khien interrupt 8259 . Moi xung nhp cua channel-0 se lam phat ong interrupt cng 08h . Moi lan c goi en, interrupt 08h se thc hien cac cong viec chnh sau : - Tang gia tr tai double word 0000:046C (Count tick) len 1 ( gia tr nay c cho bang 0 luc 0 gi ) - Goi interrupt 01Ch - Cho phep phat ong interrupt cng (Enable hard interrupt) bang cach gi ra cong 020h gia tr 020h . SCR cua channel-0 c nap gia tr 0FFFFh (65535) trong qua trnh khi ong may, do o tan so cua ngo ra se la 1193180/65536 = 18.206 Hz . He ieu hanh se can c theo gia tr cua Count tick e tnh ra thi gian cho he thong . Make-time proc near ; Make-time se lay gia tr 59

; hien thi cua Count tick xor ax,ax ; nhan vi 65535 roi chia mov es,ax ; cho 1193180 . Gia tr mov ax,word ptr es:[046Ch] ; thu c chnh la tong mov dx,word ptr es:[046Ch+2] ; so giay tnh t 0 gi ; DX:AX = Time-count ; T o tnh ra gi,phut mov bx,ax ; giay va phan tram giay . mov cx,dx ; Time-count = tong so giay tnh t 0 gi *(1193180/65535) ; Nhan Time-count vi 5 roi at ket qua vao DX:AX shl ax,1 rcl dx,1 ; Nhan 2 shl ax,1 rcl dx,1 ; Nhan 2 add ax,bx adc dx,cx ; Cong don 1+2*2=5 ; Goi gia tr thu c tai ay la (1) ; Chia ket qua cho 59659 ;. Chu y : 59659=1193180/20 mov cx,59659 div cx mov bx,ax ; Cat ket qua vao BX xor ax,ax ; DX:AX = so d * 65535 div cx ; mov dx,bx ; ; DX:AX = (1)*65535/59659 mov cx,200 div cx ; AX = (Time-count*65535/1193180)/2 = (so giay t 0 gi)/2 mov bl,100 sub bl,dl ; Kiem tra so d ; Neu DL > 100 --> BL < 0 --> CF=1 ; Nhan ket qua vi 2 --> so giay tnh t 0 gi rcl ax,1 ; Neu so d cua phep chia cho 200 mov dx,0 ; ln hn 100 th cong them 1 vao rcl dx,1 ; ket qua mov cx,60 ; giay = (tong so giay) mod 60 ; Ket qua la tong so phut ; So d la giay ; phut = (tong so phut) mod 60 ; So d la phut ; Ket qua la gi 60

div cx mov s-var,dl div cl mov m-var,ah mov h-var,al ret

Make-time endp s-var db 0 m-var db 0 h-var db 0 9.5NGUYEN LY IEU KHIEN LOA TRONG IBM PC/XT/AT Moi may IBM PC/XT/AT c trang b mot cai loa nho cong suat khoang 0,2W . Loa c gan vao ngo ra cua mot mach khuech ai co au vao la ngo ra cua Channel-2 cua 8253-5 . Mach khuech ai cua loa c ieu khien bi hai bit thap cua port 061h : Neu ca hai bit thap cua port 061h eu b xoa thanh 0 th mach khuech ai khong lam viec : loa se im . Neu ca hai bit thap cua port 061h eu c dng len th mach khuech ai se lam viec : loa se dao ong vi tn hieu cua ngo ra Channel-2. Th du : Bat loa: in al,061h or al,00000011b out 061h,al Tat loa: in al,061h and al,11111100b out 061h,al 9.6NGUYEN LY TAO AM NHAC TREN IBM PC/XT/AT e may tnh chi c mot oan nhac, chung ta can phai tao ra cac note nhac va duy tr chung theo tng trng o rieng . e tao ra mot note nhac chung ta ch can a tan so tng ng cua note ay ra loa . Nh vay, ieu can thiet la chung ta xac nh c tan so cua tng note nhac trong cac cung bac (octave) quen thuoc. Tan so cua cac note thuoc octave 1 va octave 7 Octave 1 Octave 7 C = 32.70 C = 2093.00 C# = 34.65 C# = 2217.46 D = 36.71 D = 2349.32 D# = 38.89 D# = 2489.02 E = 41.20 E = 2637.02 F = 43.65 F = 2793.83 F# = 46.25 F# = 2959.96 G = 49 . G = 3135.96 G# = 51.91 G# = 3322.44 A = 55.00 A = 3520.00 A# = 58.27 A# = 3729.31 B = 61.74 B = 3951.07 Tan so cua mot note thuoc mot octave gap oi tan so cua note tng ng thuoc octave ngay trc no. Th du : Tan so cua note DO octave 5 se bang tan so cua note DO octave 6 chia 2 va bang tan so cua note DO octave 4 nhan 2 . 61

e tao ra count tng ng ta lay 1193180/tan so . 9.7MOT CHNG TRNH CHI NHAC Main proc near lea si,chuoi-nhac call Sound-on M1: cld lodsw or ax,ax jz M4 call Music or ah,ah jz M3 xchg al,ah xor ah,ah

; lo-byte = note, hi-byte = trng o

push es xor bx,bx mov es,bx add ax,word ptr es:[046Ch] M2: cmp ax,word ptr es:[046Ch] jne M2 pop es M3: jmp M1 M4: call Sound-off int 020h Main endp Sound-on proc near in al,61h or al,3 out 61h,al ret Sound-on endp Sound-off proc near in al,61h and al,0fch out 61h,al ret Sound-off endp DO equ 0 RE equ 2

; Bat loa ; bang cach cho bit 0 va bit 1 ; cong 61h bang 1

; Tat loa ; bang cach cho bit 0 va bit 1 ; cong 61h bang 0

; Gia tr cua note 62

MI equ 4 FA equ 5 SOL equ 7 LA equ 9 SI equ 11 O1 equ 010h O2 equ 020h O3 equ 030h O4 equ 040h O5 equ 050h O6 equ 060h O7 equ 070h SO1 equ 01Fh SO2 equ 02Fh SO3 equ 03Fh SO4 equ 04Fh SO5 equ 05Fh SO6 equ 06Fh SO7 equ 07Fh

; Gia tr cua octave

; Gia tr cua octave default

chuoi-nhac db -SO4,0,-SOL,4,-SOL,2,-LA,2,-SI-1,4,-SOL,4 db -MI+-O5,4,-RE+-O5,4,-SI-1,4,-SOL,4,-FA,4,-FA,2,-SOL,2 db -LA,4,-FA,4,-RE+-O5,4,-LA,4,-FA,4,-RE,4,-MI,4,-MI,2 db -FA,2,-SOL,4,-MI,4,-LA,4,-LA+-O3,4,-SI+-O3,4,-DO+1,4 db -RE,2,-DO,2,-RE,2 db -MI,2,-FA,2,-MI,2,-FA,2,-SOL,2,-LA,4,-FA,4,-MI,4,-RE,4 db -SO4,0,-SOL,4,-SOL,2,-LA,2,-SI-1,4,-SOL,4 db -MI+-O5,4,-RE+-O5,4,-SI-1,4,-SOL,4,-FA,4,-FA,2,-SOL,2 db -LA,4,-FA,4,-RE+-O5,4,-LA,4,-FA,4,-RE,4,-MI,4,-MI,2 db -FA,2,-SOL,4,-MI,4,-LA,4,-LA+-O3,4,-SI+-O3,4,-DO+1,4 db -RE,8 dw 0,0 MUSIC proc near ; AL = note parameter with structure as follow : ; high nibble = Octave value ( 1 - 7 ) ; low nibble = Note value ( 0 - 11 ) ; ( DO = 0, DO thang = 1 ....) push ax push bx push cx mov ah,al mov cl,4 shl al,cl shr al,cl shr ah,cl ; Bao toan tat ca cac thanh ghi c dung

; AH = low byte (note value) ; AH = high byte (Octave value) 63

cmp ah,7 ja Music-end ; Invalid value for octave cmp al,0Fh ; Set default octave jne Music-1 mov Current-octave,ah jmp Music-end Music-1: or ah,ah ; AH = 0 --> using default octave jnz Music-2 mov ah,Current-octave Music-2: cmp al,11 ja Music-end ; Invalid value for note xor bh,bh mov bl,al shl bx,1 ; BX = BX * 2 mov bx,word ptr M-table[bx] mov cl,ah ; BX = count cua note tng ng octave 1 dec cl shr bx,cl ; BX = BX / ( 2 luy tha CL ) mov al,10110110b ; Yeu cau nh mode 3 cho channel-2 out 043h,al ; ong thi nap gia tr mi cho SCR mov al,bl out 042h,al ; Load low byte mov al,bh out 042h,al ; Load high byte Music-end: pop cx pop bx pop ax ret Music endp Current-Octave db 0 M-Table dw 36488 ; DO dw 34435 ; DO thang / RE giang dw 32502 ; RE dw 30680 ; RE thang / MI giang dw 28960 ; MI dw 27335 ; FA dw 25798 ; FA thang / SOL giang dw 24350 ; SOL dw 22985 ; SOL thang / LA giang dw 21694 ; LA dw 20476 ; LA thang / SI giang dw 19326 ; SI Cac quy tac cua procedure MUSIC 64

MUSIC se thc hien mot note nhac theo nguyen tac mot note nhac c xac nh bi bat o (octave) va note trong bat o ay e co the thc hien mot note nhac,can phai xac nh tan so cua note nhac va suy ra gia tr cua count can phai gi ra channel-2 theo cong thc 1193180 n = ----------------f Theo cong thc tren, tan so cang thap th count cang ln . MUSIC co mot bang cac gia tr cua cac count tng ng vi cac note thuoc octave 1 . Thay v thc hien cong thc tren, MUSIC ch can c ch nh hay chi note th may tren bang . e chi mot note mot octave cao hn octave 1, MUSIC se xac nh gia tr cua count tng ng vi note trong octave 1, sau o suy ra gia tr can thiet theo nguyen tac : Count tng ng vi mot note trong mot octave se bang gia tr cua count tng ng vi note ay trong octave trc o . Nh vay count tng ng vi mot note thuoc octave n se bang count tng ng vi note ay trong octave 1 chia cho 2 luy tha (n-1) Va e chia mot gia tr n lan cho 2 ta ch can shift right n lan gia tr o. MUSIC c goi vi tham so trong AL vi quy tac : Nibble cao ( 4 bit cao ) mang gia tr octave (1-7) Nibble thap ( 4 bit thap ) mang gia tr note (0-11) Neu gia tr cua nibble thap la 0Fh th gia tr cua nibble cao se c lay lam gia tr cua octave mac nhien (default) Gia tr nay c at trong bien Current-octave Neu gia tr cua nibble cao la 0, note se c chi vi octave default Gia tr note _DO equ _RE equ _MI equ _FA equ _SOL equ _LA equ _SI equ Gia tr octave _01 equ 010h _02 equ 020h _03 equ 030h _04 equ 040h _05 equ 050h _06 equ 060h _07 equ 070h Gia tr octave default _S01 equ 01Fh _S02 equ 02Fh _S03 equ 03Fh _S04 equ 04Fh _S05 equ 05Fh _S06 equ 06Fh _S07 equ 07Fh

0 2 4 5 7 9 11

e xac nh mot octave,cho AL mot gia tr cua octave default ( -SO1 : octave 1, SO2 : octave 2 ...) Gia tr nay se c gan cho bien Current-octave AL = mot gia tr cua note,se chi note o vi octave default ( lay t Current-octave ) e chi mot note ngoai octave default ma khong nh lai Current-octave ta cong them gia tr octave vao gia tr note . ( Octave default khong b thay oi ) Th du : mov AL,-FA + -O5

65

CHNG 10 : VIDEO
Phan the hien hnh anh cua may vi tnh bao gom 2 phan : - Man hnh : monitor - Mach ieu khien : display adapter 10.1MONITOR Man hnh cua may vi tnh co cau tao giong nh mot tivi gia dung bnh thng Nhng monitor cua may vi tnh khong co bo phan bat song va giai ieu che tn hieu video cua cac ai truyen hnh.Mot so monitor hien nay co o phan giai cao hn cac tivi gia dung rat nhieu . Monitor nhan tn hieu ieu khien t mach ieu khien bao gom cac thong so : - Tn hieu mau (thay oi tuy theo cac loai monitor khac nhau) - o sang - Xung ong bo quet dong va quet manh 10.2DISPLAY ADAPTER Mach ieu khien man hnh la mot ba mach c gan them vao main board bang cach cam vao mot slot m rong. Trung tam cua ba mach la mot chip ieu khien co kha nang hoat ong vi nhieu mode khac nhau theo cac tham so c xac nh t chng trnh cua chung ta. Ba mach nay c trang b mot vung RAM e lu cha thong tin cua man hnh hien tai.Vung RAM nay c goi la video buffer.Video buffer la mot vung nh rieng cua display adapter nhng ong thi cung c CPU truy nhap nh mot phan thuoc ve memory cua mnh . Tren cac may IBM PC/XT/AT, mot vung a ch rong ln ( 128 KB ) c danh rieng cho video buffer bat au t A000:0000 en B000:FFFF . Thong qua video buffer chng trnh cua chung ta xac nh man hnh hien tai bang cach ghi vao o cac mo ta theo nhng quy nh rieng . Display adapter theo mot chu ky eu an se oc t au en cuoi video buffer va hien th cac thong tin ay thanh cac hnh anh tng ng tren man hnh. Cac hnh anh tren man hnh c tao thanh t tap hp cac iem sang vi o sang (am nhat) va sac o (mau sac) khac nhau . Trong mot so trng hp, cac iem sang ch the hien mot trong hai trang thai sang hoac toi . Mot man hnh c chia thanh nhieu dong, moi dong la tap hp cac iem lien tiep nhau theo th t t trai sang phai . Ke tiep iem cuoi cua mot dong la iem au cua dong ke tiep . Tng ng vi v tr cua cac iem tren man hnh la cac phan t thuoc video buffer, gia tr cua cac phan t nay se xac nh thuoc tnh (attribute) cua cac iem sang ay . Kch thc cua cac phan t thuoc video buffer thay oi theo so cac trang thai mot iem thuoc man hnh the hien c . Th du : e bieu dien hai trang thai sang va toi ch can mot bit e bieu dien 16 mau khac nhau can en 4 bit ( 24 = 16 ) Cac loai display adapter thong dung : - Monochrome Display Adapter (MDA) - Color Graphics Adapter (CGA) - Hercule Graphics Adapter (Hercule) - Enhanced Graphics Adapter (EGA) - Video Graphics Array adapter (VGA) 10.3O PHAN GIAI 66

So iem tren mot dong va so dong hien th cua mot hnh anh se quyet nh o net cua hnh anh ay . Cang nhieu iem, cang nhieu dong, hnh anh cang mn, cang ro net . o phan giai cua mot hnh anh c bieu th bang tch so cua so iem tren mot dong va so dong cua hnh anh o . Chat lng hnh anh theo tieu chuan tren tuy thuoc vao ca man hnh lan ba ieu khien . Song song vi o phan giai, so lng mau sac co the the hien c cung anh hng nhieu en chat lng cua hnh anh. 10.4MODE HIEN TH CUA DISPLAY CARD 10.4.1Graphic mode Theo nguyen ly neu tren, e tao ra bat c hnh anh nao, chng trnh cua chung ta phai mo ta tng iem vi ay u cac thuoc tnh cua chung: mau sac, do sang ... ieu kien lam viec nh vay cua display card c goi la graphic mode. e ghi nhan thong tin cua mot man hnh trong mode graphic, can phai dung en kha nhieu phan t nh . Vi mot so lng bo nh xac nh cua video buffer, ta co the chon cac khuynh hng sau : The hien mot hnh anh co o phan giai cao, vi cac iem anh ch co hai thuoc tnh : sang hoac khong sang . Theo phng phap nay, e mo ta mot iem anh ta ch can mot bit The hien hnh anh co o phan giai thap hn, nhng vi cac iem anh co nhieu thuoc tnh hn tng ng vi nhieu mau khac nhau . Theo phng phap nay ta can mot tap hp nhieu bit e mo ta mot iem anh. Th du : 16 KB RAM co the s dung cho 200x320 4 mau ( 2bit/iem ) 200x640 4 mau ( 1bit/iem ) Thong thng mot display adapter co kha nang lam viec trong nhieu graphic mode khac nhau, vi o phan giai va so mau hien th khac nhau. 10.4.2Text mode Trong qua trnh lam viec vi may tnh khong phai luc nao ta cung ve cac o th, cac bieu o cung cac hnh anh phc tap. Phan ln nhng g ta can the hien qua man hnh la cac chuoi nhac nh,cac cau tra li,cac menh lenh ... ma phan ln eu c tao thanh t mot tap hp cac ky hieu chuan th du nh bo ma ASCII . e ap ng nhu cau s dung tren tat ca cac display adapter eu co the lam viec trong mot mode ac biet : text mode . Trong text mode, thay v phai mo ta man hnh theo tng iem, chung ta ch can mo ta cac ky t c hien th tren o thong qua cac ma ASCII tng ng. Trong text mode, man hnh c quan niem nh la tap hp tng dong cac ky t lien tiep . Tng ng vi moi ky t la mot phan t thuoc video buffer . Moi phan t nay gom hai byte i lien nhau : - Byte th nhat la ma ASCII cua ky t - Byte th hai la thuoc tnh cua ky t Thc s,trong text mode video adapter a chia man hnh thanh nhieu o hnh ch nhat bang nhau.So lng cac iem trong mot o c xac nh bang tch so cac iem tren mot hang ngang vi cac iem tren mot hang doc.Tch so nay goi la kch c cua ky t (character size) Th du : 8x8, 8x14, 9x14, 9x16 Moi ky t c the hien bang cach xac nh cac thuoc tnh khac nhau cho cac iem thuoc o ch nhat ay . Se co hai thuoc tnh cho cac iem trong mot o : Thuoc tnh th nhat goi la thuoc tnh nen, danh cho cac iem khong ve nen hnh anh cua ky t. Thuoc tnh th hai goi la thuoc tnh ky t, danh cho cac iem ve nen hnh anh cua ky t. 67

Ca hai thuoc tnh tren c mo ta trong cung mot byte : o la byte thuoc tnh . Cau truc mot byte thuoc tnh nh sau : 7 fgB 6 5 4 back ground 3 brt 2 1 0 fore ground foreground attribute (ky t) Intensity: 1=foreground is bright background attribute ( nen ) Blink: 1=foreground flashes Text-attribute = background + foreground*16 (cong them 128 neu nhap nhay) Mo ta chi tiet cac iem tao nen hnh anh cac ky t c lu trong mot chip ROM gan tren video card . Vi moi ma ASCII, video adapter se xem mo ta tng ng trong ROM va se hien th chung mot cach t ong vi mau sac quy nh bi byte thuoc tnh i kem . Moi man hnh trong text mode se can en max-row*max-col*2 byte . Vi max-row va max-col la kch thc cua man hnh trong text mode . Display adapter chia video buffer thanh nhieu trang, moi trang cha thong tin cua mot man hnh . Tai moi thi iem xac nh,display adapter se hien th thong tin cua mot trang goi la trang hien hanh . Viec xac nh trang hien hanh c thc hien bang cach ch nh iem au trang cho display adapter. Con tro (cursor) la ac iem rieng cua text mode . Con tro c tao thanh bang cach cho tat ca cac iem tren mot so dong lien tiep cua mot o ch nhat (tng ng vi mot ky t) thuoc tnh foregound trong tng khoang thi gian xen ke . Ket qua la se xuat hien mot hnh ch nhat nhap nhay - Dong au tien t tren xuong ( anh so t 0 ) goi la start line - Dong cuoi cung goi la end line oi vi text mode,co hai loai display adapter chnh: Monochrome va COLOR 10.4.2.1Monochrome adapter Cho phep hien th cac ky t tren man hnh Monochrome (n sac) vi cac ac iem : - Adapter s dung : MDA & Hercule - Video buffer size : 4 Kb - Screen size : 25x80 (25 dong, 80 cot) 1 trang - Character size : 9x14 - Video buffer bat au tai a ch 0B000:0000 Ky t co the co cac thuoc tnh : Attribute code 01 07 09 0F 70 81 87 89 8F

Underline Normal (White on Black) Bright Underline Bright Reverse Blinking Underline Blinking Normal Blinking Bright Underline Blinking Reverse 68

oi vi Monochrome adapter chuan, video buffer co kch thc la 4 Kb do o ch u lu cha 1 trang man hnh ( 25x80x2 = 4000 ). 10.4.2.2Color adapter Cho phep hien th cac ky t tren man hnh Color vi cac ac iem : - Adapter s dung : CGA, EGA & VGA - Video buffer size : 16 Kb - Screen size : 25x40 (25 dong, 40 cot) 8 trang 25x80 (25 dong, 80 cot) 4 trang - Character size : 8x8 - Video buffer bat au tai a ch 0B800:0000 Cho phep hien th 8 mau cho thuoc tnh nen ( Bang 1 ) va 16 mau cho thuoc tnh ky t ( Bang 1 & 2 ) (8 mau cua bang 1 phoi hp vi bit o sang bang 1) Color code 0 1 2 3 4 5 6 7 Bang 1 10.5INTERRUPT 010H ROM BIOS cua cac may vi tnh IBM PC cung cap cho chung ta mot so chc nang tien dung e ieu khien display adapter nh thay oi mode, nh v tr con tro, in cac ky t... Di ay la mot so cac chc nang thong dung cho tat ca cac loai man hnh 10.5.1Chon mode lam viec : Input : AH = 00 AL = mode Output : None Tham so cua chc nang 0 AL 0 1 2 3 4 5 6 7 0Dh Type text text text text graphic graphic graphic text graphic Format 40x25 40x25 80x25 80x25 320x200 320x200 640x200 80x25 320x200 Colors 16/8 16/8 16/8 16/8 4 4 2 3 16 Adapter CGA,EGA CGA,EGA CGA,EGA CGA,EGA CGA,EGA CGA,EGA CGA,EGA MDA,EGA EGA Addr B800 B800 B800 B800 B800 B800 B800 B000 A000 Monitor Composite Comp,RGB,Enhanced Composite Comp,RGB,Enhanced Comp,RGB,Enhanced Composite Comp,RGB,Enhanced Monochrome RGB,Enhanced 69 Color code 8 9 10 11 12 13 14 15 Bang 2 Intensity-bit=1 Gray Light Blue Light Green Light Cyan Light Magenta Light Red Yellow Light White

Black Blue Green Cyan Magenta Red Brown White

0Eh 0Fh 10h

graphic graphic graphic

640x200 640x350 640x350

16 3 4 or 16

EGA EGA EGA

A000 A000 A000

RGB,Enhanced Enhanced,Monochrome Enhanced

10.5.2nh hnh dang con tro Input : AH = 01 CH = start line CL = end line Output : None Neu CH = 020h --> con tro se khong xuat hien tren man hnh . 10.5.3nh v tr con tro Input : AH = 02 BH = trang hien hanh DH,DL = row,col (row,col tnh t 0 tr i) Output : None 10.5.4oc v tr con tro Input : AH = 03 BH = trang hien hanh Output : DH,DL = row,col CH,CL = start,end line 10.5.5Chon trang hien th Input : AH = 05 AL = trang Output : None 10.5.6 Scroll window up Scroll window down Input : AH = 06 Input : AH = 07 CH,CL = toa o th 1 CH,CL = toa o th 1 DH,DL = toa o th 2 DH,DL = toa o th 2 AL = so dong troi len AL = so dong troi xuong BH = thuoc tnh BH = thuoc tnh Output : None Toa o th 1 : row,col cua goc trai tren Toa o th 2 : row,col cua goc phai di Tac vu nay se tnh tien cac dong ky t trong ca so len hoac xuong, cac dong xuat hien do viec troi len hay xuong se c ien kn bang ma 020h vi thuoc tnh trong BH Neu AL = 0, toan bo ca so (window) se c ien kn bang ma 020h vi thuoc tnh trong BH . Trng hp nay thng c dung e xoa va nh lai thuoc tnh mau cho mot phan hoac toan bo man hnh. 10.5.7oc ky t tai v tr con tro Input : AH = 08 BH = trang can oc 70

Output : AL = ky t AH = thuoc tnh Mac du ch co mot con tro duy nhat ve mat vat ly,moi trang man hnh co mot cap gia tr e ghi nh v tr con tro cua rieng tng trang man hnh . Moi khi co s thay oi trang man hnh, con tro vat ly se c cap nhat v tr ngay lap tc theo gia tr tng ng. 10.5.8In ky t tai v tr con tro Input : AH = 09 BH = trang can ghi AL = ky t CX = so lan lap lai BL = thuoc tnh Chc nang nay in mot hay nhieu ky t giong nhau (ma ASCII trong AL) lien tiep tren man hnh . Ky t au tien c in tai a ch hien thi cua con tro . 10.5.9oc mode hien tai Input : AH = 0F Output : AL = current mode AH = so ky t tren mot hang BH = trang hien thi 10.5.10In mot cham (pixel) trong graphics mode Input : AH = 0C BH = Video page CX = hang DX = cot AL = color value (neu bit 7 = 1 --> XOR vi iem hien tai) 10.5.11oc mot cham (pixel) trong graphics mode Input : AH = 0D BH = Video page CX = hang DX = cot Output : AL = color value

10.6BIOS DATA OF INTERRUPT 010H Cac thong so ve man hnh hien thi c BIOS lu gi trong mot vung nh rieng t a ch 0:0449 en 0:0466 vi cau truc nh sau : Address Size Content 0:0449 1 Mode hien thi . 0:044A 2 Be rong cua man hnh ( tnh theo so ky t tren mot hang ) 0:044C 2 Kch thc cua video buffer 0:044E 2 offset cua trang man hnh hien tai 0:0450 10H 8 cap v tr cua con tro tng ng vi 8 trang man hnh 71

0:0460 0:0462 0:0463 0:0465 0:0466

2 1 2 1 1

moi cap v tr gom byte au cho cot,byte ke tiep cho hang Kch thc con tro (end-line va begin-line) Man hnh hien thi ( page number = 0 ... 7 ) port address for 6845 video controller chip current value of 6845 video control register CRT-MODE current value of 6845 video control register CRT-PALETTE

10.7MOT SO TH DU Gia s chung ta ch s dung trang 0 10.7.1Xac nh video buffer Test-V-Seg proc near mov ah,0Fh int 010h mov V-seg,0B800h cmp al,7 jne TVS-1 mov V-seg,0B000h TVS-1: ret Test-V-Seg endp V-seg dw 0 10.7.2In ra man hnh trc tiep WSCR proc near ; dh = row ; dl = col ; ah = Color ; DS:SI = a ch buffer can in ( ket thuc bang ma 0 ) cld push di push si push es mov bx,V-seg ; Bien cha Video segment mov es,bx push ax mov ah,dh mov al,80 mul ah mov di,ax xor dh,dh add di,dx shl di,1 ; DI = (row*80+col)*2 pop ax ; AH = Color WSCR-1: lodsb ; Lay ky t vao al 72

or al,al jz WSCR-2 ; neu la ma 0 th ket thuc stosw ; a ky t va thuoc tnh ra video jmp WSCR-1 ; buffer WSCR-2: pop es pop si pop di ret WSCR endp

73

CHNG 11 : VIDEO CONTROLLER


Cac Display Adapter ban au ( MDA va CGA ) cua IBM PC/XT/AT da tren nguyen ly cua chip Motorolla 6845 . Cac Display Adapter ke tiep nh EGA,MCGA,VGA... tuy hoat ong tren nguyen ly khac, nhng cac adapter nay van duy tr phan ln cac tnh chat cua chip 6845 . Do o, trong text mode, cac ieu khien cua 6845 eu tng thch vi tat ca cac Display Adapter tren IBM PC/XT/AT. 11.1COLOR GRAPHICS ADAPTER 11.1.1Cau truc video buffer 11.1.1.1Trong text mode Xem chng 10 11.1.1.2Trong graphics mode Video buffer co kch thc 16 KB, cho phep the hien : - o phan giai cao 640x200 vi mot mau the hien . Moi iem sang (pixel) can mot bit thong tin ==> mot dong can 640/8 = 80 byte - o phan giai trung bnh 320x200 vi 4 mau the hien . Moi iem sang can hai bit thong tin.==>mot dong can 320*2/8 = 80 byte - Thong tin ve mot dong c ghi lien tiep nhau trong mot day 80 byte ( 640 bit ) theo th t the hien tren man hnh ( xem hnh minh hoa ) - Video buffer ( 16 KB ) c chia thanh 2 trang nho lien tiep nhau anh so t 0-1, moi trang co kch thc 1000h byte. Thong tin cua cac dong c lu trong cac trang theo quy tac: cac dong chan trong trang 0, cac dong le trong trang 1 Tc la : - Trang 0 cha thong tin cac dong 0,2,4,6,8,10... - Trang 1 cha thong tin cac dong 1,3,5,7,9,11... Minh hoa ve cach lu cha thong tin trong video buffer (1 bit/pixel) Byte th 1 Byte th 2 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F (2 bit/pixel) 7 1 00 6 0 Byte th 1 5 4 3 2 0 1 1 1 01 02 1 0 03 0 0 7 0 6 1 04 Byte th 2 5 4 3 2 0 1 1 0 05 06 1 0 07 0 1 7 1

(1): So th t cua cac byte trong day gia tr bieu dien cho mot dong (2): Th t cac bit trong byte va v tr vat ly trong chuoi gia tr (3): Gia tr cua cac bit (4): Th t cac iem sang tng ng tren dong .

11.1.2CGA I/O port 74

3D4 3D5 3D8 3D9 3DA 3DB 3DC Mode register

Output I/O Output Output Input Output Output Color register

Address Register (Index register) Data register (18 internal registers) Mode register Color register Status register Clear Light Pen Latch Set Light Pen Latch Status register B0 = Horizontal Sync | B1 = Light Pen Trigd| B2 = Pen Switch off | B3 = Vertical Sync | B4 = Not used | B5 = Not used | B6 = Not used | B7 = Not used |

B0 = 80x25 text B1 = 320x200 graphics B2 = B&W mode B3 = Enable video B4 = 640x200 graphics B5 = Blinking B6 = Not used B7 = Not used

B0 = Blue B1 = Green B2 = Red B3 = Intensity B4 = Alt Back colors B5 = Palette B6 = Not used B7 = Not used

11.1.3Mode register programming Video mode 40 x 25 Alpha B&W 40 x 25 Alpha Color 80 x 25 Alpha B&W 80 x 25 Alpha Color 320 x 200 Graphics B&W 320 x 200 Graphics Color 640 x 200 Graphics B&W 11.1.4Color register programming : Cac bit 0-3 (tao thanh 16 mau) cua Color register xac nh : - Trong text mode : mau cua khung vien xung quanh man hnh (border) - Trong graphics mode : mau nen (background color), dung chon mau hien th cho 640x200 graphics mode. Bit 4 : khi bang 1 se lam mau nen trong text mode c xac nh bi cac bit 4-7 ( bao gom ca bit 7 ) . Ket qua la mau nen co the co 16 mau khac nhau, va thuoc tnh nhap nhay (Blinking) khong con na Bit 5 : Chon bang mau (color palette) cho 320 x 200 color graphics mode Mode register value 2Ch 00101100 28h 00101000 2Dh 00101101 29h 00101001 0Eh 00001110 0Ah 00001010 1Eh 00011110

Bit 5 = 1 Pixel value 00 Color Background color Pixel value 00

Bit 5 = 0 Color Background color 75

01 10 11

Cyan Magenta White

01 10 11

Green Red Brown

11.1.5Using Status register information : Horizontal Sync : xung ong bo cho tn hieu quet dong cua man hnh Vertical Sync : xung ong bo cho tn hieu quet manh cua man hnh Trong 1 giay co khoang 50-70 (tuy loai man hnh) manh c the hien. Moi manh lai co : - 200 dong (CGA) - 348 dong (Hercules graphics) - 350 dong (EGA,Hercules text mode) - 480,600,768 .... dong (VGA) Khi bit tng ng vi Horizontal hay Vertical Sync bang 1, man hnh ang trong tnh trang quet ngc (retrace) . Viec truy nhap video buffer cung luc vi Display adapter oi khi tao nen tnh trang xuat hien cac om sang nhap nhay (snow blinking) trong text mode . e tranh tnh trang tren, tot nhat la ng truy nhap video buffer ong thi vi display adapter . o la cac thi iem man hnh ang trong tnh trang quet ngc. 11.1.6Internal registers Address Register Register type I/O register Number Type 00 R0 Horizontal Total W 01 R1 Horizontal Display W 02 R2 Horizontal Sync Position W 03 R3 Horizontal Sync Width W 04 R4 Vertical Total W 05 R5 Vertical Total Adjust W 06 R6 Vertical Displayed W 07 R7 Vertical Sync Position W 08 R8 nterlace Mode W 09 R9 Maximum Scan Line Address W 0A R10 Cursor Start Scan Line W 0B R11 Cursor End Scan Line W 0C R12 Start address (Hi byte) W 0D R13 Start address (Lo byte) W 0E R14 Cursor address (Hi byte) R/W 0F R15 Cursor address (Lo byte) R/W 10 R16 Light pen (Hi byte) R 11 R17 Light pen (Lo byte) R 40x25 Text| 38 28 2D 0A 1F 06 19 1C 02 07 06 07 00 00 XX XX XX XX 80x25 Text| 71 50 5A 0A 1F 06 19 1C 02 07 06 07 00 00 XX XX XX XX Graph| mode| 38 28 2D 0A 7F 06 64 70 02 01 06 07 00 00 XX XX XX | XX |

Start address la v tr cua trang man hnh hien tai (tnh t au video buffer) . C ly nay c o bang word . Thc te o chnh la so lng cac phan t t au buffer en au trang hien tai . Th du : Tang gia tr cua start address len 80 th man hnh se co ve nh troi len mot dong, giam gia tr cua start address 80 th man hnh co ve nh troi xuong mot dong . Nhng ket qua cua hai lan troi len 76

va xuong ay la man hnh khong he b thay oi so vi trc khi troi . Thc chat ta ch thay oi iem bat au cua trang man hnh ma thoi . Chu y : start address = begin offset/2 Cursor address la v tr cua con tro trong trang man hnh hien tai. v tr nay tnh theo so ky t t au trang hien tai en v tr cua con tro Th du : cursor address = 130 trong text mode 80x25 tng ng vi dong 1 cot 50 . e oc (lay gia tr) hoac ghi (gan gia tr) mot thanh ghi ta thc hien : - a ra Index register (Bang ch th OUT) th t cua thanh ghi - oc hoac ghi t Data register Th du : oc v tr con tro mov dx,03D4h ; DX = port of Index register mov al,14 ; Chon R14 out dx,al inc dx ; DX = port of Data register in al,dx mov ah,al ; AH = Hi byte dec dx ; DX = port of Index register mov al,15 ; Chon R15 out dx,al inc dx ; DX = port of Data register in al,dx ; AL = Lo byte ; AX = currsor address Th du : at v tr con tro (BX = v tr con tro) mov dx,03D4h ; DX = port of Index register mov al,14 ; Chon R14 mov ah,bh ; AH = Hi byte out dx,ax mov al,15 ; Chon R15 mov ah,bl ; AH = Lo byte out dx,ax 11.2HERCULE GRAPHICS ADAPTER ay la mot display adapter c thiet ke e khac phuc khuyet iem cua MDA. Hearcule Graphics Adapter cho phep the hien text mode hoan toan tng thch vi MDA, ong thi cung cap kha nang hien th graphics tren man hnh monochrome . Vi video buffer 64KB,Hercule Graphics Adapter cho phep the hien hai trang man hnh o hoa vi o phan giai cua moi trang la 720x348. Hercule Graphics Adapter khong do IBM thiet ke, do o trong cac thu tuc chuan cua ROM BIOS khong co cac chc nang danh rieng cho Hercule Graphics mode . Cac phan mem co khai thac en kha nang o th tren Hercule Graphics Adapter eu phai ieu khien trc tiep thong qua cac port cua Hercule card. 11.2.1Cau truc video buffer 11.2.1.1Trong text mode Giong nh MDA, nhng cho phep s dung hai trang man hnh : Trang 0 : bat au t B0000h Trang 1 : bat au t B8000h 77

Moi trang chiem 4 KB, ghi nh 2000 phan t lien tiep nhau, moi phan t gom hai byte, byte au la ASCII code, byte ke la attrib . Lu y : trong text mode, vi cac chc nang cua BIOS danh cho MDA, ch co the hien th tren trang 0. 11.2.1.2Trong graphics mode Cho phep s dung hai trang man hnh o hoa : Trang 0 : t B0000h - B7FFFh ( 32 KB ) Trang 1 : t B8000h - BFFFFh ( 32 KB ) Moi trang chiem 32 KB,lu cha thong tin ve 720x348 iem sang (pixel) vi cac quy nh : Moi dong tren man hnh c tao thanh t 720 iem sang Man hnh co tong cong 348 dong Moi iem sang ch co mot trong hai thuoc tnh : sang hoac toi > moi iem c the hien bi mot bit. Neu bit = 1 -> sang, bit = 0 -> toi Thong tin ve mot dong c ghi lien tiep nhau trong mot day 90 byte ( 720 bit ) theo th t the hien tren man hnh : Bit th 7 ( bit cao nhat ) cua byte au day bieu dien cho iem sang th nhat cua dong Bit th 6 cua byte au day bieu dien cho iem sang th hai cua dong . ... Bit th 7 ( bit cao nhat ) cua byte th hai trong day bieu dien cho iem sang th chn cua dong . Moi trang man hnh ( 32 KB ) c chia thanh 4 trang nho lien tiep nhau anh so t 0-3, moi trang co kch thc 2000h byte. Thong tin cua cac dong c lu trong cac trang theo quy tac : Cac dong co cung so d khi chia so th t dong cho 4 se trong cung mot trang.So d cung chnh la so th t cua buffer Tc la : Trang 0 cha thong tin cac dong 0,4,8,12,16... Trang 1 cha thong tin cac dong 1,5,9,13,17... Trang 2 cha thong tin cac dong 2,6,10,14,18... Trang 3 cha thong tin cac dong 3,7,11,15,19... 11.2.2Hercule registers Hercule Graphics Adapter cung co cac register giong nh Color Graphics Adapter nhng co mot so khac biet nh sau : Khong co Color register Cac port c nh v tai 3Bx thay v 3Dx Mode register c quy nh : - Bit 1 = 0 --> Text mode - Bit 1 = 1 --> Graphics mode ( port 03BF bit 0 = 1 ) - Bit 3 : Video Enable - Bit 5 : Blink Enable - Bit 7 : Page Select ( port 03BF bit 1 = 1 ) ( Trang 0 bat au t B000:0000 ) ( Trang 1 bat au t B800:0000 ) Bit 0,2,4,6 not used S dung port 03BF e xac nh cau hnh lam viec : Bit 0 = 1 --> cho phep chuyen sang graphics mode (Thong qua bit 1 cua mode register) Bit 1 = 1 --> cho phep chon trang man hnh 78

11.2.1Hercule parameters AddressRegisterRegister typeI/O |80x25|Graph| registerNumberType| Text| mode| |----------|----------|----------------------------|-----|-----|-----00R0Horizontal TotalW6135 | 01R1Horizontal DisplayW502D | 02R2Horizontal Sync PositionW522E | 03R3Horizontal Sync WidthW0F07 | 04R4Vertical TotalW195B | 05R5Vertical Total AdjustW0602 | 06R6Vertical DisplayedW1957 | 07R7Vertical Sync PositionW1957 | 08R8Interlace ModeW0202 | 09R9Maximum Scan Line AddressW0D03 | 0AR10Cursor Start Scan LineW0B00 | 0BR11Cursor End Scan LineW0C00 | 0CR12Start address (Hi byte)W0000 | 0DR13Start address (Lo byte)W0000 | 0ER14Cursor address (Hi byte)R/WXXXX | 0FR15Cursor address (Lo byte)R/WXXXX | 10R16Light pen (Hi byte)RXXXX | 11R17Light pen (Lo byte)RXXXX | ----------------------------------------------------------------XX : gia tr tuy chon 11.2.2Th du : hercule card sang graphics mode Graph-init proc near lea bx,graph-parm mov dx,03B4h ; Index register port mov cx,0Fh xor al,al GI1: mov ah,byte ptr cs:[bx] ; AH = Register value out dx,ax ; AL = Register Number inc bx inc al ; Tang Register number loop GI1 mov dx,03BFh ; Configuration port mov al,3 ; Select all out dx,al mov dx,03B8h ; Set mode & page mov al,10001010b ; Chon trang 1 (0B800:0000) out dx,al ret Graph-init endp Graph-parm db 035h,02Dh,02Eh,007h,05Bh,002h,057h,057h,002h,003h db 000h,000h,000h,000h,000h,000h 79

CHNG 12 : CAC KENH GIAO TIEP CHUAN


Tren IBM PC, co mot so cac kenh lien lac chuan cho phep trao oi d lieu gia may tnh va cac thiet b khac . Cac kenh lien lac nay c chia thanh hai loai chnh : Kenh lien lac noi tiep (serial) : a dung Kenh lien lac song song (parallel) : thng dung cho may in Cac kenh lien lac nay thng c goi la cac I/O port cua IBM PC . Lu y rang khai niem port chung ta a dung trong cac chng trc la e xac nh cac a ch giao tiep gia CPU va cac thanh phan khac trong computer . Trong khi o,serial ports hay parallel ports ch la mot cach goi cho cac kenh lien lac gia computer va cac thiet b ben ngoai may tnh. Tai lieu nay tam dung ten goi cac ngo ra e ch cac kenh lien lac ay. 12.1CAC NGO RA NOI TIEP (SERIAL PORTS) Da tren chuan truyen thong RS-232, cac serial port cua IBM PC cho phep gi va nhan so lieu theo nguyen tac tng chuoi cac bit noi tiep nhau.Theo o, moi byte d lieu se c chuyen thanh t 5-8 bit cong vi mot so bit anh dau iem au,iem cuoi,kiem tra ... thanh mot day cac tn hieu noi tiep nhau phat i tren mot ng truyen duy nhat. Dang thc truyen cua mot byte d lieu (8 bit) D0 D1 D2 D3 D4 D5 D6 D7 ------- ---------------------------------------|Start bit|||||Parity bit|Stop bit| D0-D7 : cac bit cua byte c gi i . Mach ieu khien se t ong tao ra start bit,parity bit va stop bit trong chuoi d lieu c gi i.Khi nhan,cac bit phu ay se t ong c loai bo. Cac ngo ra noi tiep cua IBM PC thng c goi la cac cong COM va c anh so t 1 en 4 . Ngoai ng truyen d lieu (DATA OUT va DATA IN), mach ieu khien cac ngo ra noi tiep con co mot so cac mach tn hieu chuan dung giao tiep vi cac modem.Cac ng tn hieu cua ngo ra noi tiep c noi vao D-Shell connector 9 pin hoac 25 pin . | Full nameIDDirection9 pin25 pin | |--------------------------|-----|-------------|---------|---------1. Carrier DetectDCDIN18 | 2. Receive Data| IN23 | 3. Transmit Data| OUT32 | 4. Data Terminal ReadyDTROUT420 | 5. Signal Ground|5| 6. Data Set ReadyDSRIN66 | 7. Request To SendRTSOUT74 | 8. Clear To SendCTSIN85 | 9. Ring IndicatorRIIN922 | IN va OUT c xet theo chieu d lieu chuyen i hay nhan ve t computer

12.1.1Asynchronous Adapter 80

ieu khien ngo ra noi tiep tren IBM PC la Asynchronous Adapter. Vi moi cong COM, co mot loat cac register va cac port tng ng cua Adapter. COM 1 co base port la 3F8h va s dung IRQ 4 COM 2 co base port la 2F8h va s dung IRQ 3 Tham so cho cac port tng ng vi COM 1 nh sau : Port 3F8H : When DLAB=1 Write divisor latch low byte | Baud110150300600200240048009600 | |---------|------|-----|-----|-----|-----|------|------|------| Divisor104076838419296482412 | When DLAB=0 Write transmitter holding register Read receiver buffer register Port 3F9H : When DLAB=1 Write divisor latch high byte When DLAB=0 Write interrupt enable register [7|6|5|4|3|2|1|0] |0 0 0 0||| U----UUUUE bit || O 0: 1=enable an interrupt when recd data is available |O 1: 1=enable interrupt when transmit buffer is empty | O 2: 1=enable int on recr line status (error or break) O 3: 1=enable int on modem status (CTS,DSR,RI,RLSD) Port 3FAh : Read interrupt identification register.When an interrupt occurs, read this register to find what caused it. [7|6|5|4|3|2|1|0] |0 0 0 0 0|| U-------UE OOE O 1=no interrupt pending O 00=receiver line status interrupt. Occurs upon: overrun, parity, or framing error, or break Reset by reading line status (port 3fdH) 01=received data available Reset by reading receiver buffer (port 3f8H) 10=transmitter buffer empty Reset by writing transmitter buffer (port 3f8H) 11=modem status. Occurs upon: Clear To Send, Data Set Ready, Ring Ind, or Recd Line Sig Detect. Reset by reading modem status (port 3feH). Port 3FBh : Read/Write line control register [7|6|5|4|3|2|1|0] 81

|| |par|s|len| UUUUUE bit || OOEOO 0-1: word length: 00=5, 01=6, 10=7, 11=8 ||O 2: stop bits: 0=1,1=2 || O 3-4: parity: x0=None, 01=Odd, 11=Even |O 5: stuck parity (not used by BIOS) | O 6: enable break control. 1=start sending 0s (spaces) O 7: DLAB (Divisor Latch Access Bit) Determines mode of ports 3f8H and 3f9H. 1=set baud rate, 0=normal Port 3FCh : Write modem control register [7|6|5|4|3|2|1|0] |0 0 0||| | U---UUUUUE bit ||O 0: 1=activate -DTR || O 1: 1=activate -RTS |O 2: 1=activate -OUT1 | O 3: 1=activate -OUT2 O 4: 1=activate loopback for diagnostic testing Port 3FDh : Read line status register [7|6|5|4|3|2|1|0] |0||||Note: bits 1-4 cause an interrupt if enabled (3f9H) U-UUUUUUUE bit |||O 0: 1=data ready (DR). Reset by reading recvr buffer ||| O 1: 1=overrun error (OE). Previous character is lost ||O 2: 1=parity error (PE). Reset by reading line status || O 3: 1=framing error (FE). Bad stop bit in character |O 4: 1=break indicated (BI). Sustained space received | O 5: 1=transmitter holding register empty. OK to send O 6: 1=transmitter empty. No data being processed. Port 3FEh : Read modem status register [7|6|5|4|3|2|1|0] ||||| Note: bits 0-3 cause an interrupt if enabled (3f9H) UUUUUUUUUE bit |||| O 0: 1=Delta Clear To Send (DCTS) has changed state |||O 1: 1=Delta Data Set Ready (DDSR) has changed state ||| O 2: 1=Trailing Edge Ring Indicator (TERI) is active ||O 3: 1=Delta Data Carrier Detect (DDCD) has changed || O 4: 1=Clear To Send (CTS) is active |O 5: 1=Data Set Ready (DSR) is active | O 6: 1=Ring Indicator (RI) is active O 7: 1=Data Carrier Detect (DCD) is active 12.1.2Interrupt 14

82

Trong qua trnh POST, BIOS kiem tra cac base port 3F8h va 2F8h, a ch cua cac port co ap ng se c ghi vao cac word bat au t a ch 00:400. Co toi a 4 word tng ng vi 4 base port c BIOS lien he di ten goi COM1-COM4.Ch hai word au c BIOS khi tao (tng ng vi COM1 va COM2). Hai word cuoi (tng ng vi COM3 va COM4) danh rieng cho cac cau hnh khac cua ngo ra noi tiep, ngi s dung phai t xac nh cac gia tr cho hai word nay. BIOS cung cap cho ngi s dung cac phng tien truy nhap en cac ngo ra noi tiep mot cach n gian va de dang thong qua cac chc nang cua interrupt 14. 12.1.2.1Khi tao thong so cho COM port Input : AH = 0 DX = so hieu cua port AL = Thong so khi tao: 7--6--5--4--3--2--1--0-| baud rate |parity |stp|length | -----------------U-------OOE OOEOO word length | O stop bits O parity code O baud rate Word length : 10 = 7 bits ; 11 = 8 bits Stop bits : 0 = 1 bit ; 1 = 2 bits Parity : x0 = none ; 01 = odd (chan) ; 11 = even (le) | Baud rate110150300600 |1200240048009600 | |-------------|-----|-----|-----|-----|-----|------|------|------|Value setting| 000001010011100101110111 | Output: AH = byte tnh trang cua port ( Xem func 03 ) 12.1.2.2Gi mot ky t ra COM port Input : AH = 1 DX = so hieu cua port AL = ky t gi ra COM port Output: AL khong oi neu bit 7 cua AH = 1 --> co loi AH (bits 6-0) = byte tnh trang cua port (Xem func 3) 12.1.2.3Nhan mot ky t t COM port Input : AH = 2 DX = so hieu cua port Output: AL = ky t nhan t COM port neu AH khac 0 --> co loi 12.1.2.4Lay tnh trang cua COM port Input : DX = so hieu cua port Output: AH = COM status AL = modem status ------------------------------ ------------------------------------bit 7: timeout bit 7: received line detect signal bit 6: trans shift reg empty bit 6: ring indicator bit 5: trans holding reg empty bit 5: data set ready bit 4: break detect bit 4: clear to send 83

bit 3: framing error bit 3: delta recv line signal detect bit 2: parity error bit 2: trailing edge ring detector bit 1: overrun error bit 1: delta data set ready bit 0: data ready status bit 0: delta clear to send 12.2CAC NGO RA SONG SONG (PARALLEL PORTS) Danh rieng cho cac may in song song, con c goi la cac printer port . Ngo ra cua parallel ports la D-Shell connector 25 pin | Full nameDirection | |--------------------------|-------------1. StrobeOUT | 2. Data bit 0OUT | 3. Data bit 1OUT | 4. Data bit 2OUT | 5. Data bit 3OUT | 6. Data bit 4OUT | 7. Data bit 5OUT | 8. Data bit 6OUT | 9. Data bit 7OUT | 10. ACKIN | 11. BusyIN | 12. PEIN | 13. SLCTIN | 14. AUTO FEED XTOUT | 15. ErrorIN | 16. InitOUT | 17. SLCT INOUT | 18-25 Ground| Thong tin c chuyen en may in theo 8 ng data song song,moi lan chuyen c 1 byte . Qua trnh chuyen thong tin c thc hien nh sau : at data byte vao buffer em at tn hieu Strobe len mc cao bao hieu cac ng data a san sang. Ch may in oc xong data th at tn hieu Strobe ve mc thap. ( toi thieu 0.5 micro giay oi vi cac may in kim EPSON ) 12.2.1Parallel Printer Adapters Tren IBM PC cac cong may in song song co cac base port nh sau : - 3BCh : Printer port cua Monochrome Display Adapter - 378h : Parallel Printer Adapter #1 - 278h : Parallel Printer Adapter #2 Tham so cho cac port tng ng vi base port 378h nh sau: Port 378H Printer Data Latch. Write: send byte to printer Read : fetch last byte sent Port 37Ah 84

Read/Write: Printer Controls [7|6|5|4|3|2|1|0] |0 0 0||| | U---UUUUUE bit ||O> 0: +Strobe (pin 1) 1 when sending byte || O> 1: +AUTO LineFeed (pin 14) 1 causes LF after CR | O> 2: -INIT (pin 16) 0 resets the printer O> 3: +SLCT IN (pin 17) 1 selects the printer O> 4: +IRQ Enable (hdwr INT when -ACK goes false) LPT1>IRQ 7 (INT 0fH) LPT2>IRQ 5 (INT 0dH) Port 379h Read-only: Printer Status [7|6|5|4|3|2|1|0] ||| |0 0 0| UUUUUU---E bit ||O> 3: -ERROR (pin 15) 0=printer signals an error || O> 4: +SLCT (pin 13) 1=printer is selected | O> 5: +PE (pin 12) 1=out of paper O> 6: -ACK (pin 10) 0=ready for next character O > 7: -BUSY (pin 11) 0=busy or offline or error 12.2.2Interrupt 17 Trong qua trnh POST, BIOS se kiem tra cac port 3BCh,378h,278h .a ch cua cac port co ap ng se c ghi vao cac word bat au t a ch 00:400. Co toi a 4 word tng ng vi 4 base port c BIOS lien he di ten goi LPT1-LPT4. BIOS cung cap cho ngi s dung cac phng tien truy nhap en cac cong may in song song mot cach n gian va de dang thong qua cac chc nang cua interrupt 17.

85

CHNG 13 : DISK I/O


13.1KHAI NIEM Phng tien lu gi thong tin a t gom cac phan chnh nh sau: Cac mat a tron, ong truc c phu mot lp vat lieu t tnh. Tng ng vi moi mat a la mot au t oc/ghi. Cac au oc ghi c gan vao mot bo phan ieu khien chung cho phep chung di chuyen t mep ngoai vao tam (va ngc lai) cua cac mat a. Motor cho phep quay truc a vi mot van toc on nh. Mach ieu khien i kem vi o a. Khi truc a quay, cac au oc/ghi (Head) vach thanh cac ng ong tam tren cac mat a goi la t ao (Track). Vi moi v tr cua head, ta co mot tap hp cac t ao tren cac mat a goi la Cylinder. Thong tin c ghi tren cac t ao theo tng cung (sector). Mot sector thng cha c 512 bytes. Tren mat a, cac t ao va au oc/ghi c anh so t 0 . Tren t ao cac sector c anh so t 1. Cac t ao (tren cac mat da khac nhau) co cung mot so hieu tao thanh mot mat tru (Cylinder) lu cha thong tin. Tren cac may IBM PC/XT/AT va tng thch, cac o a c anh so nh sau: Drive type Drive name DriveID ========== ========== ======== Floppy 1 A 0 Floppy 2 B 1 Fix disk 1 - 80h Fix disk 2 - 81h 13.2IEU KHIEN Mach ieu khien o a c noi vi disk controller cua may vi tnh. Cac ieu khien a c thc hien thong qua disk controller. ieu khien a mot cach trc tiep qua disk controller rat phc tap va kho khan. V vay neu khong co yeu cau that ac biet, hay dung cac trnh ieu khien a cua BIOS. Cac chc nang nay c cung cap bi INT 013h . 13.3INTERRUPT 013H (CAC CHC NANG THONG DUNG) 13.3.1Reset disk Input: AH = 0 DL = DriveID > Reset lai cac thong so cho controller tng ng vi o a. 13.3.2Get error status Input: AH = 1 DL = DriveID Output: AL = Error code (AL=0 --> No error) 13.3.3Read sectors Input: AH = 2 F E D C B A 9 8 7 6 5 4 3 2 1 0 AL = Sector count ------------------------------86

CX = SecCylCylinder |Cyl| Begin Sec | DH = Head -----------------DL = DriveID 7 6 5 4 3 2 1 0 9 8 5 4 3 2 1 0 ES:BX = Read buffer ------------------- ----------Output: CF = 1 --> Error (AH = Error code) CF = 0 --> OK 13.3.4Write sectors Input: AH = 3 Cac tham so tng t nh read sectors. 13.3.5Verify sectors Input: AH = 4 Cac tham so tng t nh read sectors, nhng khong can ch nh gia tr cho ES:BX. D lieu khong c chuyen vao bo nh cua may tnh. 13.3.6Format track Input: AH = 5 AL = Sectors per track CX = SecCyl DH = Head DL = DriveID ES:BX = Sector descriptor table Diskette --> 4 bytes CHNS element C:Cylinder,H:Head,N:SecNo,S:Size of sector S=0 -> 128 bytes/sector S=1 -> 256 bytes/sector S=2 -> 512 bytes/sector S=3 -> 1024 bytes/sector Require AL*4 bytes buffer size Hard disk --> 2 bytes FN element F:Status flag (Return value) F=0--> good sector N:SecNo Require 512 bytes buffer size (AT Technical reference) 13.3.7Get drive parameter Input: AH = 8 DL = DriveID Output: DL = Number of hardisk in first controller DH = Maximum value of head CX = Maximum value of SecCyl Co the tham chieu en cac thong so cua cac a cng mot cach chi tiet hn qua hard disk parameter table. Int 041h ch en bang tham so cua drive 080h Int 046h ch en bang tham so cua drive 081h 87

13.3.8Read disk type Input: AH = 15h DL = DriveID Output: AH = 0 --> Drive is not present AH = 1,2 --> Diskette AH = 3 --> Hard disk 13.3.9Disk error code 00H no error on last operation 01H bad command: invalid request to controller 02H bad address mark 03H write protect: attempted to write on write-protected diskette 04H sector ID bad or not found. 05H reset failed 08H DMA failure 09H DMA overrun: attempted to write across a 64K-byte boundary. 0bH bad track flag encountered 10H bad CRC: invalid CRC when data checked. 11H data corrected: recoverable error found/corrected by ECC algorithm 20H controller failure 40H bad seek. requested track not found 80H time out. drive did not respond 0aaH drive not ready 0bbH undefined error 0ffH sense operation failed

13.3.10Hard disk parameter table (INT 41 & INT 46) Offs 1. 00h 2. 02h 3. 03h 4. 05h 5. 07h 6. 08h 7. 09h 8. 0Ah 9. 0Bh 10. 0Ch 11. 0Eh Size Description WORD number of cylinders BYTE number of heads WORD starting reduced write current cylinder (XT only,0 for others) WORD starting write precompensation cylinder number BYTE maximum ECC burst length (XT only) BYTE control byte bits 0-2: drive option (XT only, 0 for others) bit 3: set if more than 8 heads (AT and later only) bit 4: always 0 bit 5: set if manufacturers defect map on max cylinder+1 (AT and later only) bit 6: disable ECC retries bit 7: disable access retries BYTE standard timeout (XT only, 0 for others) BYTE formatting timeout (XT and WD1002 only, 0 for others) BYTE timeout for checking drive (XT and WD1002 only,0 for others) WORD cylinder number of landing zone (AT and later only) BYTE number of sectors per track (AT and later only) 88

12. 0Fh

BYTE

reserved

13.4RELATIVE SECTOR Trong khai thac thong tin tren a, ngi ta thng khai quat hoa cau truc a thanh mot vat the ky tin vi n v lu cha c ban la cac sector c anh so lien tuc t 0. Cac sector vi cach anh so nh vay goi la relative sector. Theo y niem tren, ta co oi chieu gia cac physical sector va relative sector nh sau : (Gia s a co 975 cylinders, 5 heads, 17 sectors/track) Relative sector Physical sector (C:H:S) 0 0:0:1 1 0:0:2 2 0:0:3 ... ... 16 0:0:17 17 0:1:1 18 0:1:2 ... ... 84 0:4:17 85 1:0:1 ... ... Relative sector khong phu thuoc vao cac thong so vat ly cua a, do o cho phep to chc lu gi thong tin tren a theo mot so quy tac tong quat. Theo o cac oan chng trnh truy nhap a se khong le thuoc vao cac thong so khac nhau cua cac loai a cng. 13.5PARTITION Moi mot hard disk tren IBM PC c chia thanh mot hay nhieu phan (ve mat logic) goi la cac partition. Moi partition c tao thanh t mot tap hp cac relative sector lien tiep nhau. Thong thng cac partition tren mot hard disk c sap xep ke nhau, khong co cac sector trong gia. Moi partition thng bat au t sector 1, head 0 cua mot cylinder nao o. Thong tin ve cac partition c lu gi trong mot cau truc ac biet goi la partition table. o la mot bang gom 4 phan t at tai offset 01BEh trong master boot cua hard disk. Moi phan t thuoc bang c goi la mot partion entry. Moi partition entry se lu gi thong tin ve mot partition. Cau truc cua mot partition entry: offs Size Contents ==== ==== ============================================================== +0 1 |Boot Boot flag: 0=not active, 80H = active |---+1 1 |HdBegin head of the first sector of partition |---|---+2 2 |Sec Cyl| Begin SecCyl of the first sector of partition |---|---+4 1 |Sys| System Code: 0=unknown, 1=DOS 12-bit FAT, 4=16-bit |---- 5= Extended DOS Partition, 6=BIG DOS +5 1 |HdEnd head of the last sector of partition |---|---89

+6 2 |Sec Cyl| End SecCyl of the last sector of partition |------|------+8 4low highBeginning relative sector number |------|------+0cH 4low highSize (total sectors in partition) -------------Active Partition la partition co cha he ieu hanh se c t ong nap vao sau khi khi ong computer. Tren moi a cng ch co mot active partition. 13.6MASTER BOOT (PHYSIC BOOT) Sector 0:0:1 c BIOS quy nh la master boot cua hard disk. Master boot gom hai phan chnh: Partition table va bootstrap routine. Cau truc cua master boot: Offset Size Contents ====== ==== ============================================================ ----- - - - - - - - - - - - - - - - - - - - - - - - - - ----+0 1beHcode to load and execute boot sector of active partition | |--- - - - -- - - - - - - - - ---+1beH 10H| partition 1 entry (see below) |--- - - - ---+1ceH 10H| partition 2 entry |--- - - - ---+1deH 10H| partition 3 entry |--- - - - ---+1eeH 10H| partition 4 entry |--- -- - ---+1feH 255 AApartition table signature (0aa55H) -------oan chng trnh trong master boot c goi la bootstrap routine. Khi computer c khi ong, sau qua trnh POST (Power On Self Test), master boot c oc vao a ch 0:7C00 va quyen ieu khien c chuyen en v tr ay. Sau khi nhan c quyen ieu khien, bootstrap routine se do tm active partition trong partition table (tai a ch 07DBE). Neu tm thay,bootstrap routine se nap module khi ong he ieu hanh t active partition va chuyen quyen ieu khien cho module ay. 13.7MOT TH DU VE THU TUC OC/GHI RELATIVE SECTOR. DriveNo db -1 CCount dw 0 HCount dw 0 SPT dw 0 ; SecPerTrack GetHDparm proc near 90

; DL = DriveNo ; ; Thu tuc nay phai thc hien trc ; khi dung ReadSec push ax push bx push cx push dx mov byte ptr DriveNo,dl mov ah,8 int 013h inc dh mov byte ptr HCount,dh mov ax,cx and al,00111111b mov byte ptr SPT,al xchg ch,cl mov ax,cx mov cl,6 shr ah,cl inc ax mov word ptr CCount,ax pop dx pop cx pop bx pop ax ret GetHDparm endp LogicToPhysic proc near push bx div word ptr SPT inc dx mov bx,dx ; so d la SecNo xor dx,dx div word ptr Hcount mov dh,dl ; so d la HeadNo xchg ah,al ; thng so la CylinderNo mov cl,6 shl al,cl ; tao SecCyl value or ax,bx mov cx,ax mov dl,byte ptr DriveNo mov ax,bx sub ax,word ptr SPT neg ax 91

inc ax ; AX = so sector toi a co the oc pop bx ; ( SPT - BeginSec +1 ) ret LogicToPhysic endp ;-------------------------ReadSec1 proc near ; DX:AX = Relative sector number ; ES:BX = Buffer ; ; oc mot sector ; call LogicToPhysic mov ax,0201h int 013h ret ReadSec1 endp ;-------------------------ReadSec2 proc near ; DX:AX = Relative sector number ; ES:BX = Buffer ; CX = Sector count ; ; oc nhieu sector, goi Int13 n lan ( n = sector count ) ; RS2a: push ax push cx push dx call LogicToPhysic mov ax,0201h int 013h pop dx pop cx pop ax jc RS2b inc ax adc dx,0 add bx,0200h loop RS2a RS2b: jnc RS2c mov ah,1 int 013h 92

stc RS2c: ret ReadSec2 endp ;-------------------------BeginRS dw 0,0 TotalSec dw 0 ReadSec3 proc near ; DX:AX = Relative sector number ; ES:BX = Buffer ; CX = Sector count ; ; oc nhieu sector, goi Int13 vi so lan t nhat. ; mov word ptr TotalSec,cx mov word ptr BeginRS[0],ax mov word ptr BeginRS[2],dx RS30: mov ax,word ptr BeginRS[0] mov dx,word ptr BeginRS[2] call LogicToPhysic cmp ax,TotalSec ; ax = SPT - BeginSec +1 jbe RS31 mov ax,TotalSec RS31: sub TotalSec,ax add word ptr BeginRS[0],ax adc word ptr BeginRS[2],0 push ax mov ah,2 int 013h pop ax jc RS32 xchg ah,al shl ax,1 add bx,ax ; ax = ax*512 cmp TotalSec,0 jne RS30 RS32: jnc RS33 mov ah,1 int 013h stc 93

RS33: ret ReadSec3 endp

94

CHNG 14 : TO CHC A CUA HE IEU HANH MSDOS


14.1MOT SO Y NIEM He ieu hanh MSDOS to chc lu tr thong tin tren a theo cac volume. oi vi Floppy disk, moi a la mot volume. oi vi a cng, moi DOS Partition la mot volume. Moi volume tng ng vi mot o a logic (A,B,C,D,E...) MSDOS volume c chia thanh nhieu n v lu cha thong tin bang nhau goi la cluster. Moi cluster la mot tap hp gom n sector lien tiep nhau. Trong mot volume, cac cluster eu co kch thc nh nhau . Moi file d lieu c lu gi trong mot hay nhieu cluster tuy theo kch thc cua file. Chuoi cac cluster theo th t lu gi thong tin cua mot file c goi la mot cluster chain. e ghi nh ve tnh trang cua cac cluster trong volume, MSDOS dung mot cau truc goi la bang FAT (File Alocation Table). ay la mot ma tran vi moi phan t ai dien cho mot cluster. Gia tr ghi nh trong moi phan t tng trng cho tnh trang cua cluster ma no ai dien. Moi mot file, ngoai cac thong tin c lu gi con co cac ac trng rieng nh ten file, ngay gi tao lap ... Cac thong tin nay c ghi nhan trong mot danh sach ac biet goi la th muc (directory) . Moi phan t trong th muc goi la mot directory entry. Moi volume cua MSDOS eu co mot vung danh rieng goi la root directory. Trong o co mot so lng xac nh cac directory entry e lu gi thong tin ve cac file. e m rong kha nang lu tr file, t version 2.0, he ieu hanh MSDOS cho phep ghi nh cac directory entry theo cung cach tng t nh ghi nh thong tin cua cac cac file d lieu. Cac file ac biet ch lu cha cac directory entry nay c goi la cac th muc con (sub directory).Khi cac th muc con chnh ban than no lai lu cha cac mo ta cua cac th muc con khac, khai niem cay th muc c thanh hnh. 14.2CAU TRUC VOLUME MSDOS Mot volume cua MSDOS c chia thanh cac phan chnh theo th t nh sau: Boot record (sector au tien cua volume) Cac bang FAT (thng co 2 bang) Root directory Data (c chia thanh cac cluster - t 2 tr i) 14.3CAU TRUC CUA MSDOS BOOT RECORD Media Descriptor | ValueMedia Types | |---------|-----------------------------------FFH2 sides, 8 sectors per track | FEH1 side, 8 sectors per track | FDH2 sides, 9 sectors per track | FCH1 side, 9 sectors per track | F9H2 sides, 15 sectors per track | F8Hfixed disk | -------------------------------------------------------------------------------------------------------|Offs|Size| Contents Version |----|----|--------------------------------------------------<-95

| 0003E9 XX XX or EB XX 90 (JMP to bootstrap routine)| |----|----|-------------------------------------------------- | | 0308OEM name and version | |----|----|-------------------------------------------------- | | 0B02Bytes per sector| |----|----|-------------------------------------------------- | | 0D01Sector per allocation unit (cluster size)| |----|----|-------------------------------------------------- | | 0E02Reserved sertors (size of boot record)| 2.x |----|----|-------------------------------------------------- | | 1001Number of FATs| |----|----|-------------------------------------------------- | | 1102Number of directory entries| |----|----|-------------------------------------------------- | | 1302Total sectors in volume (0 if volume size>32MB)| |----|----|-------------------------------------------------- | | 1501Media descriptor byte | |----|----|-------------------------------------------------- | | 1601Number of sertors per FAT | |----|----|--------------------------------------------------<-| 1802Sertor per track| |----|----|-------------------------------------------------- | | 1A02Number of heads| 3.x |----|----|-------------------------------------------------- | | 1C02Number of hidden sector (LowWord)| |----|----|--------------------------------------------------<-| 1E02Number of hidden sector (HiWord)| |----|----|-------------------------------------------------- | | 2004Total sectors in volume (volume size>32MB)| |----|----|-------------------------------------------------- | | 2401Physical drive number | |----|----|-------------------------------------------------- | | 2501Reserved | 4.x |----|----|--------------------------------------------------5.x | 2601Extended boot signature (29H)| 6.x |----|----|-------------------------------------------------- | | 270432-bit binary volume ID | |----|----|-------------------------------------------------- | | 2B0BVolume label| |----|----|-------------------------------------------------- | | 3608Reserved | |----|----|--------------------------------------------------<-|| Bootstrap routine | 14.4CAU TRUC CUA FAT (FILE ALOCATION TABLE)

96

Moi bang FAT chiem 1 hay nhieu sector. Moi bang FAT c chia thanh nhieu phan t c anh so t 0. Co hai loai kch thc cho cac phan t cua FAT:12 bit va 16 bit. Phan t th 0 va th 1 cua FAT c danh rieng cho cac mo ta nh sau: Byte th nhat se mang gia tr cua media descriptor byte. Cac byte con lai mang gia tr FFh Phan t th 2 tr i ai dien cho cac cluster trong vung data. Cac gia tr ghi trong cac phan t nay cho biet tnh trang cua cac cluster tng ng nh sau: 0 : cluster con trong. 0002h - FFEFh : cluster gia chain. Gia tr lu cha chnh la so hieu cua cluster ke tiep trong chain. FFF0h - FFF7h : cluster danh rieng (khong c s dung). FFF7h : cluster b hong FFF8h - FFFFh : cluster cuoi cung trong chain. 14.5CAU TRUC CUA DIRECTORY ENTRY Offs Size Contents ==== ==== ================================================================ +0 8 |F I L E N A M E| left-justified, blank-padded |---------|---------------+8 3 |E X T| left-justified, blank-padded |---|---|---+0bH 1 |atr| file attribute (*) |----------- - - ----+0cH 0aHreserved | |------|--- - - ---+16H 2timetime created or last modified in filetime format (*) |------+18H 2datedate created or last modified in filetime format (*) |------+1aH 2 |ClstrNo| cluster number of start of file (link into FAT) |-------------+1cH 4file sizefile size in bytes -------------File attribute format [7|6|5|4|3|2|1|0] |a|d|v|s|h|r| UUUUUUUE bit description ||O> 0: 1=file is Read-only (cant be written/deleted) || O> 1: 1=Hidden |O> 2: 1=System | O> 3: 1=Volume label entry O> 4: 1=subDirectory entry O> 5: Archive bit. 1=file has NOT been backed up File time format [5|4|3|2|1|0|9|8U7|6|5|4|3|2|1|0] hourminutesec/2 | 97

U----------------E OOE OOE OOE | O> second/2 O > minute O > hour File date format [5|4|3|2|1|0|9|8U7|6|5|4|3|2|1|0] yearmonthday | U----------------E OOE OOE OOE | O> day O> month O > year-1980 (0-119 valid) Byte au tien cua filename mang cac y ngha nh sau: Gia tr 0 : directory entry con trong (cha dung en) Gia tr E5h : directory entry a b xoa bo Cac gia tr khac : directory entry ang c s dung oi vi th muc con: File size luon bang 0 --> kch thc th muc ch co the suy t FAT. Entry au co name la . (mot dau cham) mang thong tin ve v tr, ngay gi tao lap, cluster bat au cua chnh th muc con o. Entry th hai co name la .. (hai dau cham) mang thong tin ve v tr, ngay gi tao lap, cluster bat au cua th muc cha th muc con o. (neu gia tr cluster bang 0 --> th muc me la root) 14.6MINH HOA VE TO CHC FAT VA TH MUC starting cluster number E Directory [----------------------------------------------v--------] Entry |M Y F I L E T X T|a| |tim|dat|08size | U--------------------------|-----E O E 00 01 02 03 04 05 06 07 |8 09 0a 0b 0c 0d 0e 0f ---------------------------------v-----------------------------00 |ID||ff||03=>04=>05=>ff||00||00||09=>0a=>0b=>15||00||00||00||00| ---------------------------------------------|-----------------O E ---------------------v-----------------------------------------10 |00||00||00||00||00||16=>17=>19||f7||1a=>1b=>ff||00||00||00||00| -----------------------------|-------A-------------------------OE 14.7LOGICAL SECTOR Cac sector trong mot volume c MSDOS anh so t 0 tr i. Cac sector vi cach anh so nh vay goi la logical sector. Ve ban chat, logical sector va relative sector tng t nhau. Ve phng dien tnh toan, relative sector bang vi logical sector cong them v tr bat au cua volume. Ta nen dung interrupt 25h e oc cac logical sector. interrupt 26h e ghi cac logical sector. Input: AL = drive number (0=A, 1=B, etc.) DX = sector bat au 98

DS:BX = buffer CX = so lng sector oc/ghi (<FFFFh) CX = FFFFh --> tac vu tren BIG DOS partitions (>32M) DS:BX = a ch cua transfer packet (10 bytes) DS:[BX+0] sector bat au (DWORD) DS:[BX+4] so lng sectors oc/ghi (WORD) DS:[BX+6] offset cua buffer (WORD) DS:[BX+8] segment cua buffer (WORD) Output: CF = 1 --> AX = error code Lu y : + Tat ca cac thanh ghi se b thay oi tr DS, ES, SS, SP Cac interrupt nay ket thuc bang lenh retf, do o se e lai c hieu trong stack khi ket thuc. Logical sector bat au cua mot cluster tnh bang cong thc sau : rootsects = (RootSize * 32) / SecSize firstdata = ResSecs + (FatSize * FatCnt) + rootsects logicalsector = firstdata + ((clusterno - 2) * ClusSize)

99

CHNG 15 : CAC CHC NANG VE FILE VA TH MUC CUA HE IEU HANH DOS
Cac chc nang c ban cua he ieu hanh DOS eu tap trung vao Interrupt 21h. So hieu cua chc nang c at trong thanh ghi AH,cac tham so c at trong cac thanh ghi con lai. Cac chuoi c s dung trong interrupt 21h thng la cac day ASCIIZ (cac day ky t ket thuc bang ma 0). Khi chc nang thc hien gap loi, c hieu CF c dng len va ma loi thng c at trong AX. e truy nhap thong tin trong mot file can phai co cac thong so nh : - Ten file. - V tr lu cha directory entry. - Cac cluster lu cha thong tin cua file. - Kch thc file hien hanh. - V tr cua con tro file. - .... Cac thong so nay c at trong mot cau truc ac biet goi la FCB (File Control Block) . Cac chc nang ve file se da theo thong tin trong FCB e thc hien. Moi file c ieu khien bi mot FCB. Trc khi file c truy nhap, FCB tng ng vi no phai c chuan b cac thong so c ban (thong thng o la cac thong tin cha trong directory entry tng ng vi file). Viec thiet lap cac thong so ban au cho mot FCB c goi la tac vu m file (open file). Thong thng th cac chng trnh ng dung ch can ch ra mot FCB a co cha san ten file va yeu cau he ieu hanh m file. He ieu hanh se tm kiem va ien ay u cac thong tin con lai vao FCB ay. Sau o, moi lan can truy nhap file, chng trnh ng dung se goi en chc nang tng ng cua he ieu hanh nh kem vi a ch cua FCB. Cac chng trnh ng dung phai t mnh tao ra va quan ly cac FCB. ieu nay khong c thuan tien cho lam khi phat trien cac version mi cua he ieu hanh : cau truc cua FCB la bat bien. e khac phuc van e nay, mot cung cach to chc mc cao hn c a ra : he ieu hanh tao ra mot cau truc tng t nh mot mang cac FCB trong vung nh rieng cua no. Khi chng trnh ng dung can m mot file, ch can goi chc nang m file cua he ieu hanh cung vi ten cua file. He ieu hanh se t ong cap phat mot FCB con trong, ien cac thong so can thiet vao o va tra lai cho chng trnh ng dung so hieu cua FCB o (goi la file handle number). Cac tac vu tren file ke tiep ch can nh kem vi so hieu tng ng cua file. Mat khac, y niem ve file handle a c m rong ra nhieu so vi FCB. DOS quan niem file handle la mot au moi co the cung cap hoac tiep nhan thong in theo mot so cung cach nhat nh tuy theo thuoc tnh cua tng file handle. Theo o file handle khong ch quan ly cac file tren a, ma con co the ai dien cho cac thiet b khac. Th du : Ban phm la mot nguon cung cap d lieu mot cach tuan t. (Tng ng vi mot file m mode read only) May in la mot ni tiep nhan d lieu mot cach tuan t. (Tng ng vi mot file m mode write only) Mac du he ieu hanh DOS cung cap ca hai cung cach truy nhap file (theo FCB va theo file handle ), nhng cac chc nang dung trc tiep FCB ch nham tng thch vi cac version au tien cua DOS ma thoi. Trong tai lieu nay, hung ta se ch e cap en cac chc nang dung file handle. 15.1CAC CHC NANG VE FILE 15.1.1Tao lap file (Create) 100

Input : AH = 3Ch CX = File attribute DS:DX = Buffer cha file name (ASCIIZ) Output : CF = 1 --> AX = error code CF = 0 --> AX = file handle number (file t ong c m vi mode oc/ghi) 15.1.2M file (Open) Input : AH = 3Dh AL = 0 --> mode read only = 1 --> mode write only = 2 --> mode read/write DS:DX = Buffer cha file name (ASCIIZ) Output : CF = 1 --> AX = error code CF = 0 --> AX = file handle number 15.1.3ong file (Close) Input : AH = 3Eh BX = File handle Output : CF = 1 --> AX = error code 15.1.4at con tro file (Set file pointer) Input : AH = 42h AL = mode BX = File handle CX:DX = so gia (DWORD) AL = 0 --> file pointer := CX:DX AL = 1 --> file pointer := CX:DX + file pointer AL = 1 --> file pointer := CX:DX + file size Output : CF = 1 --> AX = error code CF = 0 --> DX:AX = gia tr mi cua file pointer 15.1.5oc file (Read) Input : AH = 3Fh BX = File handle CX = So byte oc DS:DX = Buffer Output : CF = 1 --> AX = error code CF = 0 --> AX = so byte thc s c oc D lieu bat au t v tr hien hanh cua file pointer c oc vao buffer. Khong the oc vt qua v tr cuoi file. 15.1.6Ghi file (Write) Input : AH = 40h BX = File handle CX = So byte ghi 101

DS:DX = Buffer Output : CF = 1 --> AX = error code D lieu trong buffer c ghi xuong file bat au t v tr hien hanh cua file pointer. Neu gap v tr cuoi file, kch thc file se c m rong ra theo so byte ghi them. Neu CX = 0 --> kch thc file se c gan bang gia tr cua file pointer hien hanh. Trong trng hp nay file co the b cat ngan i hoac m rong ra tuy theo v tr cua file pointer . 15.1.7Huy bo file (Delete) Input : AH = 41h DS:DX = Buffer cha file name (ASCIIZ) (File name co the bao gom ay u ten o a va PATH) Output : CF = 1 --> AX = error code 15.1.8Xem/sa file attrib Input : AH = 43h AL = 0 --> lay file attrib = 1 --> at file attrib mi CX = Attribute mi (AL=1) DS:DX = Buffer cha file name (ASCIIZ) Output : CF = 1 --> AX = error code CF = 0 --> CX = file Attribute (AL=0) 15.2CAC CHC NANG VE TH MUC 15.2.1Tao th muc Input : AH = 39h DS:DX = Buffer cha directory name (ASCIIZ) 15.2.2Xoa th muc Input : AH = 3Ah DS:DX = Buffer cha directory name (ASCIIZ) 15.2.3Ch nh th muc hien hanh Input : AH = 3Bh DS:DX = Buffer cha directory name (ASCIIZ) 15.2.4Lay ten th muc hien hanh Input : AH = 47h DL = driver code ( 0=default,1=A,2=B,3=C ...) DS:SI = Address of 64 bytes buffer Path name tra lai khong bat au bang ten o a lan dau \ va ket thuc bang ma 0h 15.2.5Tm directory entry au tien trong th muc Input : AH = 4Eh CX = search attribute DS:DX = Buffer cha search name (ASCIIZ) 102

search name co the ch nh bang cac ky hieu ? hay *. Neu tm thay, cac thong tin cua phan t nay c at trong DTA 15.2.6Tm directory entry ke tiep trong th muc Input : AH = 4Fh DOS s dung cac thong tin cung cap bi li goi chc nang 04E trc o ( lu gi trong DTA t byte 0 -> 14 ) e tm phan t ke tiep . Neu tm thay, cac thong tin cua phan t nay c at trong DTA 15.2.7Cau truc DTA (Disk transfer area) 00 -> 14 : Vung danh rieng cua DOS 15 : File attribute 16 -> 17 : File time 18 -> 19 : File date 1A -> 1D : File size 1E -> 2A : File name ( Ket thuc bang ma 0h ) Thong thng khi chng trnh va c goi thc hien DTA c at tai offset 080h cua PSP . oi vi file dang COM, a ch nay la CS:080 Lay a ch DTA : Input : AH = 02Fh Output: ES:BX = segment:offset of DTA nh a ch DTA : Input : AH = 01Ah DS:DX = segment:offset of DTA 15.2.8Duyet cay th muc Ta co the s dung hai chc nang 4Eh va 4Fh e hien th tat ca cac file co ten trung vi Search name tren toan a theo giai thuat sau: Searchpath : la path do tm hien tai Searchname : ten cua phan t can tm (co the bao gom ? va * ) 1.Tao Searchpath bat au t th muc chu (Root) <Drivername>:\ ; Th du A:\ 2.Tm tat ca cac file theo Searchname bang cach : Goi chc nang 04Eh vi CX = 012h DS:DX = segment:offset of Searchpath+Searchname Hien th ten file va tm thay Goi chc nang 04Fh cho en khi het tm thay . 3.Tm th muc au tien trong Searchpath bang cach goi chc chc nang 04Eh vi CX = 012h ( Tm ca nhng th muc dau mat ) DS:DX = segment:offset of Searchpath+\*.* Neu khong tm thay : 3.1 Neu Searchpath ang ch vao th muc chu th ket thuc Neu Searchpath ang ch vao mot th muc con th : 3a. Bo ten th muc cuoi cung trong Searchpath va tra lai DTA trc o 103

3b. Tm ten th muc ke tiep bang chc nang 04Fh ( Tm theo thong tin cua DTA va lay lai ) Neu khong tm thay lap lai bc 3.1 Neu tm thay, tiep tuc bc 4 4.Them ten th muc mi tm thay vao Searchpath Hien th Searchpath mi 5.Lu DTA hien tai va tao DTA mi vi Searchpath mi 6.Lap lai bc 2 15.3CAC MA LOI THNG GAP CUA INTERRUPT 021H : Hex Dec Meaning --- --- ----------------------1 1 Invalid function number 2 2 File not found 3 3 Path not found 4 4 Too many open files 5 5 Access denied 6 6 Invalid handle 7 7 Memory ctrl blocks destroyed 8 8 Insufficient memory 9 9 Invalid memory block address 0aH 10 Invalid environment 0bH 11 Invalid format 0cH 12 Invalid access code 0dH 13 Invalid data 0eH 14 (not used) 0fH 15 Invalid drive specified 10H 16 Cant remove current directory 11H 17 Not same device 12H 18 No more matching files

104

CHNG 16 : CAC FILE CHNG TRNH CUA DOS.


Khi thc hien cac chng trnh, he ieu hanh nap cac file chng trnh vao bo nh va chuyen quyen cho chung. Moi he ieu hanh se quy nh mot so dang thc rieng (format) ve cach mo ta va to chc ben trong cua file chng trnh. He ieu hanh DOS co hai dang thc cho file chng trnh la COM va EXE. 16.1FILE DANG COM Khi DOS thc hien mot file chng trnh dang COM, no se qua cac bc sau: Thiet lap mot environment segment. Tao mot PSP. oc toan bo file chng trnh vao ngay sau PSP (offset 100h) Gan cac thanh ghi segment bang vi a ch cua PSP. Cho SP=offset cuoi cua segment SS roi push 0 thc hien lenh JMP PSP:0100h Nh vay file chng trnh dang COM co cac ac iem sau : Kch thc file phai nho hn 65536 - 100h - 2 Bat au tai offset 0100h Tat ca chng trnh trong mot segment File chng trnh va chng trnh khi thc hien hoan toan giong nhau Cac chng trnh dang COM thong thng ket thuc bang Int 020h 16.2FILE DANG EXE Khac vi file dang COM, cac file dang EXE co mot cau truc au file (Exe header) dung e lu gi cac mo ta ve cach sap xep, v tr bat au cua chng trnh ... Cau truc cua mot Exe header: Offs Size Contents ==== ==== ================================================================== +0 2 |4Dh 5aH| Dau hieu nhan dien EXE file (MZ hoac ZM) |------+2 2 |PartPag| kch thc thc cua load module trang cuoi |------+4 2 |PageCnt| so trang 512 bytes cha load module va header |------+6 2 |ReloCnt| so phan t trong relocation table |------+8 2 |HdrSize| kch thc header tnh bang paragraph (16 bytes) |------+0aH 2 |MinMemKch thc bo nh toi thieu sau load module (paragraphs) |------+0cH 2 |MaxMemKch thc bo nh toi a sau load module (paragraphs) |------+0eH 2 |ReloSSV tr tng oi cua stack segment SS (paragraphs) |------+10H 2 |ExeSPGia tr khi au cua SP |------+12H 2 |ChkSumtong tat ca cac word trong file nhan vi -1 |------105

+14H 2 |ExeIPGia tr khi au cua IP |------+16H 2 |ReloCSV tr tng oi cua code segment CS (paragraphs) |------+18H 2 |TablOff| V tr cua relocation table trong EXE file |------+1aH 2 |Overlay| so phan t overlay -------1cH iem ket thuc cua cau truc EXE header --------------- - - |--------------? 4*? |offset segment| |offset segment| Relocation table. ------------- - - ------------? ? ien cac gia tr 0 cho ay paragraph cuoi. ? ? iem ket thuc cua EXE header Khi thc hien mot file chng trnh dang EXE, DOS se qua cac bc sau: oc 1Ch bytes t Exe Header ( offset 0 cua EXE file ) Xac nh kch thc bo nh can thiet cho Exe file LoadSize = PageCnt*512 - HdrSize*16 - PartPag LoadSize + MinMem + 100h <= ExeMem <= LoadSize + MaxMem + 100h ( 100h = kch thc cua PSP ) ExeMem c xac nh tuy theo so lng bo nh con lai cua he thong. ExeMem se lay gia tr ln nhat co the c trong khoang a neu. Thiet lap mot environment segment. Xin cap phat mot vung nh vi kch thc ExeMem. Tao mot PSP. Xac nh Startseg. (Thong thng Startseg = PSP+10h). oc load module vao bo nh (bat au t Startseg:0000) Load module bat au t offset HdrSize*16 trong EXE file Load module co kch thc bang : PageCnt*512 - HdrSize*16 - PartPag Thc hien nh v lai cac gia tr segment trong load module ( Xem th du ) Gan cac gia tr khi au cho cac thanh ghi DS = ES = PSP SS = Startseg + ReloSS, SP = ExeSP CS = Startseg + ReloCS, IP = ExeIP (Thc hien JMP CSvalue:IPvalue hoac PUSH CSvalue ; PUSH IPvalue ; RETF ) ac iem cua file chng trnh dang Exe la : Kch thc file chng trnh khong co gii han So segment trong chng trnh khong gii han iem khi au, v tr cua STACK ... c quy nh trong ban than chng trnh File chng trnh va chng trnh khi thc hien khong hoan toan giong nhau : qua trnh load a sa oi cac gia tr segment trong chng trnh cho phu hp vi v tr c nap. Mat khac khi thc hien, khong phai khi nao toan bo chng trnh cung c nap len. Cac chng trnh dang EXE thong thng ket thuc bang Int 021h chc nang 4Ch Th du nh v lai cac gia tr segment cua load module: ; DS:SI = Relocation table 106

; CX = ReloCnt ; DX = StartSeg ; Load module a c oc vao StartSeg cld LL1: lodsw ; offset of ReloItem mov di,ax lodsw ; Relative Segment of ReloItem add ax,dx ; Adjust to Real Segment mov es,ax add word ptr es:[di],dx ; Adjust ReloItem loop LL1 16.3PROGRAM SEGMENT PREFIX (PSP) Cac thong tin ve chng trnh ang thc hien nh tham so dong lenh, bo nh thuoc ve chng trnh ... c lu cha trong mot cau truc ac biet goi la PSP. Cau truc cua PSP: Offs Size +0 2 |INT 20H| EXE programs may JMP or RET here (PSP:0) to exit |------+2 2 |MemTopBien tren vung nh thuoc ve chng trnh (paragraph) |---|---+4 1| (reserved) |---|--------------+5 5 |CALL offset segment| FAR CALL to DOS function dispatcher ----|------|------+6 (2)Availkch thc cua Segment chng trnh -------|---|---- (Trng hp COM file) +0aH 4 |offset segment| Terminate address. INT 22H |------|------+0eH 4 |offset segment| Ctrl-Break handler address INT 23H |------|------+12H 4 |offset segment| Critical Error handler addr INT 24H |------------- - -----+16H 16HDOS reserved area | |------|------ - ----+2cH 2 |EnvSega ch cua environment (segment) |-------------- - -----+2eH 2eHDOS reserved area | |------------ - ----+5cH 10Hformatted parm area 1setup as an FCB for 1st cmd parameter |------------ - ----+6cH 14Hformatted parm area 2setup as an FCB for 2nd cmd parameter |---|--------- - ----+80H 1 |len| So ky t trong tham so dong lenh |--------------- - -----+81H 7fHUnformatted Parm AreaTham so dong lenh ------------- - ----107

+FFH iem ket thuc PSP Trc khi chuyen quyen, DOS ch nh PSP:080h la a ch cho DTA mac nhien cua chng trnh. 16.4ENVIRONMENT Environment la mot vung nh lu cha cac chuoi ASCIIZ lien tiep nhau. Cac chuoi ay co dang thc : name=value. Vi name la cac bien moi trng cua DOS nh COMSPEC,PATH,PROMPT ... c thiet lap bi lenh SET. Th du ve thong tin ben trong mot environment: (bieu dien bang hp ng) db COMSPEC=c:\command.com,0 ; Danh sach cac bien moi db PROMPT=$p$g,0 ; trng cua DOS db PATH=c:\;c:\dos;c:\utils,0 ; db TEMP=c:\windows\temp,0 ; db 0 ; Ket thuc danh sach dw 1 ; So ExecString tiep theo ; Thong thng la 1 db C:\UTILS\HDDIAG.EXE,0 ; Ten cua chng trnh c ; thc hien (bao gom ca PATH) db 0

108

Chng 17 Cau truc device cua MSDOS

109

CHNG 18 : TO CHC BO NH CUA DOS.


Bo nh thuoc ve DOS bat au t a ch 0050:0000 tr i. Trong bo nh, DOS c chia thanh cac phan chnh nh sau: - Phan loi cua DOS (DOS Kernel) - Cac device driver (code) - Cac table, stack, buffer ... (data) T a ch 0050:0000 en 0070:0000 la vung communication cua DOS. Trong o DOS thiet lap mot so cac cau truc rieng dung lu gi cac thong tin ve he thong. DOS kernel va cac internal device cua DOS c nap bat au t 0070:0000. Bo nh ke tiep c chia thanh nhieu khoi noi tiep nhau (Memory block). Cac memory block c quan ly bang he thong cac MCB (Memory Control Block). ..... | |---------------| MCB | |---------------Memory | Block | |---------------| MCB | |---------------Memory | Block | |---------------..... | 18.1 MEMORY CONTROL BLOCK: ng trc moi memory block la mot MCB (khong thuoc ve memory block). Moi MCB chiem 16 bytes (hay mot paragraph) co cau truc nh sau: Offset Size Description 00h BYTE block type: 5Ah neu la MCB cuoi, 4Dh cho cac MCB khac 01h WORD 0000h --> cha s dung 0008h --> thuoc ve DOS Khac --> PSP cua chng trnh ang quan ly (owner) 03h WORD Kch thc cua memory block tnh bang paragraph 05h 3 BYTEs Khong s dung ---DOS 2.x,3.x--08h 8 BYTEs Khong s dung ---DOS 4+ --08h 8 BYTEs Ten chng trnh (neu la PSP memory block) ---DOS 5+ --08h 2 BYTEs Neu block thuoc ve DOS (Block type = 0008) th mang mot trong hai gia tr: SC --> System code, locked-out inter-UMB memory SD --> System data, device driver 110

Cac MCB lien ket cac memory block lai thanh mot day xch (chain). Qua trnh quan ly bo nh cua DOS da hoan toan tren cac thong tin lu cha trong cac MCB. Neu thong tin trong mot MCB khong ung dan en chuoi cac MCB b roi loan, e bao am an toan, DOS se thong bao Memory Alocation Error va yeu cau khi ong lai he thong. Di DOS 3.1+, memory block au tien la DOS data segment,cha cac device, table, buffer ... c ch nh trong config.sys Di DOS 4+ memory block au tien c chia thanh nhieu khoi con, moi khoi co rieng mot Control Block vi cau truc nh sau: Offset Size Description ====== ==== ==================================================== 00h BYTE Kieu cua khoi con D device driver E device driver appendage I IFS (Installable File System) driver F FILES= (File system table) X FCBS= (FCB table) C BUFFERS EMS (Buffers EMS block) B BUFFERS= (Buffer block) L LASTDRIVE= (LASTDRIVE entry) S STACKS= (STACK code segment) T INSTALL= 01h WORD Segment bat au 03h WORD Kch thc cua khoi con 05h 3 BYTEs Khong s dung 08h 8 BYTEs Ten cua file cha device (neu kieu la D hay I) 18.2HIMEM HIMEM.SYS la trnh quan ly bo nh m rong (extended memory) cua DOS. Vi cac CPU 286 tr len bo nh co the ln hn 1MB. HIMEM cho phep mot so ng dung cua DOS nh RAMDRIVE,SMARTDRV ...dung phan m rong nay. Tren cac PC dung CPU 286 tr len, address bus la 24 hoac 32 bit. Cac a ch c tao thanh t segment va offset b gii han trong 20 bit au (0-19) cua address bus. Neu bit 20 cua address bus c s dung, a ch tao thanh t segment FFFFh va cac offset t 0-FFFFh se cho phep truy nhap them 64KB tnh t a ch 100000h (tren 1MB). T DOS 5.0, sau khi nap HIMEM, vi ch nh DOS=HIGH trong CONFIG.SYS, bit A20 cua address bus (A20) se c a vao s dung. DOS se co gang dung tat ca vung nh nay cho cac internal device, system table, buffer... Bang cach nay, DOS se ch chiem khoang 15 KB trong vung nh tieu chuan. 18.3UPPER MEMORY CONTROL BLOCK T DOS 5.0, vi cac CPU 80386 tr len, driver EMM386.EXE cho phep khai thac bo nh mot cach hu hieu hn: vung nh m rong (extend memory) co the c dung e gia lap cho bo nh banh trng (expand memory), ong thi cung cho cho phep tao ra cac UMB lam tang them so lng bo nh danh cho cac chng trnh ng dung cua DOS. Upper Memory Block la cac khoi nh thuoc vung nh m rong tren PC (Ngoai 1MB quy c, t 100000h tr i). Tren cac CPU 80386 tr i, EMM386 cho phep nh v lai a ch cac khoi nh o vao cac khoang trong thuoc A0000-100000. e s dung UMB can : Ch nh DEVICE=EMM386.EXE NOEMS trong CONFIG.SYS 111

( hoac DEVICE=EMM386.EXE RAM ) Ch nh DOS=UMB trong CONFIG.SYS Cac UMB cung c DOS quan ly giong nh cac memory block. Moi UMB co mot UMCB ng trc vi cau truc nh sau: Upper Memory Control Block (DOS 5+): Offset Size Description ====== ==== ===================================================== 00h BYTE 5Ah neu la UMCB cuoi, 4Dh cho cac UMCB khac 01h WORD 0000h --> UMB cha s dung 0008h --> UMB thuoc ve DOS Khac --> PSP cua chng trnh s hu (owner) 03h WORD Kch thc cua memory block tnh bang paragraph 05h 3 BYTEs Khong s dung 08h 8 BYTEs block type: UMB neu la khoi au tien SM neu la khoi cuoi e tranh cac vung nh danh rieng nh video buffer, video bios ...,DOS tao ra cac UMCB ngay trc cac vung ay va anh dau la thuoc ve DOS. (Coi cac vung nay nh la cac UMB a dung roi). 18.4DOS SYSVAR Chc nang 52h cua interrupt 21h cung cap rat nhieu thong tin quan trong ben trong DOS. Tuy nhien ay la mot chc nang noi (khong cong bo) do o cac cau truc a cho co the b thay oi trong cac version ke tiep cua DOS. Input : AH = 52h Output : ES:BX -> Pointer to DOS SYSVAR TABLE (ES = DOS data segment) *DOS SYSVAR TABLE Offset Size Description ====== ===== ========================================================== 2 WORD segment cua MCB au tien 00h DWORD a ch cua Drive Parameter Block au tien 04h DWORD a ch cua System File Table au tien 08h DWORD a ch cua CLOCK$ devices header hien hanh (device c load len sau cung co CLOCK bit c set) 0Ch DWORD a ch cua CON devices header hien hanh (device c load len sau cung co STDIN bit c set) ---DOS 2.x--10h BYTE so lng o a (logic) trong he thong 11h WORD so byte toi a trong mot block cua cac block device 13h DWORD a ch cua disk buffer au tien 17h 18 BYTEs NUL device driver header NUL luon luon la device au tien trong chuoi cac device cua DOS ---DOS 3.0--10h BYTE so lng block device 11h WORD so byte toi a trong mot block cua cac block device 13h DWORD a ch cua disk buffer au tien 17h DWORD a ch cua bang thong tin cac th muc hien hanh 112

1Bh BYTE gia tr cua LASTDRIVE (trong CONFIG.SYS) 1Ch DWORD a ch cua STRING= 20h WORD kch thc cua vung STRING (gia tr x trong STRING=x) 22h DWORD a ch cua FCB table 26h WORD gia tr y trong FCBS=x,y 28h 18 BYTEs NUL device driver header ---DOS 3.1-3.3--10h WORD so bytes toi a trong mot sector cua block device 12h DWORD a ch cua disk buffer au tien 16h DWORD a ch cua bang thong tin cac th muc hien hanh 1Ah DWORD a ch cua FCB tables 1Eh WORD gia tr y trong FCBS=x,y 20h BYTE so lng block device a c cai at 21h BYTE so o a logic (Cung la so phan t cua bang thong tin cac th muc hien hanh) 22h 18 BYTEs NUL device driver header 34h BYTE so lng cac o a JOIN ---DOS 4.x--35h WORD 0 37h DWORD a ch au vao cua resident IFS utility functions 3Bh DWORD a ch cua chuoi cac IFS (installable file system) drivers 3Fh WORD gia tr x trong BUFFERS x,y 41h WORD gia tr y trong BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE flag: 01h to use DWORD moves (80386+), 00h otherwise 45h WORD kch thc extended memory (KB) ---DOS 5.0-6.0--37h DWORD a ch cua danh sach chng trnh trong SETVER 3Bh WORD ?? 3Dh WORD segment cua PSP cua chng trnh va c goi (EXEC) (neu DOS c nap vung nh cao HMA) 3Fh WORD gia tr x trong BUFFERS x,y 41h WORD gia tr y trong BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE 01h --> cho phep dung DWORD moves (80386+) 45h WORD kch thc extended memory (KB) Cau truc au vao cua STACKS code segment: Offset Size Description ====== ==== ==================================================== 00h WORD ??? 02h WORD So lng stack (gia tr x trong STACKS=x,y) 04h WORD Kch thc cua stack control block array 06h WORD Kch thc cua moi stack (gia tr y trong STACKS=x,y) 08h DWORD a ch cua STACKS data segment Cau truc au vao cua system file table va FCB table: 113

Offset Size Description ====== ==== ==================================================== 00h DWORD a ch cua file table ke tiep (FFFFh neu khong co) 04h WORD so file handle hay FCB trong bang 06h 36h bytes DOS 3.0 35h bytes DOS 3.1 - 3.3x 3Bh bytes DOS 4.0 - 6.0 Offset Size Description ====== ==== ============================================= 00h WORD so lng file handle cung tham chieu en file 02h WORD file open mode (see AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see AX=4301h) 05h WORD device info word (see also AX=4400h) bit 15 set if remote file bit 14 set means do not set file date/time on closing bit 13 set if named pipe bit 12 set if no inherit bit 11 set if network spooler bit 7 set if device, clear if file (only if local) bits 6-0 as for AX=4400h 07h DWORD a ch cua device driver header (character device) hoac DOS Drive Parameter Block 0Bh WORD cluster bat au cua file 0Dh WORD file time 0Fh WORD file date 11h DWORD file size 15h DWORD file pointer 19h ?? Cau truc au vao cua bang thong tin th muc hien hanh (LASTDRIVE entries) Offset Size Description ====== ==== ==================================================== 00h 67 BYTEs Chuoi ASCIZ dang X:\PATH (Vi X: la lastdrive) 43h ??

CHNG 19 : CHNG TRNH THNG TRU.

CHNG 20 : TAP TIN .BAT CUA MSDOS CHNG 21 : THIET LAP CAU HNH CHO MSDOS
21.1 Tap tin CONFIG.SYS 114

You might also like