You are on page 1of 30

Ti liu vi x l

Lp trnh hp ng

CHNG 3: LP TRNH HP NG
1. Cc tp tin .EXE v .COM
DOS ch c th thi hnh c cc tp tin dng .COM v .EXE. Tp tin .COM thng dng xy dng cho cc chng trnh nh cn .EXE dng cho cc chng trnh ln. 1.1. Tp tin .COM Tp tin .COM ch c mt on nn kch thc ti a ca mt tp tin loi ny l 64 KB. - Tp tin .COM c np vo b nh v thc thi nhanh hn tp tin .EXE nhng ch p dng c cho cc chng trnh nh. - Ch c th gi cc chng trnh con dng near. Khi thc hin tp tin .COM, DOS nh v b nh v to vng nh di 256 byte v tr 0000h, vng ny gi l PSP (Program Segment Prefix), n s cha cc thng tin cn thit cho DOS. Sau , cc m lnh trong tp tin s c np vo sau PSP v tr 100h v a gi tr 0 vo stack. Nh vy, kch thc ti a thc s ca tp tin .COM l 64 KB 256 byte PSP 2 byte stack. Tt c cc thanh ghi on u ch n PSP v thanh ghi con tr lnh IP ch n 100h, thanh ghi SP c gi tr 0FFFEh. 1.2. Tp tin .EXE Nm trong nhiu on khc nhau, kch thc thng thng ln hn 64 KB. C th gi c cc chng trnh con dng near hay far. Tp tin .EXE cha mt header u tp tin cha cc thng tin iu khin cho tp tin.

2. Khung ca mt chng trnh hp ng


Khung ca mt chng trnh hp ng c dng nh sau: TITLE Chng trnh hp ng .MODEL Kiu kch thc b nh ; Khai bo quy m s ; dng b nh .STACK Kch thc ; Khai bo dung lng ; on stack .DATA ; Khai bo on d liu msg DB 'Hello$' .CODE ; Khai bo on m main PROC CALL Subname ; Gi chng trnh con main ENDP Subname
Phm Hng Kim Khnh Trang 44

PROC

; nh ngha chng ; trnh con

Ti liu vi x l

Lp trnh hp ng

RET Subname ENDP END main Quy m s dng b nh: Bng 3.1: Loi Tiny Small Medium Compact Large Huge M t M lnh v d liu nm trong mt on M lnh trong mt on, d liu trong mt on M lnh khng nm trong mt on, d liu trong mt on M lnh trong mt on, d liu khng nm trong mt on M lnh khng nm trong mt on, d liu khng nm trong mt on v khng c mng no ln hn 64KB M lnh khng nm trong mt on, d liu khng nm trong mt on v cc mng c th ln hn 64KB

Thng thng, cc ng dng n gin ch i hi m chng trnh khng qu 64 KB v d liu cng khng ln hn 64 KB nn ta s dng dng Small: .MODEL SMALL

Khai bo kch thc stack: Khai bo stack dng dnh ra mt vng nh dng lm stack (ch yu phc v cho chng trnh con), thng thng ta chn khong 256 byte l s dng (nu khng khai bo th chng trnh dch t ng cho kch thc stack l 1 KB): .STACK 256

Khai bo on d liu: on d liu dng cha cc bin v hng s dng trong chng trnh. Khai bo on m: on m dng cha cc m lnh ca chng trnh. on m bt u bng mt chng trnh chnh v c th c cc lnh gi chng trnh con (CALL). Mt chng trnh chnh hay chng trnh con bt u bng lnh PROC v kt thc bng lnh ENDP (y l cc lnh gi ca chng trnh dch). Trong chng trnh con, ta s dng thm lnh RET tr v a ch lnh trc khi gi chng trnh con.

3. C php ca cc lnh trong chng trnh hp ng


Mt dng lnh trong chng trnh hp ng gm c cc trng (field) sau (khng nht thit phi y tt c cc trng):
Phm Hng Kim Khnh Trang 45

Ti liu vi x l

Lp trnh hp ng

Tn Lnh A: MOV Main PROC

Ton hng Ch thch AH,10h ; a gi tr 10h vo thanh ghi AH

Trng tn cha nhn, tn bin hay tn th tc. Cc tn nhn c th cha ti a 31 k t, khng cha k t trng (space) v khng c bt u bng s (A: hay Main:). Cc nhn c kt thc bng du ':'. Trng lnh cha cc lnh s thc hin. Cc lnh ny c th l cc lnh tht (MOV) hay cc lnh gi (PROC). Cc lnh tht s c dch ra m my. Trng ton hng cha cc ton hng cn thit cho lnh (AH,10h). Trng ch thch phi c bt u bng du ';'. Trng ny ch dng cho ngi lp trnh ghi cc li gii thch cho chng trnh. Chng trnh dch s b qua cc lnh nm pha sau du ;. 3.1. Khai bo d liu Khi khai bo d liu trong chng trnh, nu s dng s nh phn, ta phi dng thm ch B cui, nu s dng s thp lc phn th phi dng ch H cui. Ch rng i vi s thp lc phn, nu bt u bng ch A..F th phi thm vo s 0 pha trc. V d: 1011b 1111 1011h 3.2. ; S nh phn ; S thp phn ; S thp lc phn Khai bo bin

Khai bo bin nhm chng trnh dch cung cp mt a ch xc nh trong b nh. Ta dng cc lnh gi sau nh ngha cc bin ng vi cc kiu d liu khc nhau: DB (define byte), DW (define word) v DD (define double word). VD: A1 A2 A3 A4 A5 A6 DB DB DB DW DD DB ; nh ngha bin A1 di 1 byte (chng ; trnh dch s dng 1 byte trong b nh ; lu tr A1), tr ban u A1 = 1 ? ; Bin A2 kiu byte, khng c gi tr gn ; ban u 'A' ; Bin kiu k t 1 ; nh ngha bin A4 di 2 byte, gi tr ban ; u A4 = 1, ta cng c th dng du ? ; xc nh bin khng cn khi to gi tr ban u 1 ; Bin A5 di 4 byte 1,2,3 ; nh ngha bin mng (array) gm c 3 ; phn t, mi phn t di 1 byte (ngha l ; s dng 3 byte lu tr) vi cc gi tr ban ; u ca cc phn t ln lt l 1,2,3 10 DUP(0) ; Khai bo bin mng gm 10 phn t, mi ; phn t c chiu di 1 byte vi gi tr gn ; ban u l 0
Trang 46

A7

DB

Phm Hng Kim Khnh

