You are on page 1of 4

Bi thc hnh s 6

Lp trnh bn phm
Mc ch
Hiu c cch thc hot ng ca bn phm Bit cch s dng mt s hm lin quan n bn phm ca ngt 16h (BIOS ) v ngt 21h (DOS)

Tm tt l thuyt
Nguyn tc hot ng ca bn phm Bn phm cho my PC c nhiu loi: 83 phm, 84 phm, 101 phm, Bn trong mi bn phm l chip iu khin 8049 v 8042. Khi mt phm c nhn (up-to-down) hay c th (down-to-up), chip iu khin ghi nhn phm bng mt (hoc mt vi) m s (gi l m qut, scan code) v gi m ny ra cng 60h, ng thi to tn hiu ngt IRQ1. V d: Khi phm ch a c nhn ri th ra, ta nhn c 2 m qut tng ng l: 1E v 9E. Thng thng, m th (up-code) bng m nhn (down-code) cng thm 80h. Tng t, i vi Left-Control, 2 m qut l 1D v 9D Tuy nhin, vi Right-Control, ta nhn c 4 m qut: 0E 1D (khi nhn) v 0E 9D (khi th). Tn hiu IRQ1 gy ra ngt 09h. Ngt 09h ny c nhim v chuyn i m qut thnh m ASCII v lu tr vo b m bn phm. Cc chng trnh c nhu cu nhn thng tin t bn phm c th s dng cc hm ca ngt 21h hoc 16h c b m ny m khng cn quan tm n gi tr ca m qut. V d: mt chng trnh no ch cn dng ngt 16h, hm 01 kim tra xem ngi s dng c g du chm cu (nhn phm .) hay khng m khng quan tm n l phm du chm phn keypad (scan code = 53) hay l phn cc phm c bn (scan code = 34). Khi c gi, trnh phc v ngt 09h s c cng 60h ly m qut. Nu phm c nhn thuc loi phm thng (v d nh cc phm ch a, b,) m qut s c dch ra m ASCII tng ng. Sau , gi tr ca m qut v m ASCII c lu vo b m bn phm. B m ny c a ch 0040h:001Eh, kch thc 16 word, c t chc nh mt mng vng vi con tr u (head) lu ti a ch 0040h:001Ah, con tr cui (tail) lu ti a ch 0040h:001Ch. Nu phm c nhn l loi phm m rng (v d nh F1, F2,), trong b m s lu gi s 0 v m m rng ca phm . V d: Gi s NumLock ang l OFF, b m bn phm ang trng (head = tail = 0041Eh), khi ln lt n cc phm a, F10, , NumLock, keypad, NumLock, keypad, Delete b m s c ni dung nh sau: 0041Ch a F10 61 00 1E 44 head 2E 34 (kp) (kp) Delete 2E 00 E0 53 53 53 tail

Lu rng, vic nhn phm NumLock khng sinh ra mt thng tin no trong b m. Hai phm du chm cho cng mt m ASCII l 2Eh. Phm Delete cho cng mt m m rng d c nhn trong ch NumLock l ON hay OFF. Mt s hm ca ngt 16h (BIOS)

AH = 00h. Ly mt phm t b m bn phm. Nu b m trng, s ch cho n khi mt phm c nhn. Tr v m qut trong AH, m ASCII (hoc m m rng) trong AL. AH = 01h. Kim tra b m bn phm. Nu trng, bt c ZF. Nu khng trng, tt c ZF, c phm u tin trong b m (tr n bi con tr head), tr v m qut trong AH, m ASCII (hoc m m rng) trong AL. Tuy nhin, phm ny khng b ly ra khi b m. AH = 02h. Kim tra tnh trng cc phm c bit. Hm ny tr v byte a ch 0040h:0017h. Cc bit (I,C,N,S,A,O,L,R) ca byte ny, tnh t cao xung thp, ng vi cc phm: Insert CapsLock NumLock ScrollLock Alt Control LeftShift RightShift. Phm no trng thi ON th bit tng ng s bt. AH = 03h. Thay i tc nhn phm. AL = 05h, BH = thi gian i trc khi lp, BL = tn s lp. BH c th nhn cc gi tr t 0 (250ms) n 3 (1000 ms). BL c th nhn cc gi tr t 0 (30 ln/giy) n 1Fh (2 ln/giy). AH = 05h. Gi lp thao tc nhn phm. CH = m qut, CL = m ASCII (hoc m m rng). Hm ny ghi gi tr ca CH v CL vo b m bn phm v tr v AL = 0, nu b m cn ch trng. Tr v AL = 1 nu khng cn ch trng. Mt s hm ca ngt 21h (DOS) AH = 01h. i mt phm c nhn v tr li m ASCII ca phm trong thanh ghi AL, ng thi hin th k t ln mn hnh. Nu y l phm khng c m ASCII m ch c m m rng th AL tr v 0. nhn c m m rng, cn phi gi hm ny mt ln na. Nu Ctrl-Break c nhn th ngt 23h s c gi. AH = 08h. Hm ny ch khc hm 01h ch khng th hin ln mn hnh k t ng vi phm c nhn. AH = 07h. Hm ny khc hm 08h ch khng kim tra Ctrl-Break. AH = 0Ah. Nhp t bn phm mt xu k t c di khng qu N k t, kt thc bi m 13h (phm Enter). Vng b nh lu tr xu k t phi c chun b trc a ch DS:DX. Byte u tin a ch ny phi lu gi tr N. Khi tr v, byte th hai lu di xu nhn c (khng k k t kt thc 13h, mc d k t ny vn c lu vo vng nh). AH = 0Ch. Xa sch b m bn phm v gi mt trong cc hm 01h, 07h, 08h, 0Ah. Trong AL lu s hiu ca hm cn gi.