Ti liu vi x l

Lp trnh hp ng

A8

DB

10

DUP(?) ; Khai bo bin mng gm 10 phn t, mi ; phn t c chiu di 1 byte, khng cn ; gn gi tr ban u

Ngoi ra ta c th dng cc ton t DUP lng vo nhau khi khai bo bin mng. Gi s ta cn khai bo mng A9 c cc gi tr gn ban u 1,2,3,1,1,3,2,2,1,1,3,2,2. Ta c th thc hin nh sau: A9 Hay: A9 Hay: A9 DB DB DB 1,2,3,1,1,3,2,2,1,1,3,2,2 1,2,3,2 DUP(1,1,3,2,2) 1,2,3,2 DUP(2 DUP(1),3,2 DUP(2))

i vi cc bin c nhiu hn 1 byte, byte thp s cha nh c a ch thp v byte cao s cha nh c a ch cao. VD: A10 DW 1234h Bin A10 gi s bt u lu ti a ch 1000h th nh 1000h cha gi tr 34h cn nh 1001h cha gi tr 12h. i vi bin kiu chui (string), thc cht l mt mng cc k t, ta c th khai bo nh sau: Hay A11 A11 DB DB 'ABCD' 65h,66h,67h,68h

Sau lnh khai bo ny th nh 1000h (gi s bin A11 lu tr ti a ch 1000h) cha 'A', 1001h cha 'B', 1002h cha 'C' v 1003h cha 'D'. 3.3. Khai bo hng Cc hng khai bo trong chng trnh hp ng bng lnh gi EQU chng trnh d hiu hn. Hng c th dng s, k t hay chui. VD: A12 A13 EQU 10 EQU 'AAA'

Sau khi s dng khai bo ny, nu ta dng lnh: MOV AH,A12 th AH = 10h A14 DB 'B',A13 th khai bo chui A14 vi gi tr gn ban u l 'BAAA'.

Phm Hng Kim Khnh

Trang 47

Ti liu vi x l

Lp trnh hp ng

4. Cc ton t trong hp ng
Ton t s hc: Bng 3.2: Ton t + * / mod + shl shr C php +bt -bt bt1*bt2 bt1/bt2 bt1 mod bt2 bt1 + bt2 bt1 bt2 bt shl n bt shr n M t S dng S m Nhn Chia Ly phn d Cng Tr Dch tri n bit Dch phi n bit

Trong bt, bt1, bt2 l cc biu thc hng, n l s nguyn. VD: MOV MOV MOV MOV AH,(8+1)*7/3 AH, 00010001b shr 2 AH,00010001b shl 2 AH,100 mod 3 ; AH 21 ; AH 0000 0100b ; AH 0100 0100b ; AH 1

Ton t logic: Bao gm cc ton t AND, OR, NOT, XOR VD: MOV AH,10 OR 4 AND 2 MOV AH, 0F0h AND 7Fh ; AH = 10 ; AH = 70h

Ton t quan h: Cc ton t quan h so snh 2 biu thc, cho gi tr true (-1) nu iu kin tho v false (0) nu khng tho. Bng 3.3: Ton t EQ NE LT LE GT GE C php bt1 EQ bt2 bt1 NE bt2 bt1 LT bt2 bt1 LE bt2 bt1 GT bt2 bt1 GE bt2 M t Bng Khng bng Nh hn Nh hn hay bng Ln hn Ln hn hay bng

Phm Hng Kim Khnh

Trang 48

Ti liu vi x l

Lp trnh hp ng

Cc ton t cung cp thng tin: Ton t SEG: SEG bt Ton t SEG xc nh a ch on ca biu thc bt. bt c th l bin, nhn, hay cc ton hng b nh. Ton t OFFSET: OFFSET bt Ton t OFFSET xc nh a ch offset ca biu thc bt. bt c th l bin, nhn, hay cc ton hng b nh. VD: MOV AX,SEG A MOV DS,AX MOV AX,OFFSET A ; Np a ch on v a ch offset ; ca bin A vo cp thanh ghi ; DS:AX

Ton t ch s [ ]: (index operator) Ton t ch s thng dng vi ton hng trc tip v gin tip. Ton t (:) (segment override operator) Segment:bt Ton t : quy nh cch tnh a ch i vi segment c ch. Segment l cc thanh ghi on CS, DS, ES, SS. Ch rng khi s dng ton t : kt hp vi ton t [ ] th segment: phi t ngoi ton t [ ]. VD: Cch vit [CS:BX] l sai, ta phi vit CS:[BX] Ton t TYPE: TYPE bt Tr v gi tr biu th dng ca biu thc bt. - Nu bt l bin th s tr v 1 nu bin c kiu byte, 2 nu bin c kiu word, 4 nu bin c kiu double word. - Nu bt l nhn th tr v 0FFFFh nu bt l near v 0FFFEh nu bt l far. - Nu bt l hng th tr v 0. Ton t LENGTH: LENGTH bt Tr v s cc n v cp cho bin bt Ton t SIZE: SIZE bt Tr v tng s cc byte cung cp cho bin bt VD: A DD 100 DUP(?) MOV AX,LENGTH A ; AX = 100 MOV AX,SIZE A ; AX = 400
Trang 49

Phm Hng Kim Khnh

Ti liu vi x l

Lp trnh hp ng

Cc ton t thuc tnh: Ton t PTR: Loai PTR bt Ton t ny cho php thay i dng ca biu thc bt. - Nu bt l bin hay ton hng b nh th Loai l byte, word hay dword. - Nu bt l nhn th Loai l near hay far. VD: A DW 100 DUP(?) B DD ? MOV AH,BYTE PTR A MOV AX,WORD PTR B

; a byte u tin trong mng A ; vo thanh ghi AH ; a 2 byte thp trong bin B ; vo thanh ghi AX

Ton t HIGH, LOW: HIGH bt LOW bt Cho gi tr ca byte cao v thp ca biu thc bt, bt phi l mt hng. VD: A EQU 1234h MOV AH,HIGH A MOV AH,LOW A ; AH 12h ; AH 34h

5. Cc cch nh a ch trong hp ng
Ton hng trc tip: Ton hng trc tip l mt biu thc hng xc nh. Cc hng s c th dng thp phn (c du v khng du), nh phn, thp lc phn, cc hng s nh ngha bng lnh EQU, VD: MOV MOV MOV MOV MOV MOV AH,10 AH,1010b AH,0Ah AH,A12 AX,OFFSET msg AX,SEG msg

Ton hng thanh ghi: Cc thanh ghi c th s dng trong php nh a ch thanh ghi l AH, BH, CH, DH, AL, BL, CL, DL, AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, ES, SS. Ton hng b nh: Trc tip: Ton hng ny xc nh d liu lu trong b nh ti mt a ch xc nh khi dch, a ch ny l mt biu thc hng (c th kt hp vi ton t ch s [ ] hay ton t +, -, :). Thanh ghi on mc nh l thanh ghi DS nhng ta c th dng ton t : ch thanh ghi on khc.
Phm Hng Kim Khnh Trang 50

Ti liu vi x l

Lp trnh hp ng

A DW 1000h B DB 100 DUP(0) MOV AX,A ; Chuyn ni dung ca bin A vo MOV AX,[A] ; thanh ghi AX MOV AH,B ; Truy xut phn t u tin ca MOV AH,B[0] ; mng B MOV AH,B + 1 ; Truy xut phn t th hai ca MOV AH,B[1] ; mng B MOV AH,B + 5 ; Truy xut phn t th 6 ca MOV AH,B[5] ; mng B Ch rng lnh MOV AX,[1000h] s chuyn gi tr 1000h vo thanh ghi AX. Nu mun chuyn ni dung ti nh 1000h vo thanh ghi AX th phi dng lnh MOV AX,DS:[1000h] hay MOV AX,DS:1000h Gin tip: Ton hng b nh gin tip cho php dng cc thanh ghi BX, BP, SI, DI ch cc gi tr trong b nh. VD: MOV BX,2 MOV SI,3 MOV AH,B[BX] ; Chuyn phn t th 3 ca mng B ; vo thanh ghi AH MOV AH,B[BX+1] ; Chuyn phn t th 4 ca mng B MOV AH,B[BX]+1 ; vo thanh ghi AH (BX + 1 = 3) MOV AH,B[BX+SI] ; Chuyn phn t th 6 ca mng B MOV AH,B[BX][SI] ; vo thanh ghi AH MOV AH,[B+BX+SI] ; BX + SI = 5 MOV AH,[B][BX][SI] MOV AH,B[BX+SI+5] ; Chuyn phn t th 11 ca mng B MOV AH,B[BX][SI]+5 ; vo thanh ghi AH MOV AH,[B+BX+SI+5] ; BX + SI + 5 = 10

VD:

6. To v thc thi chng trnh hp ng


Ta c th to v thc thi mt chng trnh hp ng trn mt my PC theo cc bc sau: - Dng mt chng trnh son tho vn bn khng nh dng (nh NC) to mt tp tin cha chng trnh hp ng (gn phn m rng ca tp tin ny l .ASM, gi s l TEMP.ASM). - - Dng chng trnh TASM.EXE (Turbo Assembler) dch ra m my dng .OBJ: TASM TEMP - Sau khi dch xong, ta s c file TEMP.OBJ cha cc m my ca chng trnh. chuyn thnh file thc thi, ta dng chng trnh TLINK.EXE chuyn thnh tp tin .EXE: TLINK TEMP - - Nu tp tin thc thi dng .COM th ta dng thm chng trnh EXE2BIN.EXE: EXE2BIN TEMP TEMP.COM

Phm Hng Kim Khnh

Trang 51

Ti liu vi x l

Lp trnh hp ng

7. Tp lnh hp ng
7.1. Nhm lnh chuyn d liu

7.1.1. Nhm lnh chuyn d liu a dng Lnh MOV dst,src: chuyn ni dung ton hng src vo ton hng dst. Ton hng ngun src c th l thanh ghi (reg), b nh (mem) hay gi tr tc thi (immed); ton hng ch dst c th l reg hay mem. Lnh MOV c th c cc trng hp sau: Reg8 reg8 MOV AL,AH Reg16 reg16 MOV AX,BX Mem8 reg8 MOV [BX],AL Reg8 mem8 MOV AL,[BX] Mem16 reg16 MOV [BX],AX Reg16 mem16 MOV AX,[BX] Reg8 immed8 MOV AL,04h Mem8 immed8 MOV mem[BX],01h Reg16 immed16 MOV AL,0F104h Mem16 immed16 MOV mem[BX],0101h SegReg reg16 MOV DS,AX SegReg mem16 MOV DS,mem Reg16 segreg MOV AX,DS Mem16 segreg MOV [BX],DS - Lnh MOV khng nh hng n cc c. - Khng th chuyn trc tip d liu gia hai nh m phi thng qua mt thanh ghi MOV AX,mem1 MOV mem2,AX - Khng th chuyn gi tr trc tip vo thanh ghi on MOV AX,1010h MOV DS,AX - Khng th chuyn trc tip gia 2 thanh ghi on - Khng th dng thanh ghi CS lm ton hng ch Lnh XCHG dst,src: (Exchange) hon chuyn ni dung 2 ton hng. Ton hng ch c th l reg hay mem. Lnh XCHG khng nh hng n cc c Khng th dng cho cc thanh ghi on Lnh PUSH src: ct ni dung mt thanh ghi vo stack. Ton hng l reg16 Lnh POP dst: ly d liu 16 bit t stack a vo ton hng dst. Ta c th dng nhiu lnh PUSH ct d liu vo stack nhng khi dng lnh POP ly d liu ra th phi dng theo th t ngc li. PUSH AX PUSH BX
Phm Hng Kim Khnh Trang 52

Ti liu vi x l

Lp trnh hp ng

PUSH POP POP POP

CX CX BX AX

Lnh XLAT [src]: chuyn ni dung ca nh 8 bit vo thanh ghi AL. a ch nh xc nh bng cp thanh ghi DS:BX (nu khng ch ra src) hay src, a ch offset cha trong thanh ghi AL. Lnh XLAT tng ng vi cc lnh: MOV AH,0 MOV SI,AX MOV AL,[BX+SI] 7.1.2. Nhm lnh chuyn a ch Lnh LEA reg16,mem16: (Load Effective Address) chuyn a ch offset ca ton hng b nh vo thanh ghi reg16. Lnh ny s tng ng vi MOV reg16, OFFSET mem16 Lnh LDS reg16,mem32: (Load pointer using DS) chuyn ni dung b nh ton hng mem32 vo cp thanh ghi DS:reg16. Lnh LDS AX,mem tng ng vi: MOV AX,mem MOV BX,mem+2 MOV DS,BX Lnh LES reg16,mem32: (Load pointer using ES) ging nh lnh LDS nhng dng cho thanh ghi ES 7.1.3. Nhm lnh chuyn c hiu Lnh LAHF: (Load AH from flag) chuyn cc c SF, ZF, AF, PF v CF vo cc bit 7,6,4,2 v 0 ca thanh ghi AH (3 bit cn li khng i) Lnh SAHF: (Store AH into flag) chuyn cc bit 7,6,4,2 v 0 ca thanh ghi AH vo cc c SF, ZF, AF, PF v CF. Lnh PUSHF: chuyn thanh ghi c vo stack Lnh POPF: ly d liu t stack chuyn vo thanh ghi c 7.1.4. Nhm lnh chuyn d liu qua cng Mi I/O port giao tip vi CPU s c mt a ch 16 bit cho n. CPU gi hay nhn d liu t cng bng cch ch n a ch cng . Tu theo chc nng m cng c th: ch c d liu (input port), ch ghi d liu (output port) hay c th c v ghi d liu (input/output port).