Ti liu tham kho


1. Nguyn Minh Tun, Gio trnh hp ng - Chng 10, HKHTN, 2002 2. Randal Hyde, The art of assembly language programming Chapter 20. 3. Dan Rollins, TechHelp v.6.0

Bi tp
Bi 1. KeyDetection. S dng cc hm lin quan n bn phm ca ngt 16h. Vit chng trnh kim tra xem c phm ch ci no c nhn khng, nu c th dng ch in y mn hnh. Nu khng th tip tc in y mn hnh bng ch ci c nhn ln trc. Nhn Esc kt thc. Bi 2. Phm g tt. S dng cc hm lin quan n bn phm ca ngt 21h, vit chng trnh cho php nhp t bn phm mt xu k t di khng qu 79. Trong qu trnh nhp, nu ngi dng nhn phm F1, chng trnh s t ng chn vo cm t DH KHTN Tp.HCM, nu nhn phm F2 chng trnh s t ng chn vo cm t Khoa CNTT BM MMT&VT. Cho php dng BackSpace sa li. Khi nhp xong, in ra di ca xu k t .

M rng
1. Trong bi tp 1, khi ngi dng nhn mt ch ci no , th ch ci c lp tc xut hin trn mn hnh khng ? C th gii thch nh th no v khong thi gian tr ny ? 2. Trong bi tp 2, lm sao cho php ngay sau khi nhn F1 thm cm t, c th nhn Esc b i cm t va thm. 3. vt qua gii hn 79 k t trong bi tp 2, cn bit thm k thut g ?

4. Vit mt chng trnh cho php xem ni dung ca b m bn phm. Dng chng trnh quan st s thay i ca b m khi bm phm.

Hng dn
Bi 1. Dng hm 01 ca ngt 16h kim tra b m. Tuy nhin phi nh rng hm ny khng ly phm c nhn ra khi b m bn phm. V vy, sau khi pht hin c phm c nhn, c th gi hm 00 ly phm ra khi b m. V d: NextKey: ; ; trong khi cha c phm no c nhn, ; ta x l nhng vic khc y ; mov int jz mov int ah,1 16h NextKey ah,0 16h ; kim tra b m ; vn khng c g, quay li ; ly ra khi b m

; ; x l phm va nhn y jmp NextKey

Bi 2. To mt mng 80 k t. Dng hm 8 ca ngt 21h kim tra phm no c nhn. Nu l phm c ASCII code khc 0, lu vo mng ng thi in ra mn hnh. Nu l phm c bit, gi hm 8 ln na ly m m rng. Sau kim tra F1 hay F2 c nhn chn cm t cn thit vo mng. V d: x l nhp xu v chn macro, tham kho on chng trnh sau mac1 db 'DH KHTN Tp.HCM$' mac2 db 'Khoa CNTT - BM MMT&VT$' ................... NextKey: mov ah,8 ; ch nhn phm, khng hin th int 21h cmp al,0 jnz NotSpec ; nu l phm thng int 21h cmp al,3bh jz InsMac1 cmp al,3ch jz InsMac2 jmp NextKey InsMac1: mov bx,offset mac1 jmp InsMac InsMac2: mov bx,offset mac2 jmp InsMac ; thm cc macro khc y ; ........

InsMac: call Insert jmp NextKey NotSpec: ; ; lu k t vo mng ;

; chn macro DS:BX vo mng

cho php sa cha bng Esc, c th kim tra m ASCII, nu l 8, vit ra 3 k t c m ASCII ln lt l 8,32,8. (3 k t ny c ngha l: li con tr, vit khong trng xa, li con tr ln na). ng thi phi gim gi tr ca bin lu tr di xu hin thi. V d: b sung tnh nng dng BckSpc, tham kho on chng trnh sau: BckSpc db 8,32,8,'$' ............... cmp al,8 jnz InsChar ; nu khng phi BckSpc, lu cmp si,0 ; kim tra di xu hin thi jz NextKey mov dx,offset BckSpc ; xa k t trn mn hnh printSt dec si ; xa trong mng jmp NextKey InsChar: cmp si,maxLen ; di qu 79 ? jz NextKey mov buffer[si],al ; lu vo mng inc si jmp NextKey V d: in ra di xu va nhp (<80, l s nguyn c hai ch s), c th vit nh sau: printUInt push push push mov div mov mov add mov int mov add mov int pop pop pop endm macro ax bx dx bh,10 bh bx,ax dl,bl dl,48 ah,2 21h dl,bh dl,48 ah,2 21h dx bx ax

Khng qun kim tra di xu hin thi trc mi thao tc thm, bt k t trong mng !

You might also like