Phm Hng Kim Khnh

Trang 53

Ti liu vi x l

Lp trnh hp ng

Lnh IN: c d liu t cng v a vo thanh ghi AL IN AL,port8 IN AL,DX Nu a ch port ch c 8 bit th c th a gi tr trc tip vo, nu l 16 bit th phi thng qua thanh ghi AX. Lnh OUT: ghi d liu trong thanh ghi AL ra cng OUT port8,AL OUT DX,AL VD: MOV OUT MOV MOV OUT MOV IN AL,3 61h,AL AL,1 DX,03F8h DX,AL DX,03F8h AL,DX ; Gi gi tr 03h ra cng 61h ; Xut ra cng my in ; c d liu t cng my in

7.2.

Nhm lnh chuyn iu khin

7.2.1. Lnh nhy khng iu kin JMP JMP label JMP reg/mem Lnh JMP dng chuyn iu khin chng trnh t v tr ny sang v tr khc (thay i ni dung cp thanh ghi CS:IP). 7.2.2. Lnh nhy c iu kin Lnh nhy c iu kin ch s dng cho cc nhn nm trong khong t 127 n 128 byte so vi v tr ca lnh. Lnh JA label: (Jump if Above) Nu CF = 0 v ZF = 0 th JMP label Lnh JAE label: (Jump if Above or Equal) Nu CF = 0 th JMP label Lnh JB label: (Jump if Below) Nu CF = 1 th JMP label Lnh JBE label: (Jump if Below or Equal) Nu CF = 1 hoc ZF = 1 th JMP label Lnh JNA label: (Jump if Not Above) Ging lnh JBE Lnh JNAE label: (Jump if Not Above or Equal) Ging lnh JB

Phm Hng Kim Khnh

Trang 54

Ti liu vi x l

Lp trnh hp ng

Lnh JNB label: (Jump if Not Below) Ging lnh JAE Lnh JNBE label: (Jump if Not Below or Equal) Ging lnh JA Lnh JG label: (Jump if Greater) Nu SF = OF v ZF = 0 th JMP label Lnh JGE label: (Jump if Greater or Equal) Nu SF = OF th JMP label Lnh JL label: (Jump if Less) Nu SF <> OF th JMP label Lnh JLE label: (Jump if Less or Equal) Nu CF <> OF hoc ZF = 1 th JMP label Lnh JNG label: (Jump if Not Greater) Ging lnh JLE Lnh JNGE label: (Jump if Not Greater or Equal) Ging lnh JL Lnh JNL label: (Jump if Not Less) Ging lnh JGE Lnh JNLE label: (Jump if Not Less or Equal) Ging lnh JG Lnh JC label: (Jump if Carry) Ging lnh JB Lnh JNC label: (Jump if Not Carry) Ging lnh JNB Lnh JZ label: (Jump if Zero) Nu ZF = 1 th JMP label Lnh JE label: (Jump if Equal) Ging lnh JZ Lnh JNZ label: (Jump if Not Zero) Nu ZF = 0 th JMP label Lnh JNE label: (Jump if Equal) Ging lnh JNZ

Phm Hng Kim Khnh

Trang 55

Ti liu vi x l

Lp trnh hp ng

Lnh JS label: (Jump on Sign) Nu SF = 1 th JMP label Lnh JNS label: (Jump if No Sign) Nu SF = 0 th JMP label Lnh JO label: (Jump on Overflow) Nu OF = 1 th JMP label Lnh JNO label: (Jump if No Overflow) Nu OF = 0 th JMP label Lnh JP label: (Jump on Parity) Nu PF = 1 th JMP label Lnh JNP label: (Jump if No Parity) Nu PF = 0 th JMP label Lnh JCXZ label: (Jump if CX Zero) Nu CX = 1 th JMP label 7.2.3. Lnh so snh CMP left(reg/mem), right(reg/mem/immed) Lnh CMP dng so snh ni dung 2 ton hng, kt qu cha vo thanh ghi c v khng lm thay i ni dung cc ton hng. VD: on chng trnh so snh 2 s A v B: A >B th nhy n label1, A = B th nhy n label2, A < B th nhy n label3. MOV AX,A CMP AX,B JG label1 JL label2 JMP label3 7.2.4. Cc lnh vng lp Lnh LOOP: LOOP label M t: CX = CX 1 Nu CX <> 0 th JMP label Lnh LOOPE: LOOPE label M t: CX = CX 1 Nu (ZF = 1) v (CX <> 0) th JMP label

Phm Hng Kim Khnh

Trang 56

Ti liu vi x l

Lp trnh hp ng

Lnh LOOPZ: Ging lnh LOOPE Lnh LOOPNE: LOOPNE label M t: CX = CX 1 Nu (ZF = 0) v (CX <> 0) th JMP label Lnh LOOPNZ: Ging lnh LOOPNE 7.2.5. Lnh lin quan n chng trnh con Lnh CALL: Lnh CALL dng gi mt chng trnh con, c th l near hay far. CALL label ; Gi chng trnh con ti v tr xc nh ; bi nhn label CALL reg/mem ; Gi chng trnh con ti v tr xc nh ; trong reg/mem Lnh RET: (return) RET [n] RETN [n] RETF [n] Lnh RET dng kt thc chng trnh con, iu khin s c a v a ch trc khi gi chng trnh con. RETN kt thc chng trnh con dng near v RETF dng kt thc chng trnh con dng far. Trong trng hp lnh RET c hng s n theo sau th s cng vi thanh ghi SP gi tr n (n phi l s chn). Lnh ny dng loi b mt s tham s chng trnh con s dng ra khi stack. 7.3. Nhm lnh x l s hc

7.3.1. X l php cng Lnh ADD dst,src: dst dst + src Ton hng src c th l reg, mem hay immed cn ton hng dst l reg hay mem. thp + C PF: = 1 khi kt qu php cng c tng 8 bit thp l mt s chn. + C ZF: = 1 khi kt qu php cng l 0. + C SF: = 1 nu kt qu php cng l mt s m + C OF: = 1 nu kt qu php cng b sai du, ngha l vt ra ngoi phm vi ln nht hay nh nht m s c du c th cha trong ton hng dst.
Phm Hng Kim Khnh Trang 57

Khng th cng trc tip 2 thanh ghi on Lnh ADD nh hng n cc c sau: + C CF: = 1 khi kt qu php cng c nh hay c mn + C AF: = 1 khi kt qu php cng c nh hay c mn i vi 4 bit

Ti liu vi x l

Lp trnh hp ng

Lnh ADC dst, src: (Add with Carry) dst dst + src + CF Lnh ADC thng dng cng cc s ln hn 16 bit. Lnh INC dst: (Increment) dst dst + 1 Dst c th l reg hay mem. Lnh AAA: (ASCII Adjust for Addition) Hiu chnh kt qu php cng 2 s BCD dng khng nn (mi ch s BCD lu bng 1 byte). MOV AX,9 MOV BX,3 ADD AL,BL ; Kt qu l AX = 0Ch AAA ; AX = 0102h (AH = 1, AL = 2) Lnh AAA ch nh hng n cc c AF v CF, khng nh hng n cc c cn li. Lnh DAA: (Decimal Adjust for Addition) Hiu chnh kt qu php cng 2 s BCD dng nn (mi ch s BCD lu bng 4 bit, ngha l 1 byte biu din c cc s nguyn t 0 n 99). VD: MOV AX,4338h ADD AL,AH DAA ; AX 437Bh ; AX 4381h (43 + 38 = 81) VD:

Lnh DAA ch nh hng n cc c AF, CF, PF, SF, ZF v khng nh hng n thanh ghi AH. 7.3.2. X l php tr Lnh SUB dst,src: dst dst - src Ton hng src c th l reg, mem hay immed cn ton hng dst ch c th l reg hay mem. - Khng th tr trc tip thanh ghi on - nh hng n cc c AF, CF, OF, PF, SF v ZF. Lnh SBB dst,src: dst dst src CF Lnh ADC thng dng tr cc s ln hn 16 bit. Lnh DEC dst: (decrement) dst dst 1 dst l reg hay mem. Lnh DEC nh hng n cc c AF, OF, PF, SF, ZF.

Phm Hng Kim Khnh

Trang 58

Ti liu vi x l

Lp trnh hp ng

Lnh NEG dst: dst - dst dst l reg hay mem. Lnh NEG nh hng n cc c: CF = 1 nu ni dung kt qu l s khc 0. SF = 1 nu ni dung kt qu l s m khc 0. PF = 1 nu tng 8 bit thp l mt s chn. ZF = 1 nu ni dung kt qu l 0. OF = 1 nu ni dung ton hng dst l 80h (dng byte) hay 8000h (dng word). VD: Nu mun thc hin php ton 100 AH, ta khng th cng lnh: SUB 100,AH m phi dng lnh: SUB AH,100 NEG AH Lnh AAS: (Ascii Adjust for Substract) Hiu chnh kt qu php tr 2 s BCD dng khng nn (mi ch s BCD lu bng 1 byte). Lnh AAS ch nh hng c AF v CF. Lnh DAS: (Decimal Adjust for Substract) Hiu chnh kt qu php tr 2 s BCD dng nn (mi ch s BCD lu bng 4 bit). Lnh AAS ch nh hng c AF v CF. 7.3.3. X l php nhn Lnh MUL src: Nu src l reg hay mem 8 bit: AX AL*src Nu src l reg hay mem 16 bit: DX:AX AX*src Lnh MUL ch nh hng n c CF v OF. Lnh IMUL src: Ging nh lnh MUL nhng kt qu l s c du. Lnh AAM: (Ascii Adjust for Multiple) Hiu chnh kt qu php nhn 2 s BCD dng khng nn, lnh AAM thc hin chia AL cho 10, lu phn thng vo AL v phn d vo AH. Lnh AAM nh hng n cc c PF, SF v ZF. 7.3.4. X l php chia Lnh DIV src: Nu src l reg/mem 8 bit: AL AX DIV src v AH AX MOD src Nu src l reg/mem 16 bit: AX DX:AX DIV src v DX DX:AX MOD src Lnh DIV khng nh hng n cc c nhng xy ra trn trong cc trng hp sau: - Chia cho 0
Phm Hng Kim Khnh Trang 59

Ti liu vi x l

Lp trnh hp ng

Thng ln hn 256 i vi dng 8 bit. Thng ln hn 65536 i vi dng 16 bit.

Lnh IDIV src: Ging nh lnh DIV nhng kt qu l s c du. Cc trng hp trn: - Chia cho 0 - Thng nm ngoi khong (-128,127) i vi dng 8 bit. - Thng nm ngoi khong (-32767,32768) i vi dng 16 bit. Lnh AAD: (Ascii Adjust for Division) Hiu chnh kt qu php chia 2 s BCD dng khng nn. Lu rng lnh AAD phi c thc hin trc lnh chia. Sau khi thc hin chia th phi hiu chnh li dng BCD bng cch dng lnh AAM. Lnh CBW: (Convert Byte to Word) Nu AL < 80h th AH = 0, ngc li AH = 0FFh Lnh CBW dng chuyn s nh phn c du 8 bit thnh s nh phn c du 16 bit. Lnh CWD: (Convert Word to Double word) Nu AX < 8000h th DX = 0, ngc li DX = 0FFFFh Lnh CWD dng chuyn s nh phn c du 16 bit thnh s nh phn c du 32 bit cha trong DX:AX. 7.3.5. Dch chuyn v quay Lnh SHL: (Shift Logical Left) SHL dst,1 SHL dst,CL Dch tri 1 bit hay CL bit. CF dst7 dst6 Lnh SHR: (Shift Logical Right) SHR dst,1 SHR dst,CL Dch phi 1 bit hay CL bit. 0 dst7 dst6 Lnh SAL: ging SHL Lnh SAR: Ging nh lnh SHR nhng gi tr bit dst7 khng thay i, ngha l dst7 dst7 dst6 dst0 CF Lnh ROL: (Rotate Left) ROL dst,1 ROL dst,CL Quay tri 1 bit hay CL bit. CF dst7
Phm Hng Kim Khnh

dst0

dst0

CF

dst6

dst0

dst7
Trang 60

Ti liu vi x l

Lp trnh hp ng

Lnh ROR: (Rotate Right) ROR dst,1 ROR dst,CL Quay phi 1 bit hay CL bit. dst0 dst7

dst6

dst0

CF

Lnh RCL: (Rotate though Carry Left) RCL dst,1 RCL dst,CL Quay tri 1 bit hay CL bit. CF dst7 dst6 Lnh RCR: (Rotate though Carry Right) RCR dst,1 RCR dst,CL Quay phi 1 bit hay CL bit. CF dst7 dst6 7.3.6. Cc lnh logic

dst0

CF

dst0

CF

Lnh AND: AND dst,src dst dst AND src CF 0, OF 0 Src l reg, mem hay immed cn dst l reg, mem. Lnh OR: OR dst,src dst dst OR src CF 0, OF 0 Lnh XOR: XOR dst,src dst dst XOR src CF 0, OF 0 Lnh NOT: NOT dst dst NOT dst Lnh NOT khng nh hng n cc c. Lnh TEST: TEST dst,src Lnh TEST thc hin php ton AND 2 ton hng nhng ch nh hng n cc c v khng nh hng n ton t.

Phm Hng Kim Khnh

Trang 61

Ti liu vi x l

Lp trnh hp ng

7.4.

Nhm lnh x l chui

Bao gm cc lnh sau: - Lnh MOVS: chuyn d liu t vng nh ny sang vng nh khc. + MOVSB: chuyn 1 byte t v tr ch n bi SI n v tr ch bi DI. Nu DF = 0 th SI SI + 1, DI DI + 1 cn nu DF = 1 th SI SI - 1, DI DI - 1. + MOVSW: chuyn 1 word t v tr ch n bi SI n v tr ch bi DI. Nu DF = 0 th SI SI + 2, DI DI + 2 cn nu DF 1 th SI SI - 2, DI DI - 2. Lnh CMPS: so snh ni dung 2 vng nh + CMPSB: so snh 1 byte ti v tr ch n bi SI v ti v tr ch bi DI. Nu DF = 0 th SI SI + 1, DI DI + 1 cn nu DF 1 th SI SI - 1, DI DI - 1. + CMPSW: so snh 1 word ti v tr ch n bi SI v ti v tr ch bi DI. Nu DF = 0 th SI SI + 2, DI DI + 2 cn nu DF = 1 th SI SI - 2, DI DI - 2. Lnh SCAS: tm mt phn t trong vng nh, a ch vng nh xc nh bng cp thanh ghi ES:DI, gi tr cn tm t trong thanh ghi AL, nu tm thy th ZF = 1. Gi tr ca DI v SI thay i ging nh trn. Lnh LODS: a mt byte hay word c a ch xc nh bi cp thanh ghi DS:SI vo thanh ghi AL hay AX. Gi tr ca DI v SI thay i ging nh trn. Lnh STOS: chuyn ni dung ca AL hay AX vo vng nh xc nh bi cp thanh ghi ES:DI. Gi tr ca DI v SI thay i ging nh trn. -

8. Cc cu trc c bn trong lp trnh hp ng


8.1. Cu trc tun t Cu trc tun t l cu trc n gin nht. Trong cu trc tun t, cc lnh c sp xp tun t, lnh ny tip theo lnh kia. Lnh 1 Lnh 2 Lnh n VD: Cng 2 gi tr ca thanh ghi BX v CX, ri nhn i kt qu, kt qu cui cng cha trong AX MOV AX,BX ADD AX,CX ; Cng BX vi CX SHL AX,1 ; Nhn i

Phm Hng Kim Khnh

Trang 62

Ti liu vi x l

Lp trnh hp ng

8.2.

Cu trc IF THEN, IF THEN ELSE

IF iu kin THEN Cng vic IF iu kin THEN Cng vic1 ELSE Cng vic2 VD: Gn BX = |AX| CMP AX,0 ; AX > 0? JNL DUONG ; AX dng NEG AX ; Nu AX < 0 th o du DUONG: MOV BX,AX NEXT: VD: Gn CL gi tr bit du ca AX CMP AX,0 ; AX > 0? JNS AM ; AX m MOV CL,1 ; CL = 1 (AX dng) JMP NEXT AM: MOV CL,0 ; CL = 0 (AX m) NEXT: 8.3. Cu trc CASE

CASE Biu thc Gi tr 1: Cng vic 1 Gi tr 2: Cng vic 2 Gi tr n: Cng vic n END VD: Nu AX > 0 th BH = 0, nu AX < 0 th BH = 1. Ngc li BH = 2 CMP AX,0 JL AM JE KHONG JG DUONG DUONG: MOV BH,0 JMP NEXT AM: MOV BH,1 JMP NEXT KHONG: MOV BH,2 NEXT: 8.4. Cu trc FOR

FOR S ln lp DO Cng vic VD: Cho vng nh M di 200 bytes trong on d liu, chng trnh m s ch A trong vng nh M nh sau: MOV CX,200 ; m 200 bytes MOV BX,OFFSET M ; Ly a ch vng nh XOR AX,AX ; AX = 0
Phm Hng Kim Khnh Trang 63

Ti liu vi x l

Lp trnh hp ng

NEXT: ChuA:

CMP BYTE PTR [BX],'A'; So snh vi ch A JNZ ChuA ; Nu khng phi l ch A th tip INC AX ; tc, ngc li th tng AX INC BX LOOP NEXT

8.5.

Cu trc lp WHILE

WHILE iu kin DO Cng vic VD: Chng trnh c vng nh bt u ti a ch 1000h vo thanh ghi AH, n khi gp k t '$' th thot: MOV BX,1000h CONT: CMP AH,'$' JZ NEXT MOV AH,DS:[BX] JMP CONT NEXT: 8.6. Cu trc lp REPEAT

REPEAT Cng vic UNTIL iu kin VD: Chng trnh c vng nh bt u ti a ch 1000h vo thanh ghi AH, n khi gp k t '$' th thot: MOV BX,1000h CONT: MOV AH,DS:[BX] CMP AH,'$' JZ NEXT JMP CONT NEXT:

9. Cc ngt ca 8086
Bng 3.4: Vector ngt 00h 01h 02h 03h 04h 05h 06h - 07h 08h 09h 0Ah 0Bh - 0Ch
Phm Hng Kim Khnh

Cng dng CPU: tc ng khi chia cho 0 CPU: chng trnh thc thi tng bc CPU: ngt khng che c CPU: to im dng chochng trnh CPU: tc ng khi kt qu s hc trn Tc ng khi nhn Print Screen Dnh ring Tc ng bi nhp ng h (18.2 ln/s) Tc ng khi c phm nhn Dnh ring Tc ng phn cng lin lc ni tip
Trang 64

Ti liu vi x l

Lp trnh hp ng

0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h 21h 22h 23h 24h 25h 26h 27h 28h 3Fh 40h 41h 42h 45h 46h 47h 49h 4Ah 4Bh 67h 68h 6Fh 70h 71h 7Fh 80h 85h 86h F0h F1h FFh 9.1. Ngt 21h

a cng a mm My in BIOS: mn hnh BIOS: xc nh cu hnh my tnh BIOS: thng bo kch thc RAM BIOS: gi cc phc v a cng/mm BIOS: giao tip ni tip BIOS: truy xut cassette hay m rng ngt BIOS: xut / nhp bn phm BIOS: my in Xm nhp ROM basic BIOS: khi ng my tnh BIOS: ngy / gi h thng Ly iu khin t ngt bn phm Ly iu khin t ngt ng h (sau int 08h) a ch bng tham s mn hnh a ch bng tham s a a ch b m k t DOS: kt thc chng trnh DOS: cc chc nng DOS a ch cn chuyn khi kt thc chng trnh a ch cn chuyn khi gp Ctrl Break a ch cn chuyn khi gp li DOS: c a cng / mm DOS: ghi a cng / mm DOS: chm dt chng trnh v thng tr Dnh ring cho DOS BIOS: cc chc nng a mm Bng thng s a cng th nht Dnh ring Bng thng s a cng th hai nh ngha do ngi s dng Gi bo hiu (ch trong AT) nh ngha do ngi s dng Khng s dng ng h thi gian thc (ch trong AT) Dnh ring Dnh ring S dng bi chng trnh thng dch BASIC Khng s dng

Hm 01h: nhp mt k t t bn phm v hin k t nhp ra mn hnh. Nu khng c k t nhp, hm 01h s i cho n khi nhp. Gi: AH = 01h Tr v: AL cha m ASCII ca k t nhp
Trang 65

Phm Hng Kim Khnh

Ti liu vi x l

Lp trnh hp ng

MOV AH,01h INT 21h

; AL cha m ASCII ca k t nhp

Hm 02h: xut mt k t trong thanh ghi DL ra mn hnh ti v tr con tr hin hnh Gi AH = 02h, DL = m ASCII ca k t Tr v: khng c

MOV AH,02h MOV DL,'A' INT 21h Hm 08h: ging hm 01h nhng khng hin th k t ra mn hnh Hm 09h: xut mt chui k t ra mn hnh ti v tr con tr hin hnh, a ch chui c cha trong DS:DX v phi c kt thc bng k t $ Gi AH = 09h, DS:DX = a ch chui Tr v: khng c

.DATA Msg DB 'Hello$' MOV AH,09h LEA DX,Msg INT 21h Hm 0Ah: nhp mt chui k t t bn phm (ti a 255 k t), dng phm ENTER kt thc chui - Gi AH = 0Ah, DS:DX = a ch lu chui - Tr v: khng c Chui phi c dng sau: - Byte 0: S byte ti a cn c (k c k t Enter) - Byte 1: s byte c - Byte 2: lu cc k t c .DATA Msg DB DB DB MOV LEA INT 101 ? 101 ; c ti a 100 k t DUP(?)

AH,0Ah DX,Msg 21h

Hm 4Ch: kt thc chng trnh MOV AH,4Ch INT 21h


Phm Hng Kim Khnh Trang 66

Ti liu vi x l

Lp trnh hp ng

9.2.

Ngt 10h

Xo mn hnh: - Gi AX = 02h - Tr v: khng c MOV AX,02h INT 10h Chuyn to con tr: - Gi AH = 02h, DH = dng, DL = ct MOV AH,02h MOV DX,0F15h INT 10h

10. Truyn tham s gia cc chng trnh


Trong lp trnh, mt vn ta cn quan tm l truyn tham s gia chng trnh chnh v chng trnh con. thc hin truyn tham s, ta c th dng cc cch sau y: - Truyn tham s qua thanh ghi - Truyn tham s qua nh (bin) - Truyn tham s qua nh do thanh ghi ch n - Truyn tham s qua stack 10.1. Truyn tham s qua thanh ghi Ta thc hin truyn tham s qua thanh ghi bng cch: mt chng trnh con s a gi tr vo thanh ghi v chong trnh con khc s x l gi tr trn thanh ghi . VD: Cng gi tr ti 2 nh 1000h v 1001h, kt qu cha trong 1002h (bye cao) v 1003h (byte thp). .MODEL SMALL .STACK 100h .CODE main PROC MOV AX,@DATA MOV DS,AX ; a gi tr vo MOV BYTE PTR DS:[1000h],10h MOV BYTE PTR DS:[1001h],0FFh ; cc nh CALL Read CALL Sum Mov AH,4Ch INT 21h main ENDP Read PROC ; c d liu vo thanh ghi AX MOV AH,DS:[1000h] MOV AL,DS:[1001h] RET Read ENDP ; X l d liu ti thanh ghi AX
Phm Hng Kim Khnh Trang 67

Ti liu vi x l

Lp trnh hp ng

Sum PROC ADD JZ MOV next: MOV RET Sum ENDP END main 10.2.

AH,AL next DS:[1003h],1 DS:[1002h],AH

Truyn tham s qua nh (bin)

Qu trnh truyn tham s cng ging nh trn nhng thay v thc hin thng qua thanh ghi, ta s thc hin thng qua cc nh. VD: Cng gi tr ti 2 nh m1 v m2, kt qu cha trong m3 (bye cao) v m4 (byte thp). .MODEL SMALL .STACK 100h .DATA m1 db ? m2 db ? m3 db ? m4 db ? .CODE main PROC MOV AX,@data MOV DS,AX MOV m1,10h ; a gi tr vo MOV m2,0FFh ; cc nh CALL Sum MOV AH,4Ch INT 21h main ENDP Sum PROC MOV m4,0 MOV AH,m1 ADD AH,m2 JNC next MOV m4,1 next: MOV m3,AH RET Sum ENDP END main 10.3. Truyn tham s qua nh do thanh ghi ch n Trong cch truyn tham s ny, ta dng cc thanh ghi SI, DI, BX ch a ch offset ca cc tham s cn thanh ghi on mc nh l DS.

Phm Hng Kim Khnh

Trang 68

Ti liu vi x l

Lp trnh hp ng

VD: Cng gi tr ti 2 nh m1 v m2, kt qu cha trong m3 (bye cao) v m4 (byte thp). .MODEL SMALL .STACK 100h .DATA m1 db ? m2 db ? m3 db ? m4 db ? .CODE main PROC MOV AX,@data MOV DS,AX LEA SI,m1 LEA DI,m2 LEA BX,m3 MOV [SI],10h ; a gi tr vo MOV [DI],0FFh ; cc nh CALL Sum MOV AH,4Ch INT 21h main ENDP Sum PROC MOV AL,[SI] ADD AL,[DI] JZ next MOV [BX+1],1 next: MOV [BX],AL RET Sum ENDP END main 10.4. Truyn tham s qua stack Trong phng php truyn tham s ny, ta dng stack lm ni cha cc tham s cn truyn thng qua cc tc v PUSH v POP. VD: Cng gi tr ti 2 nh m1 v m2, kt qu cha trong m3 (byte cao) v m4 (byte thp). .MODEL SMALL .STACK 100h .DATA m1 dw ? m2 dw ? m3 dw ? m4 dw ? .CODE main PROC MOV AX,@data
Phm Hng Kim Khnh Trang 69

Ti liu vi x l

Lp trnh hp ng

MOV LEA LEA MOV MOV PUSH PUSH CALL POP POP MOV INT main ENDP Sum PROC POP POP POP ADD JNC PUSH next: PUSH PUSH RET Sum ENDP END main

DS,AX SI,m1 DI,m2 [SI],1234h [DI],0FEDCh m1 m2 Sum m3 m4 AH,4Ch 21h

; a gi tr vo ; cc nh ; a vo stack ; Ly kt qu a vo stack

DX ; Lu li a ch tr v ca lnh CALL AX ; Ly d liu t stack BX AX,BX next 1 AX DX ; Tr li a ch tr v ca lnh CALL

11. Cc v d minh ho
11.1. In chui k t ra mn hnh .MODEL SMALL .STACK 100h .DATA msg DB 'Hello$' .CODE main PROC MOV AX,@DATA MOV DS,AX MOV AX,02h INT 10h MOV AH,02h MOV DX,0C15h INT 10h LEA DX,msg MOV AH,09h INT 21h MOV AH,4Ch INT 21h main ENDP
Phm Hng Kim Khnh

; Khi ng thanh ghi DS ; Xo mn hnh ; Chuyn to con tr ; n dng 12 (0Ch) v ct 21 (15h) ; a ch thng ip ; In thng ip ra mn hnh ; Kt thc chng trnh

Trang 70

Ti liu vi x l

Lp trnh hp ng

END main 11.2. In chui k t ra mn hnh ti to nhp vo SMALL 100h DB DB DB DB DB DB 'Hello$' 'Nhap vao toa do:$' 0Dh,0Ah,'$' 3 ? 3 DUP(?) .MODEL .STACK .DATA msg msg1 Crlf Td

.CODE main PROC MOV AX,@DATA MOV DS,AX MOV AX,02h INT 10h LEA DX,msg1 MOV AH,09h INT 21h CALL Nhap MOV CL,AL LEA DX,Crlf MOV AH,09h INT 21h CALL Nhap MOV CH,AL MOV AH,02h MOV DX,CX INT 10h LEA DX,msg MOV AH,09h INT 21h MOV AH,4Ch INT 21h main ENDP Nhap PROC MOV AH,0Ah LEA DX,Td INT 21h LEA BX,Td MOV AL,DS:[BX+2] SUB AL,'0' MOV BL,10 MUL BL PUSH AX LEA BX,Td
Phm Hng Kim Khnh

; Khi ng thanh ghi DS ; Xa mn hnh ; In thng ip ; Nhp dng ; Xung dng ; Nhp ct ; Chuyn ta con tr

; In ra mn hnh ; Kt thc chng trnh

; Nhp vo ; Ly ch s hng chc ; Chuyn t dng k t sang dng s ; Nhn s hng chc vi 10 ; Ly ch s hng dn v
Trang 71

Ti liu vi x l

Lp trnh hp ng

MOV AL,DS:[BX+3] SUB AL,'0' POP BX ADD AL,BL RET Nhap ENDP END main 11.3. Cng 2 s nh phn di 5 byte .MODEL SMALL .STACK 100h .DATA m1 DB 00h,08h,10h,13h,24h,00h m2 DB 0FFh,0FCh,0FAh,0F0h,0F1h,00h; m3 DB 6 DUP(0) .CODE main PROC MOV AX,@DATA MOV DS,AX ; Khi ng thanh ghi DS LEA SI,m1 LEA DI,m2 LEA BX,m3 MOV CX,6 XOR AL,AL next: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL INC BX INC SI INC DI LOOP next MOV AH,4Ch INT 21h main ENDP END main 11.4. Nhp mt chui k t v chuyn ch thng thnh ch hoa .MODEL .STACK .DATA m1 SMALL 100h DB DB DB DB 81 ? 81 DUP(?) 'Chuoi da doi:$'

m2 .CODE main PROC MOV AX,@DATA


Phm Hng Kim Khnh

Trang 72

Ti liu vi x l

Lp trnh hp ng

MOV DS,AX MOV ES,AX LEA DX,m1 MOV AH,0Ah INT 21h LEA SI,m1 ADD SI,2 MOV DI,SI Next: LODSB CMP AL,0Dh JE quit CMP AL,'a' JB cont CMP AL,'z' JA cont SUB AL,20h STOSB DEC DI cont: INC DI JMP next quit: MOV AL,'$' STOSB MOV AX,02h INT 10h LEA DX,m2 MOV AH,09h INT 21h LEA DX,m1+2 MOV AH,09h INT 21h MOV AH,4Ch INT 21h main ENDP END main

; Khi ng thanh ghi DS ; Nhp chui ; Ly a ch chui ; Chui ngun v ch trng nhau ; Ly k t ; Nu l k t Enter th kt thc ; Nu k t nhp khng phi l k t ; thng t 'a' n 'z' th b qua ; Chuyn k t thng thnh k t hoa ; Lu k t va chuyn ; Nu l k t thng th dng lnh STOSB ; nn DI tng ln 1, ta phi gim DI ; Tng ln k t k

; Xa mn hnh

Phm Hng Kim Khnh

Trang 73

You might also like