You are on page 1of 178

cng bi ging HP NG Chng 1 : C BN V HP NG Trong chng ny s gii thiu nhng nguyn tc chung to ra , dch v chy mt chng trnh hp ng trn

n my tnh . Cu trc ng php ca lnh hp ng trong gio trnh ny c trnh by theo Macro Assembler ( MASM) da trn CPU 8086 . 1.1 C php lnh hp ng Mt chng trnh hp ng bao gm mt lot cc mnh ( statement) c vit lin tip nhau , mi mnh c vit trn 1 dng . Mt mnh c th l : mt lnh ( instruction) : c trnh bin dch ( Assembler =ASM) chuyn thnh m my. mt ch dn ca Assembler ( Assembler directive) : ASM khng chuyn thnh m my Cc mnh ca ASM gm 4 trng : Name Operation Operand(s) Comment cc trng cch nhau t nht l mt k t trng hoc mt k t TAB v d lnh sau : START : MOV CX,5 ; kh to thanh ghi CX Sau y l mt ch dn ca ASM : MAIN PROC ; to mt th tc c tn l MAIN 1.1.1 Trng Tn ( Name Field) Trng tn c dng cho nhn lnh , tn th tc v tn bin . ASM s chuyn tn thnh a ch b nh . Tn c th di t 1 n 31 k t . Trong tn cha cc k t t a-z , cc s v cc k t c bit sau : ? ,@ , _ , $ v du . Khng c php c k t trng trong phn tn . Nu trong tn c k t . th n phi l k t u tin . Tn khng c bt u bng mt s . ASM khng phn bit gia k t vit thng v vit hoa . Sau y l cc v d v tn hp l v khng hp l trong ASM . Tn hp l Tn khng hp l COUNTER1 TWO WORDS @CHARACTER 2ABC SUM_OF_DIGITS A45.28 DONE? YOU&ME .TEST ADD-REPEAT

cng bi ging HP NG 1.1.2 Trng ton t ( operation field) i vi 1 lnh trng ton t ch k hiu ( sumbol) ca m php ton ( operation code = OPCODE) .ASM s chuyn k hiu m php ton thnh m my . Thng thng k hiu m php ton m t chc nng ca php ton , v d ADD , SUB , INC , DEC , INT ... i vi ch dn ca ASM , trng ton t ch mt opcode gi (pseudo operation code = pseudo-op) . ASM khng chuyn pseudo-op thnh m my m hng dn ASM thc hin mt vic g v d to ra mt th tc , nh ngha cc bin ... 1.1.3 Trng cc ton hng ( operand(s) field) Trong mt lnh trng ton hng ch ra cc s liu tham gia trong lnh . Mt lnh c th khng c ton hng , c 1 hoc 2 ton hng . V d : NOP ; khng c ton hng INC AX ; 1 ton hng ADD WORD1,2 ; 2 ton hng cng 2 vi ni dung ca t nh WORD1 Trong cc lnh 2 ton hng ton hng u l ton hng ch ( destination operand) . Ton hng ch thng lthanh ghi hoc v tr nh dng lu tr kt qu . Ton hng th hai l ton hng ngun . Ton hng ngun thng khng b thay i sau khi thc hin lnh . i vi mt ch dn ca ASM , trng ton hng cha mt hoc nhiu thng tin m ASM dng thc thi ch dn . 1.1.4 Trng ch thch ( comment field) Trng ch thch l mt tu chn ca mnh trong ngn ng ASM . Lp trnh vin dng trng ch thch thuyt minh v cu lnh . iu ny l cn thit v ngn ng ASM l ngn ng cp thp ( low level) v vy s rt kh hiu chng trnh nu n khng c ch thch mt cch y v r rng . Tuy nhin khng nn c ch thch i vi mi dng ca chng trnh , k c nnhng lnh m ngha ca n rt r rng nh : NOP ; khng lm chi c Ngi ta dng du chm phy (;) bt u trng ch thch . ASM cng cho php dng ton b mt dng cho ch thch to mt khong trng ngn cch cc phn khc nhau cu chng trnh ,v d :

; ; khi to cc thanh ghi ; MOV AX,0 MOV BX,0 1.2 Cc kiu s liu trong chng trnh hp ng

cng bi ging HP NG CPU ch lm vic vi cc s nh phn . V vy ASM phi chuyn tt c cc loi s liu thnh s nh phn . Trong mt chng trnh hp ng cho php biu din s liu di dng nh phn , thp phn hoc thp lc phn v thm ch l c k t na . 1.2.1 Cc s Mt s nh phn l mt dy cc bit 0 v 1 va 2phi kt thc bng h hoc H Mt s thp phn l mt dy cc ch s thp phn v kt thc bi d hoc D ( c th khng cn) Mt s hex phi bt u bi 1 ch s thp phn v phi kt thc bi h hoc H. Sau y l cc biu din s hp l v khng hp l trong ASM : S Loi 10111 thp phn 10111b nh phn 64223 thp phn -2183D thp phn 1B4DH hex 1B4D s hex khng hp l FFFFH s hex khng hp l 0FFFFH s hex 1.2.2 Cc k t K t v mt chui cc k t phi c ng gia hai du ngoc n hoc hai du ngoc kp . V d A v HELLO . Cc k t u c chuyn thnh m ASCII bi ASM . Do trong mt chng trnh ASM s xem khai bo A v 41h ( m ASCII ca A) l ging nhau . 1.3 Cc bin ( variables) Trong ASM bin ng vai tr nh trong ngn ng cp cao . Mi bin c mt loi d liu v n c gn mt a ch b nh sau khi dch chng trnh . Bng sau y lit k cc ton t gi dng nh ngha cc loi s liu . PSEUDO-OP STANDS FOR DB define byte DW define word ( doublebyte) DD define doubeword ( 2 t lin tip) DQ define quadword ( 4 t lin tip ) DT define tenbytes ( 10 bytes lin tip)

1.3.1. Bin byte

cng bi ging HP NG Ch dn ca ASM nh ngha bin byte c dng nh sau : NAME DB initial_value V d : ALPHA DB 4 Ch dn ny s gn tn ALPHA cho mt byte nh trong b nh m gi tr ban u ca n l 4 . Nu gi tr ca byte l khng xc nh th t du chm hi ( ?) vo gi tr ban u . V d : BYT DB? i vi bin byte vng gi tr kh d m n lu tr c l -128 n 127 i vi s c du v 0 n 255 i vi s khng du . 1.3.2 Bin t Ch dn ca ASM nh ngha mt bin t nh sau : NAME DW initial_value V d : WRD DW -2 Cng c th dng du ? thay th cho bin t c gi tr khng xc nh . Vng gi tr ca bin t l -32768 n 32767 i vi s c du v 0 n 56535 i vi s khng du . 1.3.3 Mng ( arrays) Trong ASM mt mng l mt lot cc byte nh hoc t nh lin tip nhau . V d nh ngha mt mng 3 byte gi l B_ARRAY m gi tr ban u ca n l 10h,20h v 30h chng ta c th vit : B_ARRAY DB 10h,20h,30h B_ARRAY l tn c gn cho byte u tin B_ARRAY+1 l tn ca byte th hai B_ARRAY+2 l tn ca byte th ba Nu ASM gn a ch offset l 0200h cho mng B_ARRAY th ni dung b nh s nh sau : SYMBOL ADDRESS CONTENTS B_ARRAY 200h 10h B_ARRAY+1 201h 20h B_ARRAY+2 202h 30h

Ch dn sau y s nh ngha mt mng 4 phn t c tn l W_ARRAY: W_ARRAY DW 1000,40,29887,329

cng bi ging HP NG Gi s mng bt u ti 0300h th b nh s nh sau: SYMBOL ADDRESS CONTENTS W_ARRAY 300h 1000d W_ARRAY+2 302h 40d W_ARRAY+4 304h 29887d W_ARRAY+6 306h 329d Byte thp v byte cao ca mt t i khi chng ta cn truy xut ti byte thp v byte cao ca mt bin t . Gi s chng ta nh ngha : WORD1 DW 1234h Byte thp ca WORD1 cha 34h , cn byte cao ca WORD1 cha 12h K hiu a ch ca byte thp l WORD1 cn k hiu a ch ca byte cao l WORD1+1 . Chui cc k t ( character strings) Mt mng cc m ASCII c th c nh ngha bng mt chui cc k t V d : LETTERS DW 41h,42h,43h tng ng vi LETTERS DW ABC Bn trong mt chui , ASM s phn bit ch hoa v ch thng . V vy chui abc s c chuyn thnh 3 bytes : 61h ,62h v 63h. Trong ASM cng c th t hp cc k t v cc s trong mt nh ngha . V d : MSG DB HELLO, 0AH, 0DH, $ tng ng vi MSG DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H 1.4 Cc hng ( constants) Trong mt chng trnh cc hng c th c t tn nh ch dn EQU (equates) . C php ca EQU l : NAME EQU constant v d : LF EQU 0AH

sau khi c khai bo trn th LF c dng thay cho 0Ah trong chng trnh . V vy ASM s chuyn cc lnh : MOV DL,0Ah v MOV DL,LF thnh cng mt m my .

cng bi ging HP NG Cng c th dng EQU nh ngha mt chui , v d: PROMPT EQU TYPE YOUR NAME Sau khi c khai bo ny , thay cho MSG DB TYPE YOUR NAME chng ta c th vit MSG DB PROMPT 1.5 Cc lnh c bn CPU 8086 c hng trm lnh , trong chng ny ,chng ta s xem xt 7 lnh n gin ca 8086 m chng thng c dng vi cc thao tc di chuyn s liu v thc hin cc php ton s hc . Trong phn sau y , WORD1 v WORD2 l cc bin t , BYTE1 v BYTE2 l cc bin byte . 1.5.1 Lnh MOV v XCHG Lnh MOV dng chuyn s liu gia cc thanh ghi , gia 1 thanh ghi v mt v tr nh hoc di chuyn trc tip mt s n mt thanh ghi hoc mt v tr nh . C php ca lnh MOV l : MOV Destination , Source Sau y l vi v d : MOV AX,WORD1 ; ly ni dung ca t nh WORD1 a vo thanh ghi AX MOV AX,BX ; AX ly ni dung ca BX , BX khng thay i MOV AH,A ; AX ly gi tr 41h Bng sau cho thy cc trng hp cho php hoc cm ca lnh MOV Destination operand source operand General Reg Segment Reg Memory Location Constant General Reg Segment Reg MemoryLocation

Constant Y Y Y Y Y NO Y NO Y Y NO Y NO NO NO NO Lnh XCHG ( Exchange) dng trao i ni dung ca 2 thanh ghi hoc ca mt thanh ghi v mt v tr nh . V d : XCHG AH,BL XCHG AX,WORD1 ; trao i ni dung ca thanh ghi AX v t nh WORD1. Cng nh lnh MOV c mt s hn ch i vi lnh XCHG nh bng sau :

cng bi ging HP NG Destination operand Source operand General Memory Locatin Register General Memory Y Y Memory Location Y No 1.5.2 Lnh ADD, SUB, INC , DEC Lnh ADD v SUB c dng cng v tr ni dung ca 2 thanh ghi , ca mt thanh ghi v mt v tr nh , hoc cng ( tr) mt s vi (khi) mt thanh ghi hoc mt v tr nh . C php l : ADD Destination , Source SUB Destination , Source V d : ADD WORD1, AX ADD BL , 5 SUB AX,DX ; AX=AX-DX V l do k thut , lnh ADD v SUB cng b mt s hn ch nh bng sau: Destination operand Source operand General Reg Memory Loacation Gen Memory Y Y Memory Location Y NO Constant Y Y Vic cng hoc tr trc tip gia 2 v tr nh l khng c php . gii quyt vn ny ngi ta phi di chuyn byte ( t ) nh n mt thanh ghi sau mi cng hoc tr thanh ghi ny vi mt byte ( t ) nh khc . V d: MOV AL, BYTE2 ADD BYTE1, AL Lnh INC ( incremrent) cng thm 1 vo ni dung ca mt thanh ghi hoc mt v tr nh . Lnh DEC ( decrement) gim bt 1 khi mt thanh ghi hoc 1 v

tr nh . C php ca chng l : INC Destination DEC Destination V d : INC WORD1 INC AX DEC BL

cng bi ging HP NG 1.5.3 Lnh NEG ( negative) Lnh NEG i du ( ly b 2 ) ca mt thanh ghi hoc mt v tr nh . C php : NEG destination V d : NEG AX ; Gi s AX=0002h sau khi thc hin lnh NEG AX th AX=FFFEh LU : 2 ton hng trong cc lnh trn y phi cng loi ( cng l byte hoc t ) 1.6 Chuyn ngn ng cp cao thnh ngn ng ASM Gi s A v B l 2 bin t . Chng ta s chuyn cc mnh sau trong ngn ng cp cao ra ngn ng ASM . 1.6.1 Mnh B=A MOV AX,A ; a A vo AX MOV B,AX ; a AX vo B 1.6.2 Mnh A=5-A MOV AX,5 ; a 5 vo AX SUB AX,A ; AX=5-A MOV A,AX ; A=5-A cch khc : NEG A ;A=-A ADD A,5 ;A=5-A 1.6.3 Mnh A=B-2*A MOV AX,B ;Ax=B SUB AX,A ;AX=B-A SUB AX,A ;AX=B-2*A MOV A,AX ;A=B-2*A 1.7 Cu trc ca mt chng trnh hp ng Mt chng trnh ngn ng my bao gm m ( code) , s liu ( data) v ngn xp (stack ) . Mi mt phn chim mt on b nh . Mi mt on chng trnh l c chuyn thnh mt on b nh bi ASM . 1.7.1 Cc kiu b nh ( memory models) ln ca m v s liu trong mt chng trnh c quy nh bi ch dn MODEL nhm xc nh kiu b nh dng vi chng trnh . C php ca ch dn MODEL nh sau : .MODEL memory_model

Bng sau cho thy cc kiu b nh :

cng bi ging HP NG MODEL DESCRITION SMALL MEDIUM COMPACT LARGE HUGE code v data nm trong 1 on code nhiu hn 1 on , data trong 1 on data nhiu hn 1 an , code trong 1 on code v dayta ln hn 1 on , array khng qa 64KB code ,data ln hn 1 on , array ln hn 64KB 1.7.2 on s liu on s liu ca chng trnh ch cc khai bo bin , khai bo hng ... bt u on s liu chng ta dng ch dn DATA vi c php nh sau : .DATA ;khai bo tn cc bin , hng v mng v d : .DATA WORD1 DW 2 WORD2 DW 5 MSG DB THIS IS A MESSAGE MASK EQU 10010010B 1.7.3 on ngn xp Mc ch ca vic khai bo on ngn xp l dnh mt vng nh ( vng satck) lu tr cho stack . C php ca lnh nh sau : .STACK size nu khng khai bo size th 1KB c dnh cho vng stack . .STACK 100h ; dnh 256 bytes cho vng stack 1.7.4 an m on m ch cc lnh ca chng trnh . Bt u on m bng ch dn CODE nh sau : .CODE Bn trong on m cc lnh thng c t chc thnh th tc (procedure) m cu trc ca mt th tc nh sau : name PROC

; body of the procedure name ENDP Sau y l c trc ca mt chng trnh hp ng m phn CODE l th tc c tn l MAIN

cng bi ging HP NG .MODEL SMALL .STACK 100h .DATA ; nh ngha s liu ti y .CODE MAIN PROC ;thn ca th tc MAIN MAIN ENDP ; cc th tc khc nu c END MAIN 1.8 Cc lnh vo ra CPU thng tin vi cc ngoi vi thng qua cc cng IO . Lnh IN v OUT ca CPU cho php truy xut n cc cng ny . Tuy nhin hu ht cc ng dng khng dng lnh IN v OUT v 2 l do: cc a ch cng thay i tu theo loi my tnh c th lp trnh cho cc IO d dng hn nh cc chng trnh con ( routine) c cung cp bi cc hng ch to my tnh C 2 loi chng trnh phc v IO l : cc routine ca BIOS ( Basic Input Output System) v cc routine ca DOS . Lnh INT ( interrupt) gi cc chng trnh con ca BIOS v DOS c th dng lnh INT vi c php nh sau : INT interrupt_number y interrupt_number l mt s m n ch nh mt routine . V d INT 16h gi routine thc hin vic nhp s liu t Keyboard . 1.8.1 Lnh INT 21h INT 21h c dng gi mt s ln cc cc hm ( function) ca DOS . Tu theo gi tr m chng ta t vo thanh ghi AH , INT 21h s gi chy mt routine tng ng . Trong phn ny chng ta s quan tm n 2 hm sau y :

cng bi ging HP NG 11 FUNCTION NUMBER 1 2 ROUTINE Single key input Single character output FUNTION 1 : Single key input Input : AH=1 Output:AL= ASCII code if character key is pressed AL=0 if non character key is pressed gi routine ny thc hin cc lnh sau : MOV AH,1 ; input key function INT 21h ; ASCII code in AL and display character on the screen FUNTION 2 : Display a character or execute a control function Input : AH=2 DL=ASCII code of the the display character or control character Output:AL= ASCII code of the the display character or control character Cc lnh sau s in ln mn hnh du ? MOV AH,2 MOV DL,? ; character is ? INT 21H ; display character Hm 2 cng c th dng thc hin chc nng iu khin .Nu DL ch k t iu khin th khi gi INT 21h , k t iu khin s c thc hin . Cc k t iu khin thng dng l : ASCII code (Hex) SYMBOL FUNCTION 7 BEL beep 8 BS backspace 9 HT tab A LF line feed D CR carriage return 1.9 Chng trnh u tin

Chng ta s vit mt chng trnh hp ng nhm c mt k t t bn phm v in n trn u dng mi . TITLE PGM1: ECHO PROGRAM

cng bi ging HP NG .MODEL SMALL .STACK 100H .CODE MAIN PROC ; display du nhc MOV AH,2 MOV DL,? INT 21H ; nhp 1 k t MOV AH,1 ; hm c k t INT 21H ; k t c a vo AL MOV BL,AL ; ct k t trong BL ; nhy n dng mi MOV AH,2 ; hm xut 1 k t MOV DL,0DH ; k t carriage return INT 21H , thc hin carriage return MOV DL,0AH ; k t line feed INT 21H ; thc hin line feed ; xut k t MOV DL,BL ; a k t vo DL INT 21H ; xut k t ; tr v DOS MOV AH,4CH ; hm thot v DOS INT 21H ; exit to DOS MAIN ENDP END MAIN 1.10 To ra v chy mt chng trnh hp ng C 4 bc to ra v chy mt chng trnh hp ng l :

Dng mt trnh son tho vn bn to ra tp tin chng trnh ngun ( source program file ) . Dng mt trnh bin dch (Assembler ) to ra tp tin i tng (object file) ngn ng my Dng trnh LINK lin kt mt hoc nhiu tp tin i tng ri to ra file thc thi c . Cho thc hin tp tin EXE hoc COM . Bc 1 : To ra chng trnh ngun

cng bi ging HP NG Dng mt trnh son tho vn bn (NC chng hn) to ra chng trnh ngun .V d lt tn l PGM1.ASM. Phn m rng ASM l phn m rng quy c Assembler nhn ra chng trnh ngun . Bc 2 :Bin dch chng trnh Chng ta s dng MASM ( Microsoft Macro Assembler ) chuyn tp tin ngun PGM1.ASM thnh tp tin i tng ngn ng my go l PGM1.OBJ bng lnh sau : MASM PGM1; Sau khi in thng tin v bn quyn MASM s kim tra file ngun tm li c php . Nu c li th MASM s inra s dng b li v mt m t ngn v li . Nu khng c li th MASM s chuyn PGM1.ASM thnh to tin i tng ngn ng my gi l PGM1.OBJ . Du chm phy sau lnh MASM PGM1 c ngha l chng ta khng mun to ra mt tp tin i tng c tn khc vi PGM1 . Nu khng c du chm phy sau lnh th MASM s yu cu chng ta g vo tn ca mt s tp tin m n c th to ra nh hnh di y : Object file name [ PGM1.OBJ]: Source listing [NUL.LIST] : PGM1 Cross-reference [NUL.CRF] : PGM1 Tn mc nhin l NUL c ngha l khng to ra file tng ng tr khi lp trnh vin g vo tn tp tin . Tp tin danh sch ngun ( source listing file) : l mt tp tin Text c nh s dng , trong m hp ng v m ngun nm cnh nhau . Tp tin ny thng dng g ri chng trnh ngun v MASM thng bo li theo s dng . Tp tin tham chiu cho ( Cross -Reference File ) : l 1 tp tin cha danh sch cc tn m chng xut hin trong chng trnh km theo s dng m tn y xut hin . Tp tin ny c dng tm cc bin v nhn trong mt chng trnh ln . Bc 3 : Lin kt chng trnh Tp tin i tng to ra bc 2 l mt tp tin ngn ng my nhng n

khng chy c v cha c dng thch hp ca 1 file chy . Hn na n cha bit chng trnh c np vo v tr no trn b nh chy . Mt s a ch di dng m my c th b thiu . Trnh LINK s lin kt mt hoc nhiu file i tng thnh mt file chy duy nht ( *.EXE ) .Tp tin ny c th c np vo b nh v thi hnh .

cng bi ging HP NG lin kt chng trnh ta g : LINK PGM1; Nu khng c du chm phy ASM s yu c chng ta g vo tn tp tin thc thi . Bc 4 : Chy chng trnh T du nhc lnh c th chy chng trnh bng cch g tn n ri nhn ENTER . 1.11 Xut mt chui k t Trong chng trnh PGM1 trn y chng ta dng INT 21H hm 2 v 4 c v xut mt k t . Hm 9 ngt 21H c th dng xut mt chui k t . INT 21H , Function 9 : Display a string Input : DX=offset address of string The string must end with a $ character K t $ cui chui s khng c in ln mn hnh . Nu chui c cha k t iu khin th chc nng iu khin tng ng s c thc hin . Chng ta s vit 1 chng trnh in ln mn hnh chui HELLO! . Thng ip HELLO c nh ngha nh sau trong on s liu : MSG DB HELLO!$ Lnh LEA ( Load Effective Address ) LEA destnation , source Ngt 21h , hm s 9 s xut mt chui k t ra mn hnh vi iu kin a ch hiu dng ca bin chui phi trn DX . C th thc hin iu ny bi lnh : LEA DX,MSG ; a a ch offset ca bin MSG vo DX Program Segment Prefix ( PSP ) : Phn u ca on chng trnh Khi mt chng trnh c np vo b nh my tnh , DOS dnh ra 256 byte cho ci gi l PSP . PSP ch mt s thng tin v chng trnh ang c np trong b nh . cho cc chng trnh c th truy xut ti PSP , DOS t s phn on

ca n (PSP) trong c DS v ES trc khi thc thi chng trnh . Kt qa l thanh ghi DS khng cha s on ca on s liu ca chng trnh . khc phc iu ny , mt chng trnh c cha on s liu phi c bt u bi 2 lnh sau y : MOV AX,@DATA

cng bi ging HP NG MOV DS,AX y @DATA l tn ca on s liu c nh ngha bi DATA . Assembler s chuyn @DATA thnh s on . Sau y l chng trnh hon chnh xut chui k t HELLO! TITLE PGM2: PRINT STRING PROGRAM .MODEL SMALL .STACK 100H .DATA MSG DB HELLO!$ .CODE MAIN PROC ; initialize DS MOV AX,@DATA MOV DS,AX ; display message LEA DX,MSG MOV AH,9 INT 21H ; return to DOS MOV AH,4CH INT 21H MAIN ENDP END MAIN 1.12 Chng trnh i ch thng sang ch hoa Chng ta s vit 1 chng trnh yu cu ngi dng g vo mt k t bng ch thng . Chng trnh s i n sang dng ch hoa ri in ra dng tip theo . TITLE PGM3: CASE COVERT PROGRAM .MODEL SMALL .STACK 100H

.DATA CR EQU 0DH LF EQU 0AH MSG1 DB ENTER A LOWER CASE LETTER:$ MSG2 DB 0DH,0AH,IN UPPER CASE IT IS :

cng bi ging HP NG CHAR DB ?,$ ; nh ngha bin CHAR c gi tr ban u cha ;xc nh .CODE MAIN PROC ; INITIALIZE DS MOV AX,@DATA MOV DS,AX ;PRINT PROMPT USER LEA DX,MSG1 ; ly thng ip s 1 MOV AH,9 INT 21H ; xut n ra mn hnh ;nhp vo mt k t thng v i n thnh k t hoa MOV AH,1 ; nhp vo 1 k t INT 21H ; ct n trong AL SUB AL,20H ; i thnh ch hoa v ct n trong AL MOV CHAR, AL ; ct k t trong bin CHAR ; xut k t trn dng tip theo LEA DX, MSG2 ; ly thng ip th 2 MOV AH,9 INT 21H ; xut chui k t th hai , v MSG2 khng kt ;thc bi k t $ nn n tip tc xut k t c trong bin CHAR ;dos exit MOV AH,4CH INT 21H ; dos exit MAIN ENDP END MAIN

cng bi ging Hp ng Chng 2 : Trng thi ca vi x l v cc thanh ghi c Trong chng ny chng ta s xem xt cc thanh ghi c ca vi x l v nh hng ca cc lnh my n cc thanh ghi c nh th no . Trng thi ca cc thanh ghi l cn c chng trnh c th thc hin lnh nhy , r nhnh v lp . Mt phn ca chng ny s gii thiu chng trnh DEBUG ca DOS . 2.1 Cc thanh ghi c ( Flags register) im khc bit quan trng ca my tnh so vi cc thit b in t khc l kh nng cho cc quyt nh . Mt mch c bit trong CPU c th lm cc quyt nh ny bng cch cn c vo trng thi hin hnh ca CPU . C mt thanh ghi c bit cho bit trng thi ca CPU l thanh ghi c . Bng 2.1 cho thy thanh ghi c 16 bit ca 8086 11 10 9 8 7 6 5 4 3 2 1 0 O D IF T S Z A P C FFFFFFFF Bng 2.1 :Thanh ghi c ca 8086

cng bi ging Hp ng Mc ch ca cc thanh ghi c l ch ra trng thi ca CPU .C hai loi c l c trng thi ( status flags) v c iu khin (control flags) . C trng thi phn nh cc kt qa thc hin lnh ca CPU . Bng 2.2 ch ra tn v k hiu cc thanh ghi c trong 8086 . Bit Name Symbol 0 Carry flag CF 2 Parity flag PF 4 Auxiliary carry flag AF 6 Zero flag ZF 7 Sign flag SF 11 Overflow flag OF 8 Trap flag TF 9 Interrrupt flag IF 10 Direction flag DF Bng 2.2 : Cc c ca 8086 Mi bit trn thanh ghi c phn nh 1 trng thi ca CPU . Cc c trng thi ( status flags)

cng bi ging Hp ng Cc c trng thi phn nh kt qu ca cc php ton . V d sau khi thc hin lnh SUB AX,AX c ZF =1 , ngha l kt qa ca php tr l zero . C nh ( Carry Flag - CF) : CF=1 nu xut hin bit nh (carry) t v tr MSB trong khi thc hin php cng hoc c bit mn ( borrow ) ti MSB trong khi thc hin php tr . Trong cc trng hp khc CF=0 . C CF cng b nh hng bi lnh dch ( Shift) v quay ( Rotate) s liu . C chn l ( Parity Flag - PF) : PF=1 nu byte thp ca kt qa c tng s con s 1 l mt s chn ( even parity). PF=0 nu byte thp l chn l l (old parity ). V d nu kt qa l FFFEh th PF=0 C nh ph ( Auxiliary Carry Flag - AF ) :AF =1 nu c nh ( mn) t bit th 3 trong php cng ( tr) . C Zero ( Zero Flag -ZF) : ZF=1 nu kt qa l s 0 . C du ( Sign Flag - SF ) : SF=1 nu MSB ca kt qa l 1 ( kt qa l s m ) . SF=0 nu MSB=0 C trn ( Overflow Flag - OF ) : OF=1 nu xy ra trn s trong khi thc hin cc php ton . Sau y chng ta s phn tch cc trng hp xy ra trn trong khi thc hin tnh ton . Hin tng trn s lin quan n vic biu din s trong my tnh vi mt s hu hn cc bit . Cc s thp phn c du biu din bi 1 byte l 128 n +127 . Nu biu din bng 1 t (16 bit) th cc s thp phn c th biu din l -32768 n +32767 . i vi cc s khng du , di cc s c th biu din trong

cng bi ging Hp ng mt t l 0 n 65535 , trong mt byte l 0 n 255 . Nu kt qa ca mt php ton vt ra ngoi di s c th biu din th xy ra s trn s . Khi c s trn s kt qa thu c s b sai . 2.2 Trn ( overflow) C 2 loi trn s : Trn c du ( signed overflow) v trn khng du ( unsigned overflow) . Khi thc hin php cng s hc chng hn php cng , s xy ra 4 kh nng sau y : 1) khng trn 2) ch trn du 3) ch trn khng du 4) trn c du v khng du V d ca trn khng du l php cng ADD AX,BX vi AX=0FFFFh , BX=0001h .Kt qa di dng nh phn l : 1111 1111 1111 1111 0000 0000 0000 0001 10000 0000 0000 0000 Nu din gii kt qa di dng khng du th kt qa l ng ( 10000h=65536) . Nhng kt qa vt qu ln ca t nh . Bit 1 ( bit nh t v tr

cng bi ging Hp ng MSB ) xy ra v kt qa trn AX =0000h l sai . S trn nh th l trn khng du . Nu xem rng php cng trn y l php cng hai s c du th kt qa trn AX = 0000h l ng , v FFFFh = -1 , cn 0001h = +1 , do kt qa php cng l 0 . Vy trong trng hp ny s trn du khng xy ra . V d v s trn du : gi s AX = BX = 7FFFh , lnh ADD AX,BX s cho kt qa nh sau : 0111 1111 1111 1111 0111 1111 1111 1111 1111 1111 1111 1110 = FFFE h Biu din c du v khng du ca 7FFFh l 3276710 . Nh vy l i vi php cng c du cng nh khng du th kt qa vn l 32767 + 32767 = 65534 . S ny(65534) vt ngoi di gi tr m 1 s 16 bit c du c th biu din . Hn na FFFEh = -2 . Do vy s trn du xy ra . Trong trng hp xy ra trn , CPU s biu th s trn nh sau : CPU s set OF =1 nu xy ra trn du CPU s set CF = 1 nu xy ra trn khng du Sau khi c trn , mt chng trnh hp l s c thc hin sa sai kt qa ngay lp tc . Cc lp trnh vin s ch phi quan tm ti c OF hoc CF nu biu

cng bi ging Hp ng din s ca h l c du hay khng du mt cch tng ng . Vy th lm th no CPU bit c c trn ? Trn khng du s xy ra khi c mt bit nh ( hoc mn ) t MSB Trn du s xy ra trong cc trng hp sau : a) Khi cng hai s cng du , s trn du xy ra khi tng c du khc vi hai ton hng ban u . Trong v d 2 , cng hai s 7FFFh +7FFFh ( hai s dng ) nhng kt qa l FFFFh ( s m) b) Khi tr hai s khc du ( ging nh cng hai s cng du) kt qa phi c du hp l .Nu kt qa cho du khng nh mong i th c ngha l xy ra s trn du . V d 8000h - 0001h = 7FFFh ( s dng ) . Do OF=1 . Vy lm th no CPU ch ra rng c trn ? OF=1 nu trn du CF=1 nu trn khng du Lm th no CPU bit l c trn ? Trn khng du xy ra khi c s nh ( carry) hoc mn ( borrow) t MSB Trn du xy ra khi cng hai s cng du ( hoc tr 2 s khc du ) m kt qa vi du khc vi du mong i . Php cng hai s c du khc nhau khng th xy ra s trn . Trn thc t CPU dng phng php sau : c OF=1 nu s nh vo v s nh ra t MSB l khng ph hp :

cng bi ging Hp ng ngha l c nh vo nhng khng c nh ra hoc c nh ra nhng khng c nh vo . C iu khin ( control flags) C 3 c iu khin trong CPU , l : C hng ( Direction Flag = DF) C by ( Trap flag = TF) C ngt ( Interrupt Flag = IF) Cc c iu khin c dng iu khin hot ng ca CPU C hng (DF) c dng trong cc lnh x l chui ca CPU . Mc ch ca DF l dng iu khin hng m mt chui c x l . Trong cc lnh x l chui hai thanh ghi DI v SI c dng a ch b nh cha chui . Nu DF=0 th lnh x l chui s tng a ch b nh sao cho chui c x l t tri sang phi Nu DF=1 th a ch b nh s c x l theo hng t phi sang tri . 2.3 Cc lnh nh hng c nh th no Ti mt thi im , CPU thc hin 1 lnh , cc c ln lt phn nh kt qa thc hin lnh . D nhin c mt s lnh khng lm thay i mt c no c hoc thay i ch 1 vi c hoc lm cho mt vi c c trng thi

cng bi ging Hp ng khng xc nh . Trong phn ny chng ta ch xt nh hng ca cc lnh ( nghin cu chng trc ) ln cc c nh th no . Bng sau y cho thy nh hng ca cc lnh n cc c : INSTRUCTION AFFECTS FLAGS MOV/XCHG ADD/SUB INC/DEC NEG NONE ALL ALL tr CF ALL (CF=1 tr khi kt qa bng 0 , OF=1 nu kt qa l 8000H ) thy r nh hng ca cc lnh ln cc c chng ta s ly vi v d . V d 1 : ADD AX,AX trong AX=BX=FFFFh FFFFh + FFFFh 1FFFEh Kt qa cha trn AX l FFFEh = 1111 1111 1111 1110

cng bi ging Hp ng SF=1 v MSB=1 PF=0 v c 7 ( l) s 1 trong byte thp ca kt qa ZF=0 v kt qa khc 0 CF=1 v c nh 1 t MSB OF=0 v du ca kt qa ging nh du ca 2 s hng ban u . V d 2 : ADD AL,BL trong AL= BL= 80h 80h + 80h 100h Kt qa trn AL = 00h SF=0 v MSB=0 PF=1 v tt c cc bit u bng 0 ZF=1 v kt qa bng 0 CF=1 v c nh 1 t MSB OF=1 v c 2 ton hng l s m nhng kt qa l s dng ( c nh ra t MSB nhng khng c nh vo ) . V d 3 : SUB AX,BX trong AX=8000h v BX= 0001h 8000h -0001h

cng bi ging Hp ng 7FFFFh = 0111 1111 1111 1111 SF=0 v MSB=0 PF=1 v c 8 ( chn ) s 1 trong byte thp ca kt qa ZF=0 v kt qa khc 0 CF=0 v khng c mn OF=1 v tr mt s m cho 1 s dng ( tc l cng 2 s m ) m kt qa l mt s dng . V d 4 : INC AL trong AL=FFh Kt qa trn AL=00h = 0000 0000 SF=0 v MSB=0 PF=1 ZF=1 v kt qa bng 0 CF khng b nh hng bi lnh INC mc d c nh 1 t MSB OF=0 v hai s khc du c cng vi nhau ( c s nh vo MSB v cng c s nh ra t MSB) V d 5: MOV AX,-5 Kt qu trn BX = -5 = FFFBh Khng c c no nh hng bi lnh MOV

cng bi ging Hp ng V d 6: NEG AX trong AX=8000h 8000h =1000 0000 0000 0000 b 1 =0111 1111 1111 1111 +1 1000 0000 0000 0000 = 8000h Kt qa trn AX=8000h SF=1 v MSB=1 PF=1 v c s chn con s 1 trong byte thp ca kt qa ZF=0 v kt qa khc 0 CF=1 v lnh NEG lm cho CF=1 tr khi kt qa bng 0 OF=1 v du ca kt qa ging vi du ca ton hng ngun . 2.4 Chng trnh DEBUG.EXE Debug l mt chng trnh ca DOS cho php chy th cc chng trnh hp ng . Ngi dng c th cho chy chng trnh tng lnh 1 t u n cui ,trong qu trnh c th thy ni dung cc thanh ghi thay i nh th no . Debug cho php nhp vo mt m hp ng trc tip sau DEBUG s chuyn thnh m my v lu tr trong b nh . DEBUG cung cp kh nng xem ni dung ca tt c cc thanh ghi c trong CPU.

cng bi ging Hp ng Sau y chng ta s dng DEBUG m t cch thc m cc lnh nh hng n cc c nh th no . Gi s chng ta c chng trnh hp ng sau : TITLE PGM2_1: CHECK -FLAGS ; dng DEBUG kim tra cc c .MODEL SMALL .STACK 100H .CODE MOV AX,4000H; AX=4000H ADD AX,AX ; AX=8000H SUB AX,0FFFFH ;AX=8001H NEG AX ; AX=7FFFH INC AX ; AX=8000H MOV AH,4CH ; HM THOT V DOS INT 21H ; EXIT TO DOS END MAIN ENDP END MAIN Sau khi dch chng trnh , gi s file chy l CHECKFL. EXE trn ng dn C:\ASM . chy debug chng ta g lnh sau : C:\> DEBUG C:\ASM\CHECK-FL.EXE

cng bi ging Hp ng t lc ny tr i du nhc lca debug ( du _) , ngi s dng c th a vo cc lnh debug t du nhc ny . Trc ht c th xem ni dung cc thanh ghi bng lnh R(Register) , mn hnh s c ni dung nh sau : -R AX=0000 BX=0000 CX=001F DX=0000 SP=000A BP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5 SS=0EE5 CS=0EE6 IP=0000 NV UPDI PL NZNAPONC 0EE6:0000 B80040 MOV AX,4000 Chng ta thy tn cc thanh ghi v ni dung ca chng ( di dng HEX) trn 3 dng u . Dng th 4 l trng thi cc thanh ghi theo cch biu th ca debug. Bng 2-3 l cch m Debug biu th trng thi ca cc thanh ghi c ca CPU . Flag s Set (1) Symbol Clear (0) Symbol CF CY (carry) NC ( no carry) PF PE (even parity) PO ( odd parity) AF AC ( auxiliary carry) NA ( no auxiliary carry) ZF ZR ( zero) NZ ( non zero) SF NG ( negative) PL ( plus) OF OV ( overflow) NV ( no overflow) DF DN ( down) UP ( up) IF EI ( enable DI ( disable

cng bi ging Hp ng interrupts) interrupts) Bng 2.3 : Biu th trng trng cc c ca DEBUG Dng cui cng cho bit gi tr hin hnh ca PC (a ch ca lnh s c thc hin di dng a ch logic ) m my ca lnh v ni dung ca lnh tng ng . Khi chy chng trnh ny trn 1 my tnh khc c th s thy mt i ch on khc . Chng ta s dng lnh T(Trace) thi hnh tng lnh ca chng trnh bt u t lnh MOV AX,4000h -T AX=4000 BX=0000 CX=001F DX=0000 SP=000A BP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5 SS=0EE5 CS=0EE6 IP=0003 NV UPDI PL NZNAPONC 0EE6:0003 03C0 ADD AX,AX Sau khi thc hin lnh MOV AX,4000 cc c khng b thay i , ch c AX=4000h . By gi chng ta thc hin lnh ADD AX,AX -T AX=8000 BX=0000 CX=001F DX=0000 SP=000A BP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5 SS=0EE5 CS=0EE6 IP=0005 OV UP DI NGNZ NAPE NC 0EE6:0005 2DFFFF SUB AX,FFFF

cng bi ging Hp ng Kt qa ca php cng l 8000h , do SF=1(NG) , OF=1(OV) v PF=1(PE) By gi chng ta thc hin lnh SUB AX,0FFFh -T AX=8001 BX=0000 CX=001F DX=0000 SP=000A BP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5 SS=0EE5 CS=0EE6 IP=0008 NV UPDI NGNZACPOCY 0EE6:0008 F7D8 NEG AX AX=8000H-FFFFH=8001H C OF=0(NV) nhng CF=1(CY) v c mn t MSB C PF=0(PO) v byte thp ch c 1 con s 1. Lnh tip theo s l lnh NEG AX -T AX=7FFF BX=0000 CX=001F DX=0000 SP=000A BP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5 SS=0EE5 CS=0EE6 IP=000A NV UPDI PL NZACPE CY 0EE6:000A 40 INC AX AX ly b 2 ca 8001h l 7FFFh . CF=1(CY) v lnh NEG cho kt qa khc 0. OF=0(NV) v kt qu khc 8000h Cui cng chng ta thc hin lnh INC AX

cng bi ging Hp ng -T AX=8000 BX=0000 CX=001F DX=0000 SP=000A BP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5 SS=0EE5 CS=0EE6 IP=000B OV UPDI NGNZACPE CY 0EE6:000B B44C MOV AH,4CH OF=1(OV) v cng 2 s dng m kt qu l 1 s m CF=1(CY) v lnh INC khng nh hng ti c ny . thc hin ton b chng trnh chng ta g G(Go) -G Program terminated normally thot kho debug g Q(Quit) -Q C:\> Bng sau y cho bit mt s lnh debug thng dng , cc tham s trong ngoc l tu chn COMMAND ACTION D(start (end) Lit k ni dung cc byte di dng HEX (range)) D 100 Lit k 80h bytes bt u t DS:100h D CS:100 120 Lit k cc bytes t DS:100h n DS:120 D( DUMP) Lit k 80h bytes t byte cui cng

cng bi ging Hp ng c hin th G(=start ) (addr1 addr2...addrn) G G=100 G=100 150 Chy ( go) lnh t v tr Start vi cc im dng ti addr1,addr2,addrn Thc thi lnh t CS:IP n ht Thc thi lnh t CS:100h n ht Thc thi lnh ti CS:100h dng ti CS:150h Q Quit debug and return to DOS R(register) R R AX Xem/ thay i ni dung ca thanh ghi Xem ni dung tt c cc thnah ghi v c Xem v thay i ni dung ca thanh ghi AX T(=start)(value) T T=100 T=100 5 T4 Qut value lnh t v tr start Trace lnh ti CS:IP Trace lnh ti CS:100h Trace 5 lnh bt u t CS:100h Trace 4 lnh bt u t CS:IP U(start)(value) Unassemble vng a ch thnh lnh asm U CS:100 110 Unassemble t CS:100h n CS:110h U 200 L 20 Unassemble 20 lnh t CS:200h U Unassemble 32 bytes t bytes cui cng c hin th A(start) a vo m hp ng cho 1 a ch hoc 1

cng bi ging Hp ng vng i ch A A CS:100h a vo m hp ng ti CS:IP a vo m hp ng ti CS:100h

Chng 3 : Cc lnh lp v r nhnh Chng 3 : CC LNH IU KHIN Mt chng trnh thng thng s thc hin ln lt cc lnh theo th th m chng c vit ra . Tuy nhin trong mt vi trng hp cn phi chuyn iu khin n 1 phn khc ca chng trnh . Trong phn ny chng ta s nghin cu cc lnh nhy v lnh lp c tnh n cu trc ca cc lnh ny trong cc ngn ng cp cao . 3.1 V d v lnh nhy hnh dung c lnh nhy lm vic nh th no chng ta hy vit chng trnh in ra ton b tp cc k t IBM . TITLE PGR3-1:IBM CHARACTER DISPLAY .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH,2 ; hm xut k t MOV CX,256 ; s k t cn xut MOV DL,0 ; DL gi m ASCII ca k t NUL ; PRINT_LOOP : INT 21H ;display character INC DL DEC CX JNZ PRINT_LOOP ;nhy n print_loop nu CX# 0 ;DOS EXIT MOV AH,4CH INT 21H MAIN ENDP END MAIN Trong chng trnh chng ta dng lnh iu khin Jump if not zero (JNZ) quay tr li on chng trnh xut k t c nhn a ch b nh lPRINT_LOOP

Chng 3 : Cc lnh lp v r nhnh 3.2 Nhy c iu kin Lnh JNZ l mt lnh nhy c iu kin .C php ca mt lnh nhy c iu kin l : Jxxx destination-label Nu iu kin ca lnh c tha mn th lnh ti Destination-label s c thc hin , nu iu kin khng tha th lnh tip theo lnh nhy s c thc hin. i vi lnh JNZ th iu kin l kt qa ca lnh trc n phi bng 0 . Phm vi ca lnh nhy c iu kin . Cu trc m my ca lnh nhy c iu kin yu cu destination-label n ( precede) lnh nhy phi khng qu 126 bytes . Lm th no CPU thc hin mt lnh nhy c iu kin ? thc hin mt lnh nhy c iu kin CPU phi theo di thanh ghi c. Nu iu kin cho lnh nhy ( c biu din bi mt t hp trng thi cc c ) l ng th CPU s iu chnh IP n destination-label sao cho lnh ti i ch destination-label c thc hin .Nu iu kin nhy khng tha th IP s khng thay i , ngha l lnh tip theo lnh nhy s c thc hin . Trong chng trnh trn y , CPU thc hin lnh JNZ PRINT_LOOP bng cch khm xt cc c ZF . Nu ZF=0 iu khin c chuyn ti PRINT_LOOP. Nu ZF=1 lnh MOV AH,4CH s c thc hin . Bng 3-1 cho thy cc lnh nhy c iu kin . Cc lnh nhy c chia thnh 3 loi : nhy c du ( dng cho cc din dch c du i vi kt qu) nhy khng du (dng cho cc din dch khng du i vi kt qu) nhy mt c ( dng cho cc thao tc ch nh hng ln 1 c ) Mt s lnh nhy c 2 Opcode . Chng ta c th dng mt trong 2 Opcode , nhng kt qu thc hin lnh l nh nhau . Nhy c du SYMBOL DESCRITION CONDITION FOR JUMPS JG/JNLE jump if greater than ZF=0 and SF=OF jump if not less than or equal to JGE/JNL jump if greater than or equal to SF=OF

jupm if not less or equal to JL/JNGE jump if lees than jump if not greater or equal SF<>OF

Chng 3 : Cc lnh lp v r nhnh JLE/JNG jump if less than or equal ZF=1 or SF<>OF jump if not greater Nhy c iu kin khng du SYMBOL DESCRITION CONDITION FOR JUMPS JA/JNBE jump if above CF=0 and ZF=0 jump if not below or equal JAE/JNB jump if above or equal CF=0 jump if not below JB/JNA jump if below Cf=1 jump if not above or equal JBE/JNA jump if below or equal CF=1 or ZF=1 jump if not above Nhy 1 c SYMBOL DESCRITION CONDITION FOR JUMPS JE/JZ jump if equal ZF=1 jump if equal to zero JNE/JNZ jump if not equal ZF=0 jump if not zero JC jump if carry CF=1 JNC jump if no carry CF=0 JO jump if overflow OF=1 JNO jump if not overflow OF=0 JS jump if sign negative SF=1 SYMBOL DESCRITION CONDITION FOR JUMPS

Chng 3 : Cc lnh lp v r nhnh JNS jump if nonnegative sign SF=0 JP/JPE jump if parity even PF=1 JNP/JPO jump if parity odd PF=0 Lnh CMP ( Compare) Cc lnh nhy thng ly kt qa ca lnh Compare nh l iu kin . C php ca lnh CMP l : CMP destination, source Lnh ny so snh ton hng ngun v ton hng ch bng cch tnh hiu Destinaition - Source . Kt qa s khng c ct gi . Nh vy l lnh CMP ging nh lnh SUB , ch khc l trong lnh CMP ton hng ch khng thay i . Gi s chng trnh ch cc lnh sau : CMP AX,BX ;trong AX=7FFF v BX=0001h JG BELOW Kt qa ca lnh CMP AX,BX l 7FFEh . Lnh JG c tha mn v ZF=0=SF=OF do iu khin c chuyn n nhn BELOW. Din dch lnh nhy c iu kin V d trn y v lnh CMP cho php lnh nhy sau n chuyn iu khin n nhn BELOW . y l v d cho thy CPU thc hin lnh nhy nh th no . Chng thc hin bng cch khm xt trng tha cc c .Lp trnh vin khng cn quan tm n cc c , m c th dng tn ca cc lnh nhy chuyn iu khin n mt nhn no . Cc lnh CMP AX,BX JG BELOW c ngha l nu AX>BX th nhy n nhn BELOW Mc d lnh CMP c thit k cho cc lnh nhy . Nhng lnh nhy c th ng trc 1 lnh khc , chng hn : DEC AX

JL THERE c ngha l nu AX trong din dch c du < 0 th iu khin c chuyn cho THERE . Nhy c du so vi nhy khng du

Chng 3 : Cc lnh lp v r nhnh Mt lnh nhy c du tng ng vi 1 nhy khng du . V d lnh nhy c du JG v lnh nhy khng du JA . Vic s dng JG hay JA l tu thuc vo din dch c du hay khng du . Bng 3-1 cho thy cc lnh nhy c du ph thuc vo trng thi ca cc c ZF,SF,OF .Cc lnh nhy khng du ph thuc vo trng thi ca cc c ZF v CF . S dnh lnh nhy khng hp l s to ra kt qu sai . Gi s rng chng ta din dch c du .Nu AX=7FFFh v BX=8000h , cc lnh : CMP AX,BX JA below s cho kt qa sai mc d 7FFFh > 8000h ( lnh JA khng thc hin c v 7FFFFh < 8000h trong din dch khng du ) Sau y chng ta s ly v d minh ha vic s dng cc lnh nhy V d : Gi s rng AX v BX ch cc s c du . Vit on ct t s ln nht vo CX . Gii : MOV CX,AX ; t AX vo CX CMP BX,CX ;BX ln hn CX? JLE NEXT ; khng th tip tc MOV CX,BX ; yes , t BX vo CX NEXT: 3.3 Lnh JMP Lnh JMP ( jump) l lnh nhy khng iu kin . C php ca JMP l JMP destination Trong destination l mt nhn trong cng 1 an vi lnh JMP . Lnh JMP dng khc phc hn ch ca cc lnh nhy c iu kin ( khng qu 126 bytes k t v tr ca lnh nhy c iu kin ) V d chng ta c on chng trnh sau : TOP: ; thn vng lp DEC CX

JNZ TOP ; nu CX>0 tip tc lp MOV AX,BX gi s thn vng lp cha nhiu lnh m n vt khi 126 bytes trc lnh JNZ TOP . C th gii quyt tnh trng ny bng cc lnh sau : TOP:

Chng 3 : Cc lnh lp v r nhnh ; thn vng lp DEC CX JNZ BOTTOM ; nu CX>0 tip tc lp JMP EXIT BOTTOM: JMP TOP EXIT: MOV AX,BX 3.4 Cu trc ca ngn ng cp cao Chng ta s dng cc lnh nhy thc hin cc cu trc tng t nh trong ngn ng cp cao 3.4.1 Cu trc r nhnh Trong ngn ng cp cao cu trc r nhnh cho php mt chng trnh r nhnh n nhng on khc nhau tu thuc vo cc iu kin . Trong phn ny chng ta s xem xt 3 cu trc a) IF-THEN Cu trc IF-THEN c th din t nh sau : IF condition is true THEN execute true branch statements END IF V d : Thay th gi tr trn AX bng gi tr tuyt i ca n Thut ton nh sau : IF AX<0 THEN

replace AX by -AX END-IF C th m ho nh sau :

Chng 3 : Cc lnh lp v r nhnh ; if AX<0 CMP AX,0 JNL END_IF ; no , exit ;then NEG AX , yes , change sign END_IF : b) IF_THEN_ELSE IF condition is true THEN execute true branch statements ELSE execute false branch statements END_IF V d : gi s AL v BL cha ASCII code ca 1 k t .Hy xut ra mn hnh k t trc ( theo th t k t ) Thut ton IF AL<= BL THEN display AL ELSE display character in BL END_IF C th m ho nh sau : MOV AH,2 ; chun b xut k t ;if AL<=BL CMP AL,BL ;AL<=BL?

JNBE ELSE_ ; no, display character in BL ;then MOV DL,AL JMP DISPLAY ELSE_: MOV DL,BL DISPLAY: INT 21H END_IF :

Chng 3 : Cc lnh lp v r nhnh c) CASE Case l mt cu trc r nhnh nhiu hng . C th dng test mt thanh ghi hay , bin no o hay mt biu thc m gi tr c th nn trong 1 vng cc gi tr Cu trc ca CASE nh sau : CASE expression value_1 : Statements_1 value_2 : Statements_2 . . value_n : Statements_n V d : Nu AX m th t -1 vo BX Nu AX bng 0 th t 0 vo BX Nu AX dng th t 1 vo BX Thut ton : CASE AX < 0 put -1 in BX = 0 put 0 in BX > 0 put 1 in BX C th m ho nh sau : ; case AX CMP AX,0 ;test AX JL NEGATIVE ;AX<0 JE ZERO ;AX=0 JG positive ;AX>0 NEGATIVE: MOV BX,-1 JMP END_CASE ZERO: MOV BX,0

JMP END_CASE POSITIVE: MOV BX,1 JMP END_CASE END_CASE : R nhnh vi mt t hp cc iu kin i khi tnh trng r nhnh trong cc lnh IF ,CASE cn mt t hp cc iu kin di dng :

Chng 3 : Cc lnh lp v r nhnh Condition_1 AND Condition_2 Condition_1 OR Condition_2 V d v iu kin AND : c mt k t v nu n l k t hoa th in n ra mn hnh Thut ton : Read a character ( into AL) IF ( A<= character ) AND ( charater <= Z) THEN display character END_IF Sau y l code ;read a character MOV AH,2 INT 21H ; character in AL ; IF ( A<= character ) AND ( charater <= Z) CMP AL,A ; char >=A? JNGE END_IF ;no, exit CMP AL,Z ; char <=Z? JNLE END_IF ; no exit ; then display it MOV DL,AL MOV AH,2 INT 21H END_IF : V d v iu kin OR : c mt k t , nu k t l Y hoc y th in n ln mn hnh , ngc li th kt thc chng trnh . Thut ton Read a charcter ( into AL)

IF ( character =Y) OR ( character=y) THEN dispplay it ELSE terminate the program END_IF Code

Chng 3 : Cc lnh lp v r nhnh ;read a character MOV AH,2 INT 21H ; character in AL ; IF ( character =y ) OR ( charater = Y) CMP AL,y ; char =y? JE THEN ;yes , goto display it CMP AL,Y ; char =Y? JE THEN ; yes , goto display it JMP ELSE_ ;no , terminate THEN : MOV DL,AL MOV AH,2 INT 21H JMP END_IF ELSE_: MOV AH,4CH INT 21h END_IF : 4.3.2 Cu trc lp Mt vng lp gm nhiu lnh c lp li , s ln lp ph thuc iu kin . a) Vng FOR Lnh LOOP c th dng thc hin vng FOR .C php ca lnh LOOP nh sau : LOOP destination_label S m cho vng lp l thanh ghi CX m ban u n c gn 1 gi tr no . Khi lnh LOOP c thc hin CX s t ng gim i 1 . Nu CX cha bng 0 th vng lp c thc hin tip tc . Nu CX=0 lnh sau lnh LOOP c thc hin Dng lnh LOOP , vng FOR c th thc hin nh sau : ; gn cho cho CX s ln lp TOP:

; thn ca vng lp LOOP TOP V d : Dng vng lp in ra 1 hng 80 du * MOV CX,80 ; CX ch s ln lp MOV AH,2 ; hm xut k t

Chng 3 : Cc lnh lp v r nhnh MOV DL,* ;DL ch k t * TOP: INT 21h ; in du * LOOP TOP ; lp 80 ln Lu rng vng FOR cng nh lnh LOOP thc hin t nht l 1 ln . Do o nu ban u CX=0 th vng lp s lm cho CX=FFFH ,tc l thc hin lp n 65535 ln . trnh tnh trng ny , lnh JCXZ ( Jump if CX is zero) phi c dng trc vng lp . Lnh JXCZ c c php nh sau : JCXZ destination_label Nu CX=0 iu khin c chuyn cho destination_label . Cc lnh sau y s m bo vng lp khng thc hin nu CX=0 JCXZ SKIP TOP : ; thn vng lp LOOP TOP SKIP : b) Vng WHILE Vng WHILE ph thuc vo 1 iu kin .Nu iu kin ng th thc hin vng WHILE . V vy nu iu kin sai th vng WHILE khng thc hin g c . V d : Vit on m m s k t c nhp vo trn cng mt hng . MOV DX,0 ; DX m s k t MOV AH,1 ;hm c 1 k t INT 21h ; c k t vo AL WHILE_: CMP AL,0DH ; c phi l k t CR? JE END_WHILE ; ng , thot INC DX ;tng DX ln 1 INT 21h ; c k t JMP WHILE_ ; lp END_WHILE :

c) Vng REPEAT Cu trc ca REPEAT l repeat statements until condition Trong cu trc repeat mnh c thi hnh ng thi iu kin c kim tra. Nu iu kin ng th vng lp kt thc .

Chng 3 : Cc lnh lp v r nhnh V d : vit on m c vo cc k t cho n khi gp k t trng . MOV AH,1 ; c k t REPEAT: INT 21h ; k t trn AL ;until CMP AL, ; AL= ? JNE REPEAT Lu : vic s dng REPEAT hay WHILE l tu theo ch quan ca mi ngi . Tuy nhin c th thy rng REPEAT phi tin hnh t nht ln , trong khi WHILE c th khng tin hnh ln no c nu ngay t u iu kin b sai . 3.5 Lp trnh vi cu trc cp cao Bi ton : Vit chng trnh nhc ngi dng g vo mt dng vn bn . Trn 2 dng tip theo in ra k t vit hoa u tin v k t vit hoa cui cng theo th t alphabetical . Nu ngi dng g vo mt k t thng , my s thng bo No capitals Kt qa chy chng trnh s nh sau : Type a line of text : TRUONG DAi HOC DALAT First capital = A Last capital = U gii bi ton ny ta dng k thut lp trnh TOP-DOWN , ngha l chia nh bi ton thnh nhiu bi ton con . C th chia bi ton thnh 3 bi ton con nh sau : 1. Xut 1 chui k t ( li nhc) 2. c v x l 1 dng vn bn 3. In kt qa Bc 1: Hin du nhc . Bc ny c th m ho nh sau : MOV AH,9 ; hm xut chui LEA DX,PRMOPT ;ly a ch chui vo DX INT 21H ; xut chui

Du nhc c th m ho nh sau trong on s liu .

Chng 3 : Cc lnh lp v r nhnh PROMPT DB Type a line of text :,0DH,0AH,$ Bc 2 : c v x l mt dng vn bn Bc ny thc hin hu ht cc cng vic ca chng trnh : c cc k t t bn phm , tm ra k t u v k t cui , nhc nh ngi dng nu k t g vo khng phi l k t hoa . C th biu din bc ny bi thut ton sau : Read a character WHILE character is not a carrige return DO IF character is a capital (*) THEN IF character precedes first capital Then first capital= character End_if IF character follows last character Then last character = character End_if END_IF Read a character END_WHILE Trong dng (*) c ngha l iu kin k t l hoa l iu kin AND IF ( A<= character ) AND ( character <= Z) Bc 2 c th m ho nh sau : MOV AH,1 ; c k t INT 21H ; k t trn AL WHILE : ;trong khi k t g vo khng phi l CR th thc hin CMP AL,0DH ; CR?

JE END_WHILE ;yes, thot ; nu k t l hoa CMP AL,A ; char >=A? JNGE END_IF ;khng phi k t hoa th nhy n END_IF CMP AL,Z ; char <= Z? JNLE END_IF ; khng phi k t hoa th nhy n END_IF ; th

Chng 3 : Cc lnh lp v r nhnh ; nu k t nm trc bin FIRST ( gi tr ban u l[ : k t sau Z ) CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >= ; th k t vit hoa u tin = k t MOV FIRST,AL ; FIRST=character ;end_if CHECK_LAST: ; nu k t l sau bin LAST ( gi tr ban u l @: k t trc A) CMP AL,LAST ; char > LAST ? JNG END_IF ; <= ;th k t cui cng = k t MOV LAST, AL ;LAST = character ;end_if END_IF : ; c mt k t INT 21H ; k t trn AL JMP WHILE_ ; lp END_WHILE: Cc bin FIRST v LAST c nh ngha nh sau trong on s liu : FIRST DB [ $ ; [ l k t sau Z LAST DB @ $ ; @ l k t trc A Bc 3 : In kt qa Thut ton IF no capital were typed THEN display No capital ELSE display first capital and last capital END_IF Bc 3 s phi in ra cc thng bo :

NOCAP_MSG nu khng phi ch in CAP1_MSG ch in u tin CAP2_MSG ch in cui cng Chng c nh ngha nh sau trong on s liu . NOCAP_MSG DB 0DH,0AH,No capitals $ CAP1_MSG DB 0DH,0AH, First capital= FIRST DB [ $ CAP2_MSG DB 0DH,0AH,Last capital=

Chng 3 : Cc lnh lp v r nhnh LAST DB @ $ Bc 3 c th m ho nh sau : ;in kt qu MOV AH,9 ; hm xut k t ; IF khng c ch hoa no c nhp th FIRST =[ CMP FIRST,[ ; FIRST=[ ? JNE CAPS ; khng , in kt qa ;THEN LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG INT 21H LEA DX,CAP2_MSG INT 21H ; end_if Chng trnh c th vit nh sau : TITLE PGM3-1 : FIRST AND LAST CAPITALS .MODEL SMALL .STACK 100h .DATA PROMPT DB Type a line of text, 0DH, AH, $ NOCAP_MSG DB 0DH,0AH, No capitals $ CAP1_MSG DB 0DH,0AH, First capital= FIRST DB [ $ CAP2_MSG DB Last capital = LAST DB @ $ .CODE MAIN PROC ; khi to DS MOV AX,@DATA MOV DS,AX

; in du nhc MOV AH,9 ; hm xut chui LEA DX,PROMPT ;ly a ch chui vo DX INT 21H ; xut chui

Chng 3 : Cc lnh lp v r nhnh ;c v x l 1 dng vn bn MOV AH,1 ; c k t INT 21H ; k t trn AL WHILE : ;trong khi k t g vo khng phi l CR th thc hin CMP AL,0DH ; CR? JE END_WHILE ;yes, thot ; nu k t l hoa CMP AL,A ; char >=A? JNGE END_IF ;khng phi k t hoa th nhy n END_IF CMP AL,Z ; char <= Z? JNLE END_IF ; khng phi k t hoa th nhy n END_IF ; th ; nu k t nm trc bin FIRST CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >= ; th k t vit hoa u tin = k t MOV FIRST,AL ; FIRST=character ;end_if CHECK_LAST: ; nu k t l sau bin LAST CMP AL,LAST ; char > LAST ? JNG END_IF ; <= ;th k t cui cng = k t MOV LAST, AL ;LAST = character ;end_if END_IF : ; c mt k t INT 21H ; k t trn AL JMP WHILE_ ; lp END_WHILE:

;in kt qu MOV AH,9 ; hm xut k t ; IF khng c ch hoa no c nhp th FIRST =[ CMP FIRST,[ ; FIRST=[ ? JNE CAPS ; khng , in kt qa ;Then LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG

Chng 3 : Cc lnh lp v r nhnh INT 21H LEA DX,CAP2_MSG INT 21H ; end_if ; dos exit MOV AH,4CH INT 21h MAIN ENDP END MAIN

Chng 4 : Cc lnh dch v quay Chng 4 : CC LNH LOGIC , DCH V QUAY Trong chng ny chng ta s xem xt cc lnh m chng c th dng thay i tng bit trn mt byte hoc mt t s liu . Kh nng qun l n tng bit thng l khng c trong cc ngn ng cp cao ( tr C ) v y l l do gii thch ti sao hp ng vn ng vai tr quan trng trong khi lp trnh . 4.1 Cc lnh logic Chng ta c th dng cc lnh logic thay i tng bit trn byte hoc trn mt t s liu . Khi mt php ton logic c p dng cho ton hng 8 hoc 16 bit th c th p dng php ton logic trn tng bit thu c kt qa cui cng . V d : Thc hin cc php ton sau : 1. 10101010 AND 1111 0000 2. 10101010 OR 1111 0000 3. 10101010 XOR 1111 0000 4. NOT 10101010 Gii : 1. 10101010 AND 1111 0000 = 1010 0000 2. 10101010 OR 1111 0000 = 1111 1010 3. 1010 1010 XOR 1111 0000 0101 1010 4. NOT 10101010 = 01010101

Chng 4 : Cc lnh dch v quay 4.1.1 Lnh AND,OR v XOR Lnh AND,OR v XOR thc hin cc chc nng ng nh tn gi ca n . C php ca chng l : AND destination , source OR destination , source XOR destination , source Kt qa ca lnh c lu tr trong ton hng ch do chng phi l thanh ghi hoc v tr nh . Ton hng ngun l c th l hng s , thanh ghi hoc v tr nh . D nhin hai ton hng u l v tr nh l khng c php . Anh hng n cc c : Cc c SF,ZF v PF phn nh kt qa AF khng xc nh CF=OF=0 thay i tng bit theo mun chng ta xy dng ton hng ngun theo kiu mt n ( mask) . xy dng mt n chng ta s dng cc tnh cht sau y ca cc php ton AND ,OR v XOR : b AND 1 = b b OR 0 = b b XOR 0 = b b AND 0 = 0 b OR 1 = 1 b XOR 1 = not b Lnh AND c th dng xa ( clear) ton hng ch nu mt n bng 0 Lnh OR c th dng t ( set) 1 cho ton hng ch nu mt n bng 1 Lnh XOR c th dng ly o ton hng ch nu mt n bng 1 . Lnh XOR cng c th dng xa ni dung mt thanh ghi ( XOR vi chnh n ) V d : Xo bit du ca AL trong khi cc bit khc khng thay i Gii : Dng lnh AND vi mt n 0111111=7Fh AND AL,7Fh ; xa bit du ( du + ) ca AL V d : Set 1 cho cc bit MSB v LSB ca AL , cc bit khc khng thay i . Gii : Dng lnh OR vi mt n 10000001 =81h OR AL,81h ; set 1 cho LSB v MSB ca AL V d : Thay i bit du ca DX Gii : Dng lnh XOR vi mt n 1000000000000000=8000h XOR DX,8000h Cc lnh logic l c bit c ch khi thc hin cc nhim v sau :

i mt s di dng ASCII thnh mt s Gi s rng chng ta c mt k t t bn phm bng hm 1 ngt 21h . Khi AL cha m ASCII ca k t . iu ny cng ng nu k t l mt s ( digital character) . V d nu chng ta g s 5 th AL = 35h ( ASCII code for 5)

Chng 4 : Cc lnh dch v quay cha 5 trn AL chng ta dng lnh : SUB AL,30h C mt cch khc lm vic ny l dng lnh AND xa na byte cao (high nibble = 4 bit cao ) ca AL : AND AL,0Fh V cc s t 0-9 c m ASCII t 30h-39h , nn cch ny dng i mi s ASCII ra thp phn . Chng trnh hp ng i mt s thp phn thnh m ASCII ca chng c xem nh bi tp . i ch thng thnh ch hoa M ASCII ca cc k t thng t a-z l 61h-7Ah v m ASCII ca cc k t hoa t A-Z l 41h -5Ah . Gi s DL ch k t thng , i n thnh ch hoa ta dng lnh : SUB DL,20h Nu chng ta so snh m nh phn tng ng ca k t thng v k t hoa th thy rng ch cn xa bit th 5 th s i k t thng sang k t hoa . Character Code Character Code a(61h) 01100001 A (41h) 01000001 b (62h) 01100010 B ( 42h) 01000010 . . z ( 7Ah) 01111010 Z ( 5Ah) 01011010 C th xa bit th 5 ca DL bng cch dng lnh AND vi mt n 11011111= DF h AND DL,0DFh ; i k t thng trong DL sang k t hoa Xa mt thanh ghi Chng ta c th dng lnh sau xa thanh ghi AX : MOV AX,0 hoc SUB AX,AX XOR AX,AX Lnh th nht cn 3 bytes trong khi 2 lnh sau ch cn 2 bytes . Nhng lnh MOV phi c dng xo 1 v tr nh . Kim tra mt thanh ghi c bng 0 ?

Chng 4 : Cc lnh dch v quay Thay cho lnh CMP AX,0 Ngi ta dng lnh OR CX,CX kim tra xem CX c bng 0 hay khng v n lm thay i c ZF ( ZF=0 nu CX=0 ) 4.1.2 Lnh NOT Lnh NOT dng ly b 1 ( o) ton hng ch . C php l : NOT destination Khng c c no b nh hng bi lnh NOT V d : Ly b 1 AX NOT AX 4.1.3 Lnh TEST Lnh TEST thc hin php AND gia ton hng ch v ton hng ngun nhng khng lm thay i ton hng ch . Mc ch ca lnh TEST l set cc c trng thi . C php ca lnh test l : TEST destination,source Cc c b nh hng ca lnh TEST : SF,ZF v PF phn nh kt qa AF khng xc nh CF=OF=0 Lnh TEST c th dng khm 1 bit trn ton hng . Mt n phi cha bit 1 ti v tr cn khm , cc bit khc th bng 0 . Kt qu ca lnh : TEST destination,mask s l 1 ti bit cn test nu nh ton hng ch cha 1 ti bit test . Nu ton hng ch cha 0 ti bit test th kt qu s bng 0 v do ZF=1 . V d : Nhy ti nhn BELOW nu AL l mt s chn Gii : S chn c bit th 0 bng 0 , lnh TEST AL,1 ; AL chn ?

JZ BELOW ; ng , nhy n BELOW 4.2 Lnh SHIFT

Chng 4 : Cc lnh dch v quay Lnh dch v quay s dch cc bit trn trn ton hng ch mt hoc nhiu v tr sang tri hoc sang phi . Khc nhau ca lnh dch v lnh quay l ch : cc bit b dch ra ( trong lnh dch ) s b mt .Trong khi i vi lnh quay , cc bit b dch ra t mt u ca ton hng s c a tr li u kia ca n . C 2 kh nng vit i vi lnh dch v quay : OPCODE destination,1 OPCODE destination,CL trong cch vit th hai thanh ghi CL ch N l s ln dch hay quay . Ton hng ch c th l mt thanh ghi 8 hoc 16 bit , hoc mt v tr nh . Cc lnh dch v quay thng dng nhn v chia cc s nh phn . Chng cng c dng cho cc hot ng nhp xut nh phn v hex . 4.2.1 Lnh dch tri ( left shift ) Lnh SHL dch ton hng ch sang tri .C php ca lnh nh sau : SHL destination ,1 ; dch tri dest 1 bit SHL destination , CL ; dch tri N bit ( CL cha N) C mi ln dch tri , mt s 0 c thm vo LSB . CF 7 6 5 4 3 2 1 0 0 1 byte Cc c b nh hng : SF,PF,ZF phn nh kt qa AF khng xc nh CF= bit cui cng c dch ra OF= 1 nu kt qa thay i du vo ln dch cui cng V d : Gi s DH =8Ah v CL=3 . Hi gi tr ca DH v CF sau khi lnh SHL DH,CL c thc hin ? Kt qa DH=01010000=50h , CF=0 Nhn bng lnh SHL Chng ta hy xt s 235decimal . Nu dch tri 235 mt bit v thm 0 vo bn phi chng ta s c 2350 . No cch khc , khi dch tri 1 bit chng ta nhn 10.

i vi s nh phn, dch tri 1 bit c ngha l nhn n vi 2.V d AL=00000101=5d SHL AL,1 ; AL=00001010=10d SHL AL,CL ; nu CL=2 th AL=20d sau khi thc hin lnh Lnh dch tri s hc ( SAL =Shift Arithmetic Left)

Chng 4 : Cc lnh dch v quay Lnh SHL c th dng nhn mt ton hng vi h s 2 . Tuy nhin trong trng hp ngi ta mun nhn mnh n tnh cht s hc ca php ton th lnh SAL s c dng thay cho SHL . C 2 lnh u to ra cng mt m my . Mt s m cng c th c nhn 2 bng cch dch tri . V d : Nu AX=FFFFh= -1 th sau khi dch tri 3 ln AX=FFF8h = -8 Trn Khi chng ta dng lnh dch tri nhn th c th xy ra s trn . i vi lnh dch tri 1 ln , CF v OF phn nh chnh xc s trn du v trn khng du . Tuy nhin cc c s khng phn nh chnh xc kt qa nu dch tri nhiu ln bi v dch nhiu ln thc cht l mt chui cc dch 1 ln lin tip v v vy cc c CF v OF ch phn nh kt qu ca ln dch cui cng . V d : BL=80h , CL=2 th lnh SHL BL,CL s lm cho CF=OF=0 mc d trn thc t xy ra c trn du v trn khng du . V d : vit on m nhn AX vi 8 . Gi s rng khng c trn . MOV CL,3 ; CL=3 SHL AX,CL ; AX*8 4.2.2 Lnh dch phi ( Right Shift ) Lnh SHR dch phi ton hng ch 1 hoc N ln . SHR destination,1 SHR destination,CL C mi ln dch phi , mt s 0 c thm vo MSB Cc c b nh hng ging nh lnh SHL 0 7 6 5 4 3 2 1 0 CF 1 byte V d : gi s DH = 8Ah , CL=2 Lnh SHR DH,CL ; dch phi DH 2 ln s cho kt qu nh sau : Kt qa trn DH=22h , CF=1 Cng nh lnh SAL , lnh SAR ( dch phi s hc ) hot ng ging nh SHR , ch c 1 iu khc l MSB vn gi gi tr nguyn thy ( bit du gi nguyn) sau khi dch .

Chia bng lnh dch phi

Chng 4 : Cc lnh dch v quay Lnh dch phi s chia 2 gi tr ca ton hng ch . iu ny ng i vi s chn . i vi s l , lnh dch phi s chia 2 v lm trn xung s nguyn gn n nht . V d , nu BL = 00000101=5 th khi dch phi BL=00000010 =2 . Chia c du v khng du thc hin php chia bng lnh dch phi , chng ta phi phn bit gia s c du v s khng du . Nu din dch l khng du th dng lnh SHR , cn nu din dch c du th dng SAR ( bit du gi nguyn ) . V d : dng lnh dch phi chia s khng du 65143 cho 4 . Thng s t trn AX . MOV AX,65134 MOV CL,2 SHR AX,CL V d : Nu AL = -15 , cho bit AL sau khi lnh SAR AL,1 c thc hin Gii : AL= -15 = 11110001b Sau khi thc hin SAR AL ta c AL = 11111000b = -8 4.3 Lnh quay ( Rotate) Quay tri ( rotate left ) = ROL s quay cc bit sang tri , LSB s c thay bng MSB . Cn CF=MSB CF 7 6 5 4 3 2 1 0 C php ca ROL nh sau : ROL destination,1 ROL destination,CL Quay phi ( rotate right ) = ROR s quay cc bit sang phi , MSB s c thay bng LSB . Cn CF=LSB 7 6 5 4 3 2 1 0 CF C php ca lnh quay phi l

Chng 4 : Cc lnh dch v quay ROR destination,1 ROR destination,CL Trong cc lnh quay phi v quay tri CF cha bit b quay ra ngoi . V d sau y cho thy cch khm cc bit trn mt byte hoc 1 t m khng lm thay i ni dung ca n . V d : Dng ROL m s bit 1 trn BX m khng thay i ni dung ca n . Kt qa ct trn AX . Gii : XOR AX,AX ; xo AX MOV CX,16 ; s ln lp = 16 ( mt t ) TOP: ROL BX,1 ; CF = bit quay ra JNC NEXT ; nu CF =0 th nhy n vng lp INC AX ; ngc li (CF=1) , tng AX NEXT: LOOP TOP Quay tri qua c nh ( rotate through carry left ) = RCL . Lnh ny ging nh lnh ROL ch khc l c nh nm gia MSB v LSB trong vng kn ca cc bit CF 76543210 C php ca ca lnh RCL nh sau : RCL destination,1 RCL destination,CL Quay phi qua c nh ( rotate through carry right ) = RCR . Lnh ny ging nh lnh ROR ch khc l c nh nm gia MSB v LSB trong vng kn ca cc bit .

Chng 4 : Cc lnh dch v quay CF 76543210 C php ca ca lnh RCR nh sau : RCR destination,1 RCR destination,CL V d : Gi s DH = 8Ah ,CF=1 v CL=3 . Tm gi tr ca DH,CF sau khi lnh RCR DH,CL c thc hin Gii : CF DH Gi tr ban u 1 10001010 Sau khi quay 1 ln 0 11000101 Sau khi quay 2 ln 1 01100010 Sau khi quay 3 ln 0 10110001=B1H Anh hng ca lnh quay ln cc c SF,PF v ZF phn nh kt qu CF-bit cui cng c dch ra OF=1 nu kt qa thay i du vo ln quay cui cng ng dng : o ngc cc bit trn mt byte hoc 1 t .V d AL =10101111 th sau khi o ngc AL=11110101 . C th lp 8 ln cng vic sau :Dng SHL dch bit MSB ra CF , Sau dng RCR a n vo BL . on m lm vic ny nh sau : MOV CX,8 ;s ln lp REVERSE : SHL AL,1 ; dch MSB ra CF RCR BL,1 ; a CF ( MSB) vo BL LOOP REVERSE MOV AL,BL ; AL cha cc bit o ngc 4.4 Xut nhp s nh phn v s hex

Chng 4 : Cc lnh dch v quay Cc lnh dch v quay thng c s dng trong cc hot ng xut nhp s nh phn v s hex. 4.4.1 Nhp s nh phn Gi s cn nhp mt s nh phn t bn phm , kt thc l phm CR . S nh phn l mt chui cc bit 0 v 1 . Mi mt k t g vo phi c bin i thnh mt bit gi tr ( 0 hoc 1) ri tch lu chng trong 1 thanh ghi . Thut ton sau y s c mt s nh phn t bn phm v ct n trn thanh ghi BX . Clear BX input a character ( 0 or 1) WHILE character<> CR DO convert character to binary value left shift BX insert value into LSB of BX input a character END_WHILE on m thc hin thut ton trn nh sau : XOR BX,BX ; Xo BX MOV AH,1 ; hm c 1 k t INT 21h ; k t trn AL WHILE_: CMP AL,0DH ; k t l CR? JE END_WHILE ; ng , kt thc AND AL,0Fh ; convert to binary value SHL BX,1 ; dch tri BX 1 bit OR BL,AL ; t gi tr vo BX INT 21h ; c k t tip theo JMP WHILE_ ; lp END_WHILE: 4.4.2 Xut s nh phn Gi s cn xut s nh phn trn BX ( 16 bit) . Thut ton c th vit nh sau

FOR 16 times DO rotate left BX ( put MSB into CF) IF CF=1

Chng 4 : Cc lnh dch v quay then output 1 else output 0 END_IF END_FOR on m xut s nh phn c th xem nh bi tp . 4.4.3 Nhp s HEX Nhp s hex bao gm cc s t 0 n 9 v cc k t A n F . Kt qa cha trong BX . ch o n gin chng ta gi s rng : ch c k t hoa c dng ngi dng nhp vo khng qa 4 k t hex Thut ton nh sau : Clear BX input character WHILE character<> CR DO convert character to binary value( 4 bit) left shift BX 4 times insert value into lower 4 bits of BX input character END_WHILE on m c th vit nh sau :

Chng 4 : Cc lnh dch v quay XOR BX,BX ; clear BX MOV CL,4 ; counter for 4 shift MOV AH,1 ; input character ; function INT 21h ; input a chracter AL WHILE_: CMP AL,0Dh ; character <>CR? JE END_WHILE_ ; yes , exit ; convert character to binary value CMP AL,39H ; a character? JG LETTER ; no , a letter ; input is a digit AND value JMP LETTER: SUB value SHIFT: AL,0Fh SHIFT AL,37h SHL BX,CL ; insert value into BX OR BL,AL BX ; convert digit to binary ; go to insert BX ; convert letter to binary ; make room for new value ; put value into low 4 bits of INT 21H ; input a character

JMP WHILE_ END_WHILE:

Chng 4 : Cc lnh dch v quay 4.4.4 Xut s HEX xut s hex trn BX ( 16 bit = 4 digit hex) c th bt u t 4 bit bn tri , chuyn chng thnh mt s hex ri xut ra mn hnh . Thut ton nh sau : FOR 4 times DO move BH to DL Shift DL 4 times to right IF DL<10 then convert to character in 0 ...9 else convert to character in A..F END_IF output character ( HAM 2 NGAT 21H) rotate BX left 4 times END_FOR Phn code cho thut ton ny xem nh bi tp .

Chng 4 : Cc lnh dch v quay

Chng 5 : Ngn xp v th tc Chng 5 : NGN XP V TH TC on ngn xp ( stack segment ) trong chng trnh c dng ct gi tm thi s liu v a ch . Trong chng ny chng ta s xem xt cch t chc stack v s dng n thc hin cc th tc ( procedure) . 5.1 Ngn xp Ngn xp l cu trc d liu 1 chiu . iu c ngha l s liu c a vo v ly ra khi stack ti u cui ca stack theo nguyn tc LIFO ( last in first out) . V tr ti s liu c a vo hay ly ra gi l nh ca ngn xp ( top of stack) .C th hnh dung satck nh mt chng a . a a vo sau cng nm ti nh ca chng a . Khi ly ra , a trn cng s c ly ra trc . Mt chng trnh phi dnh ra mt khi nh cho ngn xp . Chng ta dng ch dn .STACK 100h khai bo kch thc vng stack l 256 bytes . Khi chng trnh c dch v np vo b nh thanh ghi SS ( stack segment) s cha a ch on stack . Cn SP ( stack pointer) cha a ch nh ca ngn xp . Trong khai bo stack 100h trn y , SP nhn gi tr 100h . iu ny c ngha l stack trng rng ( empty) nh hnh 4-1. OFFSET 00FO 00F2 00F4 00F6 00F8 00FA 00FC 00FE 0100 SP AX=1234 BX=5678 SP=0100 Hnh 4.1 : STACK EMPTY

Chng 5 : Ngn xp v th tc Lnh PUSH v PUSHF thm mt t mi vo stack chng ta dng lnh : PUSH source ; a mt thanh ghi hoc t nh 16 bit vo stack V d PUSH AX . Khi lnh ny c thc hin th : SP gim i 2 mt bn copy ca ton hng ngun c chuyn n a ch SS:SP cn ton hng ngun khng thay i . Lnh PUSHF khng c ton hng .N dng ni dung thanh ghi c vo stack . Sau khi thc hin lnh PUSH th SP s gim 2 . Hnh 5-2 v 5-3 cho thy lnh PUSH lm thay i trng thi stack nh th no . OFFSET 00FO 00F2 00F4 00F6 00F8 00FA 00FC 00FE 1234 SP 0100 AX=1234 BX=5678 SP=00FE Hnh 5-2 : STACK sau khi thc hin lnh PUSH AX OFFSET 00FO 00F2 00F4 00F6 00F8 00FA 00FC 00FE

0100 5678 SP 1234 Hnh 5-3 : STACK sau khi thc hin lnh PUSH BX

Chng 5 : Ngn xp v th tc Lnh POP v POPF ly s liu ti nh stack ra khi stack ,chng ta dng lnh : POP destination ; ly s liu ti nh stack ra destination Destination c th l 1 thanh ghi hoc t nh 16 bit . V d : POP BX ; Ly s liu trong stack ra thanh ghi BX . Khi thc hin lnh POP : ni dung ca nh stack ( a ch SS:SP) c di chuyn n ch . SP tng 2 Lnh POPF s ly nh stack a vo thanh ghi c . Cc lnh PUSH,PUSHF,POP,POPF khng nh hng n cc c . Lu : Lnh PUSH, POP l lnh 2 bytes v vy cc lnh 1 byte nh : PUSH DL ; lnh khng hp l PUSH 2 ; lnh khng hp l Ngoi chc nng lu tr s liu v a ch ca chng trnh do ngi s dng vit , stack cn c dng bi h iu hnh lu tr trng thi ca chng trnh chnh khi c ngt . 5.2 ng dng ca stack Bi v nguyn tc lm vic ca stack l LIFO nn cc i tng c ly ra khi stack c trt t ngc li vi trt t m chng c a vo stack . Chng trnh sau y s c mt chui k t ri in chng trn dng mi vi trt t ngc li . Thut ton cho chng trnh nh sau : Display a ? Initialize count to 0 Read a character WHILE character is not CR DO PUSH chracter onto stack Incremet count Read a character END_WHILE ; Goto a new line FOR count times DO

POP a chracter from the stack Display it ; END_FOR

Chng 5 : Ngn xp v th tc Sau y l chng trnh : TITLE PGM5-1 : REVERSE INPUT .MODEL SMALL .STACK 100H .CODE MAIN PROC ; in du nhc MOV AH,2 MOV DL,? INT 21H ; xo bin m CX XOR CX,CX ;c 1 k t MOV AH,1 INT 21H ;Trong khi character khng phi l CR WHILE_: CMP AL,0DH JE END_WHILE ;ct AL vo stack tng bin m PUSH AX ; y AX vo stack INC CX ; tng CX ; c 1 k t INT 21h JMP WHILE_ END_WHILE: ; Xung dng mi MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH

INT 21H JCXZ EXIT ; thot nu CX=0 ( khng c k t no c nhp) ; lp CX ln TOP: ;ly k t t stack POP DX ;xut n INT 21H LOOP TOP ; lp nu CX>0

Chng 5 : Ngn xp v th tc ; end_for EXIT: MOV AH,4CH INT 21H MAIN ENDP END MAIN Gii thch thm v chng trnh : v s k t nhp l khng bit v vy dng thanh ghi CX m s k t nhp . CX cng dng cho vng FOR xut cc k t theo th t ngc li . Mc d k t ch gi trn AL nhng phi y c thanh ghi AX vo stack . Khi xut k t chng ta dng lnh POP DX ly ni dung trn stack ra. M ASCII ca k t trn DL , sau gi INT 21h xut k t . 5.3 Th tc ( Procedure) Trong chng 3 chng ta cp n tng lp trnh top-down . tng ny c ngha l mt bi ton nguyn thu c chia thnh cc bi ton con m chng d gii quyt hn bi ton nguyn thu . Trong cc ngn ng cp cao ngi ta dng th tc gii cc bi ton con , v chng ta cng lm nh vy trong hp ng . Nh vy l mt chng trnh hp ng c th c xy dng bng cc th tc . Mt th tc gi l th tc chnh s cha ni dung ch yu ca chng trnh . thc hin mt cng vic no , th tc chnh gi ( CALL) mt th tc con . Th tc con cng c th gi mt th tc con khc . Khi mt th tc gi mt th tc khc , iu khin c chuyn ti ( control transfer) th tc c gi v cc lnh ca th tc c gi s c thi hnh . Sau khi thi hnh ht cc lnh trong n , th tc c gi s tr iu khin ( return control) cho th tc gi n . Trong ngn ng cp cao , lp trnh vin khng bit v khng th bit c cu ca vic chuyn v tr iu khin gia th tc chnh v th tc con. Nhng trong hp ng c th thy r c cu ny ( xem phn 5.4) . Khai bo th tc C php ca lnh to mt th tc nh sau : name PROC type ; body of procedure RET name ENDP

Name do ngi dng nh ngha l tn ca th tc . Type c th l NEAR ( c th khng khai bo ) hoc FAR .

Chng 5 : Ngn xp v th tc NEAR c ngha l th tc c gi nm cng mt on vi th tc gi . FAR c ngha l th tc c gi v th tc gi nm khc an . Trong phn ny chng ta s ch m t th tc NEAR . Lnh RET tr iu khin cho th tc gi . Tt c cc th tc phi kt thc bi RET tr th tc chnh . Ch thch cho th tc : ngi c d hiu th tc ngi ta thng s dng ch thch cho th tc di dng sau : ; ( m t cc cng vic m th tc thi hnh) ; input: ( m t cc tham s c tham gia trong chng trnh ) ; output : ( cho bit kt qa sau khi chy th tc ) ; uses : ( lit k danh sch cc th tc m n gi ) MAIN PROC CALL PROC1 next instruction Hnh 5-1 : Gi th tc v tr v PROC1 PROC first instruction RET 5.4 CALL & RETURN Lnh CALL c dng gi mt th tc . C 2 cch gi mt th tc l gi trc tip v gi gin tip . CALL name ; gi trc tip th tc c tn l name CALL address-expression ; gi gin tip th tc trong address-expression ch nh mt thanh ghi hoc mt v tr nh m n cha a ch ca th tc . Khi lnh CALL c thi hnh th : i ch quay v ca th tc gi c ct vo stack . a ch ny chnh l offset ca lnh tip theo sau lnh CALL . IP ly a ch offset ca lnh u tin trn th tc c gi , c ngha l iu khin c chuyn n th tc . tr iu khin cho th tc chnh , lnh RET pop-value

Chng 5 : Ngn xp v th tc c s dng . Pop-value ( mt s nguyn N ) l ty chn . i vi th tc NEAR , lnh RET s ly gi tr trong SP a vo IP . Nu pop-value l ra mt s N th IP=SP+N Trong c 2 trng hp th CS:IP cha i ch tr v chng trnh gi v iu khin c tr cho chng trnh gi ( xem hnh 5-2) IP 0010 0012 0200 0300 MAIN PROC CALL PROC1 next instruction PROC1 PROC first instruction RET 00FE 0100h SP STACK SEGMENT Hnh 5-2 a : Trc khi CALL 0010 0012 IP 0200 0300 MAIN PROC CALL PROC1 next instruction

PROC1 PROC first instruction RET 00FE 0012 SP 0100h STACK SEGMENT Hnh 5-2 b : Sau khi CALL

Chng 5 : Ngn xp v th tc 0010 0012 0200 IP 0300 MAIN PROC CALL PROC1 next instruction PROC1 PROC first instruction RET Hnh 5-2 c : Trc khi RET 0010 IP 0012 0200 0300 MAIN PROC CALL PROC1 next instruction PROC1 PROC first instruction RET 00FE 0012 SP0100h STACK SEGMENT

00FE0100h SP STACK SEGMENT Hnh 5-2 d : Sau khi RET 5.5 V d v th tc Chng ta s vit chng trnh tnh tch ca 2 s dng A v B bng thut ton cng ( ADD) v dch ( SHIFT ) Thut ton nh sau :

Chng 5 : Ngn xp v th tc Product = 0 REPEAT IF lsb of B is 1 THEN product=product+A END_IF shift left A shift right B UNTIL B=0 Trong chng trnh sau y chng ta s m ho th tc nhn vi tn l MULTIPLY. Chng trnh chnh khng c nhp xut , thay vo chng ta dng DEBUG nhp xut . TITLE PGM5-1: MULTIPLICATION BY ADD AND SHIFT .MODEL SMALL .STACK 100H .CODE MAIN PROC ; thc hin bng DEBUG . t A = AX , B=BX CALL MULTIPLY ;DX cha kt qa MOV AH,4CH INT 21H MAIN ENDP MULTIPY PROC ; input : AX=A , BX=B , AX v BX c gi tr trong khong 0...FFH ; output : DX= kt qa PUSH AX PUSH BX XOR DX,DX REPEAT:

; Nu lsb ca B =1 TEST BX,1 ;lsb=1? JZ END_IF ; khng , nhy n END_IF ; th ADD DX,AX ; DX=DX+AX END_IF : SHL AX,1 ; dch tri AX 1 bit SHR BX,1 ;dch phi BX 1 bit ; cho n khi BX=0

Chng 5 : Ngn xp v th tc JNZ REPEAT ; nu BX cha bng 0 th lp POP BX ; ly li BX POP AX ; ly li AX RET ; tr iu khin cho chng trnh chnh MULTIPLY ENDP END MAIN Sau khi dch chng trnh , c th dng DEBUG chy th n bng cch cung cp gi tr ban u cho AX v BX . Dng lnh U(unassembler) xem ni dung ca b nh tng ng vi cc lnh hp ng . C th xem ni dung ca stack bng lnh D(dump) DSS:F0 FF ; xem 16 bytes trn cng ca stack Dng lnh G(go) offset chy tng nhm lnh t CS:IP hin hnh CS:offset . Trong qu trnh chy DEBUG c th kim tra ni dung cc thanh ghi . Lu c bit n IP xem cch chuyn v tr iu khin khi gi v thc hin mt th tc .

Chng 6 : Lnh nhn v chia Chng 6 : LNH NHN V CHIA Trong chng 5 chng ta ni n cc lnh dch m chng c th dng nhn v chia vi h s 2 . Trong chng ny chng ta s ni n cc lnh nhn v chia mt s bt k . Qu trnh x l ca lnh nhn v chia i vi s c du v s khng du l khc nhau do c lnh nhn c du v lnh nhn khng du . Mt trong nhng ng dng thng dng nht ca lnh nhn v chia l thc hin cc thao tc nhp xut thp phn . Trong chng ny chng ta s vit th tc cho nhp xut thp phn m chng c s dng nhiu trong cc hot ng xut nhp t ngoi vi . 6.1 Lnh MUL v IMUL Nhn c du v nhn khng du Trong php nhn nh phn s c du v s khng du phi c phn bit mt cch r rng . V d chng ta mun nhn hai s 8 bit 1000000 v 1111111 . Trong din dch khng du , chng l 128 v 255 . Tch s ca chng l 32640 = 0111111110000000b . Trong din dch c du , chng l -128 v -1 . Do tch ca chng l 128 = 0000000010000000b . V nhn c du v khng du dn n cc kt qa khc nhau nn c 2 lnh nhn : MUL ( multiply) nhn khng du IMUL ( integer multiply) nhn c du Cc lnh ny nhn 2 ton hng byte hoc t . Nu 2 ton hng byte c nhn vi nhau th kt qa l mt t 16 bit .Nu 2 ton hng t c nhn vi nhau th kt qa l mt double t 32 bit . C php ca chng l : MUL source ; IMUL source ; Ton hng ngun l thanh ghi hoc v tr nh nhng khng c l mt hng Php nhn kiu byte i vi php nhn m ton hng l kiu byte th

AX=AL*SOURCE ; Php nhn kiu t i vi php nhn m ton hng l kiu t th DX:AX=AX*SOURCE

Chng 6 : Lnh nhn v chia Anh hng ca cc lnh nhn ln cc c . SF,ZF ,AF,PF : khng xc nh sau lnh MUL CF/OF= 0 nu na trn ca kt qa(DX) bng 0 =1 trong cc trng hp khc sau lnh IMUL CF/OF = 0 nu na trn ca kt qa c bit du ging nh bit du ca na thp . = 1 trong cc trng hp khc Sau y chng ta s ly vi v d . V d 1 : Gi s rng AX=1 v BX=FFFFh INSTRUCTION Dec product Hex Product DX AX CF/OF MUL BX 65535 0000FFFF 0000 FFFF 0 IMUL BX -1 FFFFFFFF FFFF FFFF 0 V d 2 : Gi s rng AX=FFFFh v BX=FFFFh INSTRUCTION Dec product Hex Product DX AX CF/OF MUL BX 4294836225 FFFE0001 FFFE 0001 1 IMUL BX 1 00000001 00000 0001 0 V d 3 : Gi s rng AX=0FFFh INSTRUCTION Dec product Hex Product DX AX CF/OF MUL AX 16769025 00FFE001 00FF E001 1 IMUL AX 16769025 00FFE001 00FF E001 1 V d 4 : Gi s rng AX=0100h v CX=FFFFh INSTRUCTION Dec product Hex Product DX AX CF/OF MUL CX 16776960 00FFFF00 00FF FF00 1 IMUL CX -256 FFFFFF00 FFFF FF00 0 V d 5 : Gi s rng AL=80h v BL=FFh INSTRUCTION Dec product Hex Product AH AL CF/OF MUL BL 128 7F80 7F 80 1 IMUL BL 128 0080 00 80 1

Chng 6 : Lnh nhn v chia 6.2 ng dng n gin ca lnh MUL v IMUL Sau y chng ta s ly mt s v d minh ha vic s dng lnh MUL v IMUL trong chng trnh . V d 1 : Chuyn on chng trnh sau trong ngn ng cp cao thnh m hp ng : A = 5xA -12xB . Gi s rng A v B l 2 bin t v khng xy ra s trn . Code : MOV AX,5 ; AX=5 IMUL A ; AX=5xA MOV A,AX ; A=5xA MOV AX,12 ; AX=12 IMUL B ; AX=12xB SUB A,AX ; A=5xA-12xB V D 2 : vit th tc FACTORIAL tnh N! cho mt s nguyn dng . Th tc phi cha N trn CX v tr v N! trn AX . Gi s khng c trn . Gii : nh nghi ca N! l N! = 1 nu N=1 = N x (N-1)x (N-2) x...x 1 nu N>1 Thut ton tnh N! nh sau : Product =1 Term = N FOR N times DO Product = product x term term=term -1 ENDFOR Code : FACTORIAL PROC ; computes N! ; input : CX=N ; output : AX=N! MOV AX,1 ; AX=1

MOV CX,N ; CX=N TOP: MUL CX ; Product = product x term LOOP TOP ; RET FACTORIAL ENDP

Chng 6 : Lnh nhn v chia 6.3 Lnh DIV v IDIV Cng nh lnh nhn , c 2 lnh chia DIV v IDIV cho s khng du v cho s c du . C php ca chng l : DIV divisor IDIV divisor Ton hng byte Lnh chia ton hng byte s chia s b chia 16 bit ( dividend) trn AX cho s chia ( divisor) l 1 byte . Divisor phi l 1 thanh ghi 8 bit hoc 1 byte nh . Thng s trn AL cn s d trn AH . Ton hng t Lnh chia ton hng t s chia s b chia 32 bit ( dividend) trn DX:AX cho s chia ( divisor) l 1 t . Divisor phi l 1 thanh ghi 16 bit hoc 1 t nh . Thng s trn AX cn s d trn DX . Anh hng ca cc c : cc c c trng thi khng xc nh . Divide Overflow Khi thc hin php chia kt qa cth khng cha ht trn AL hoc AX nu s chia b hn rt nhiu so vi s b chia . Trong trng hp ny trn mn hnh s xut hin thng bo : Divide overflow V d 1 : Gi s DX = 0000h , AX = 0005h v BX = 0002h Instruction Dec Quotient Dec Remainder AX DX DIV BX 2 1 0002 0001 IDIV BX 2 1 0002 0001 V d 1 : Gi s DX = 0000h , AX = 0005h v BX = FFFEh Instruction Dec Quotient Dec Remainder AX DX DIV BX 0 5 0000 0005 IDIV BX -2 1 FFFE 0001 V d 3 : Gi s DX = FFFFh , AX = FFFBh v BX = 0002h Instruction Dec Quotient Dec Remainder AX DX IDIV BX -2 -1 FFFE FFFF

DIV BX OVERFLOW

Chng 6 : Lnh nhn v chia V d 4 : Gi s AX = 00FBh v BL = FFh Instruction Dec Quotient Dec Remainder AX DX DIV BL 0 251 FB 00 IDIV BL OVERFLOW 6.4 M rng du ca s b chia Php chia vi ton hng t Trong php chia vi ton hng t , s b chia phi t trn DX:AX ngay c khi s b chia c th t trn AX . Trong trng hp ny , cn phi sa son nh sau i vi lnh DIV , DX phi b xo i vi lnh IDIV , DX phi c m rng du ca AX . Lnh CWD ( Convert Word to Doubleword ) s thc hin vic ny . V d : Chia -1250 cho 7 MOV AX,-1250 ; AX= -1250 CWD ; m rng du ca AX vo DX MOV BX,7 ; BX=7 IDIV BX ; chia DX:AX cho BX , kt qa trn AX , s d ; trn DX Php chia vi ton hng byte Trong php chia vi ton hng byte , s b chia phi t trn AX ngay c khi s b chia c th t trn AL . Trong trng hp ny , cn phi sa son nh sau i vi lnh DIV , AH phi b xo i vi lnh IDIV , AH phi c m rng du ca AL . Lnh CBW ( Convert Byte to Doublebyte ) s thc hin vic ny . V d : Chia mt s c du trong bin byte XBYTE cho -7 MOV AL, XBYTE ; AL gi s b chia CBW ; m rng du ca AL vo AH MOV BL,-7 ; BX= -7 IDIV BL ; chia AX cho BL , kt qa trn AL , s d ; trn AH Khng c c no b nh hng bi lnh CWD v CBW .

Chng 6 : Lnh nhn v chia 6.5 Th tc nhp xut s thp phn Mc d trong PC tt c s liu c biu din di dng binary . Nhng vic biu din di dng thp phn s thun tin hn cho ngi dng . Trong phn ny chng ta s vit cc th tc nhp xut s thp phn . Khi nhp s liu , nu chng ta g 21543 chng hn th thc cht l chng ta g vo mt chui k t , bn trong PC , chng c bin i thnh cc gi tr nh phn tng ng ca 21543 . Ngc li khi xut s liu , ni dung nh phn ca thanh ghi hoc v tr nh phi c bin i thnh mt chui k t biu din mt s thp phn trc khi chng c in ra . Xut s thp phn ( Decimal Output) Chng ta s vit mt th tc OUTDEC in ni dung ca thanh ghi AX nh l mt s nguyn thp phn c du . Nu AX>0 ,OUTDEC s in ni dung ca AX di dng thp phn . Nu AX<0 , OUTDEC s in du tr (-) , thay AX = -AX ( i thnb s dng ) ri in s dng ny sau du tr (-). Nh vy l trong c 2 trng hp , OUTDEC s in gi tr thp phn tng ng ca mt s dng . Sau y l thut ton : Algorithm for Decimal Output 1. IF AX < 0 / AX hold output value / 2. THEN 3. PRINT a minus sign 4. Replace AX by its twos complement 5. END_IF 6. Get the digits in AXs decimal representation 7. Convert these digits to characters and print them . hiu chi tit bc 6 cn phi lm vic g , chng ta gi s rng ni dung ca AX l mt s thp phn , v d 24618 thp phn . C th ly cc digits thp phn ca 24618 bng cch chia lp li cho 10d theo th tc nh sau : Divide 24618 by 10 . Qoutient = 2461 , remainder = 8 Divide 2461 by 10 . Qoutient = 246 , remainder = 1 Divide 246 by 10 . Qoutient = 24 , remainder = 6 Divide 24 by 10 . Qoutient = 2 , remainder = 4 Divide 2 by 10 . Qoutient = 0 , remainder = 2 Cc digits thu c bng cch ly cc s d theo trt t ngc li . Bc 7 ca thut ton c th thc hin bng vng FOR nh sau :

Chng 6 : Lnh nhn v chia FOR count times DO pop a digit from the stack convert it to a character output the character END_FOR Code cho th tc OUTDEC nh sau : OUTDEC PROC ; Print AX as a signed decimal integer ; input : AX ; output : none PUSH AX ; save registers PUSH BX PUSH CX PUSH DX ; IF AX<0 OR AX,AX ; AX < 0 ? JGE @END_IF1 ; NO , AX>0 ; THEN PUSH AX ; save AX MOV DL,- ; GET - MOV AH,2 INT 21H ; print - POP AX ; get AX back NEG AX ; AX = -AX @END_IF1: ; get decimal digits XOR CX,CX ; clear CX for counts digit MOV BX,10d ; BX has divisor

@REPEAT1: XOR DX,DX ; clear DX DIV BX ; AX:BX ; AX = qoutient , DX= remainder PUSH DX ; push remainder onto stack INC CX ; increment count ;until OR AX,AX ; qoutient = 0? JNE @REPEAT1 ; no keep going ; convert digits to characters and print MOV AH,2 ; print character function

Chng 6 : Lnh nhn v chia ; for count times do @PRINT_LOOP: POP DX ; digits in DL OR DL,30h ; convert digit to character INT 21H ; print digit LOOP @PRINT_LOOP ;end_for POP DX ; restore registers POP CX POP BX POP AX RET OUTDEC ENDP Ton t gi INCLUDE Chng ta c th thay i OUTDEC bng cch t n bn trong mt chng trnh ngn v chy chng trnh trong DEBUG . a th tc OUTDEC vo trong chng trnh m khng cn g n , chng ta dng ton t gi INCLUDE vi c php nh sau : INCLUDE filespec y filespec dng nhn dng tp tin ( bao gm c ng dn ca n ) . V d tp tin cha OUTDEC l PGM6_1.ASM A: . Chng ta c th vit : INCLUDE A:\PGM6_1.ASM Sau y l chng trnh test th tc OUTDEC TITLE PGM6_2 : DECIMAL OUTPUT .MODEL SMALL .STACK 100h .CODE MAIN PROC CALL OUTDEC MOV AH,4CH INT 21H

MAIN ENDP INCLUDE A:\PGM6_1.ASM END MAIN Sau khi dch , chng ta dng DEBUG nhp s liu v chy chng trnh .

Chng 6 : Lnh nhn v chia Nhp Thp phn ( Decimal input) nhp s thp phn chng ta cn bin i mt chui cc digits ASCII thnh biu din nh phn ca mt s nguyn thp phn . Chng ta s vit th tc INDEC lm vic ny . Trong th tc OUTDEC chng ta chia lp cho 10d . Trong th tc INDEC chng ta s nhn lp vi 10d . Decimal Input Algorithm Total = 0 read an ASCII digit REPEAT convert character to a binary value total = 10x total +value read a chracter UNTIL chracter is a carriage return V d : nu nhp 123 th x l nh sau : total = 0 read 1 convert 1 to 1 total = 10x 0 +1 =1 read 2 convert 2 to 2 total = 10x1 +2 =12 read 3

convert 3 to 3 total = 10x12 +3 =123 Sau y chng ta s xy dng th tc INDEC sao cho n chp nhn c cc s thp phn c du trong vng - 32768 n +32767 ( mt t ) . Chng trnh s in ra mt du ? nhc ngi dng g vo du + hoc - , theo sau l mt chui cc digit v kt thc l k t CR . Nu ngi dng g vo mt k t khng phi l 0 n 9 th th tc s nhy xung dng mi v bt u li t u . Vi nhng yu cu nh trn y th tc nhp thp phn phi vit li nh sau : Print a question mask Total = 0 negative = false Read a character CASE character OF - : negative = true read a chracter +; read a charcter

Chng 6 : Lnh nhn v chia END_CASE REPEAT IF character not between 0 and 9 THEN goto beginning ELSE convert character to a binary value total = 10xtotal + value IND_IF read acharacter UNTIL character is a carriage return IF negative = true then total = - total END_IF Th tc c th m ho nh sau ( ghi vo a A : vi tn l PGM6_2.ASM) INDEC PROC ; read a number in range -32768 to +32767 ; input : none ; output : AX = binary equvalent of number PUSH BX ; Save regiter PUSH CX PUSH DX ; print prompt @BEGIN: MOV AH,2

MOV DL,? INT 21h ; print ? ; total = 0 XOR BX,BX ; CX holds total ; negative = false XOR CX,CX ; cx holds sign ; read a character MOV AH,1 INT 21h ; character in AL ; CASE character of CMP AL,- ; minus sign JE @MINUS CMP AL,+ ; Plus sign

Chng 6 : Lnh nhn v chia JE @PLUS JMP @REPEAT2 ; start processing characters @MINUS: MOV CX,1 @PLUS: INT 21H @REPEAT2: ; if character is between 0 to 9 CMP AL,0 JNGE @NOT_DIGIT CMP Al,9 JNLE @NOT_DIGIT ; THEN convert character to digit AND AL,000FH ; convert to digit PUSH AX ; total =10x total + digit MOV AX,10 MUL BX POP BX ADD BX,AX ;read a character MOV AH,1 INT 21h CMP AL,0DH JNE @REPEAT ; until CR MOV AX,BX ; if negative

OR CX,CX JE @EXIT ;then NEG AX ; end_if @EXIT: POP DX POP CX ; save digit on stack ; AX= total x10 ; Retrieve digit ; TOTAL = 10XTOTAL + DIGIT ; restore total in AX ; negative number ; no exit POP BX RET ; HERE if illegal character entered @NOT_DIGIT MOV AH,2

Chng 6 : Lnh nhn v chia MOV DL,0DH INT 21h MOV DL,0Ah INT 21h JMP @BEGIN INDEC ENDP TEST INDEC C th test th tc INDEC bng cch to ra mt chng trnh dng INDEC cho nhp thp phn v OUTDEC cho xut thp phn nh sau : TITLE PGM6_4.ASM .MODEL SMALL .STACK 100h .CODE MAIN PROC ; input a number CALL INDEC PUSH AX ; save number ; move cursor to a new line MOV AH,2 MOV DL,0DH INT 21h MOV DL,0Ah INT 21H ;output a number POP AX CALL OUTDEC ; dos exit MOV AH,4CH INT 21H

MAIN ENDP INCLUDE A:\PGM6_1.ASM ; include outdec INCLUDE A:\PGM6-2.ASM ; include indec END MAIN

Chng 6 : Lnh nhn v chia

Chng 7 : Mng v cc ch a ch Chng 7: MNG V CC CH A CH Trong chng ny chng ta s cp n mng mt chiu v cc k thut x l mng trong Assembly . Phn cn li cachng ny s trnh by cc ch a ch. 7.1 Mng mt chiu Mng mt chiu l mt danh sch cc phn t cng loi v c trt t . C trt t c ngha l c phn t th nht , phn t th hai , phn t th ba ... Trong ton hc , nu A l mt mng th cc phn t ca mng c nh ngha lA[1}, A[2] , A[3} ... Hnh v l di y l mng A c 6 phn t . Index 1 2 3 4 5 6 A[1] A[2] A[3] A[4] A[5] A[6] Trong chng 1 chng ta dng ton t gi DB v DW khai bo mng byte v mng t . V d , mt chui 5 k t c tn l MSG MSG DB abcde hoc mt mng t W gm 6 s nguyn m gi tr ban ca chng l 10,20,30,40.50 v 60 W DW 10,20,30,40,50,60 a ch ca bin mng gi l a ch c s ca mng ( base address of the array) . Trong mng W th a ch c s l 10 .Nu a ch offset ca W l 0200h th trong b nh mng 6 phn t ni trn s nh sau : Offset address Symbolic address Decimal content 0200h W 10

0202h W+2h 20 0204h W+4h 30 0206h W+6h 40 0208h W+8h 50 020Ah W+Ah 60

Chng 7 : Mng v cc ch a ch Ton t DUP ( Duplicate) C th nh ngha mt mng m cc phn t ca n c cng mt gi tr ban u bng php DUP nh sau : repeat_count DUP ( value) lp li mt s ( VALUE) n ln ( n = repeat_count) V d : GAMMA DW 100 DUP (0) ; to mt mng 100 t m gi tr ban l 0 . DELTA DB 212 DUP (?) ; to mt mng 212 byte gi tr cha xc nh DUP c th lng nhau , v d : LINE DB 5,4,3 DUP (2, 3 DUP (0) ,1) tng ng vi : LINE DB 5,4,2,0,0,0,1,2,0,0,0,1,2,0,0,0,1 V tr cc phn t ca mt mng a ch ca mt phn t ca mng c th c xc nh bng cch cng mt hng s vi a ch c s . Gi s A l mt mng v S ch ra s byte ca mt phn t ca mng ( S=1 i vi mng byte v S=2 i vi mng t ) . V tr ca cc phn t ca mng A c th tnh nh sau : Position Location 1A 2 A+1xS 3 A+2xS .. .. .. N A+(N-1)xS V d : Trao i phn t th 10 v th 25 ca mng t W . Phn t th 10 l W[10] c a ch l W+9x2=W+18 Phn t th 25 l W[25] c a ch l W+24x2=W+48

V vy c th trao i chng nh sau : MOV AX,W+18 ; AX = W[10] XCHG W+48,AX ; AX= W[25] MOV W+18, AX ; complete exchange 7.2 Cc ch a ch ( addressing modes)

Chng 7 : Mng v cc ch a ch Cch thc ch ra ton hng trong lnh gi l ch a ch . Cc ch a ch thng dng l : Ch a ch bng thanh ghi ( register mode) : ton hng l thanh ghi Ch a ch tc thi ( immediate mode) : ton hng l hng s Ch a ch trc tip ( direct mode) : ton hng l bin V d : MOV AX,0 ; AX l register mode cn 0 l immediate mode ADD ALPHA,AX ; ALPHA l direct mode Ngoi ra cn c 4 ch a ch khc l : Ch a ch gin tip bng thanh ghi ( register indirect mode ) Ch a ch c s ( based mode) Ch a ch ch s ( indexed mode) Ch a ch ch s s s ( based indexed mode) 7.2.1 Ch a ch gin tip bng thanh ghi Trong ch a ch gin tip bng thanh ghi , a ch offset ca ton hng c ch trong 1 thanh ghi . Chng ta ni rng thanh ghi l con tr ( pointer) ca v tr nh . Dng ton hng l [register]. Trong register l cc thanh ghi BX, SI , DI , BP. i vi cc thanh ghi BX , SI , DI th thanh ghi on l DS . Cn thanh ghi on ca BP l SS . V d : gi s rng SI = 100h v t nh ti a ch DS:0100h c ni dung l 1234h . Lnh MOV AX,[SI] s copy 1234h vo AX . Gi s rng ni dung cc thanh ghi v ni dung ca b nh tng ng l nh sau : Thanh ghi ni dung offset ni dung b nh AX 1000h 1000h 1BACh SI 2000h 2000h 20FFh DI 3000h 3000h 031Dh V d 1: Hy cho bit lnh no sau y l hp l , offset ngun v kt qa ca cc lnh hp l . a. MOV BX,[BX] b. MOV CX,[SI]

c. MOV BX,[AX] d. ADD [SI],[DI] e. INC [DI]

Chng 7 : Mng v cc ch a ch Li gii : Source offset Result a. 1000h 1BACh b. 2000h 20FFh c. illegal source register ( must be BX,SI,DI) d. illegal memory-memory add e. 3000h 031Eh V d 2 : Vit on m cng vo AX 10 phn t ca mt mng W nh ngha nh sau : W DW 10,20,30,40,50,60,70,80,90,100 Gii : XOR AX,AX ; xo AX LEA SI,W ; SI tr ti a ch c s ( base) ca mmg W . MOV CX,10 ; CX ch s phn t ca mng ADDITION: ADD AX,[SI] ; AX=AX + phn t th nht ADD SI,2 ; tng con tr ln 2 LOOP ADDITION ; lp V d 3 : Vit th tc o ngc mt mng n t . iu ny c ngha l phn t th nht s i thnh phn t th n , phn t th hai s thnh phn t th n-1 ... Chng ta s dng SI nh l con tr ca mng cn BX cha s phn t ca mng ( n t ) . Gii : S ln trao i l N/2 ln . Nh rng phn t th N ca mng c a ch A+2x(N-1) on m nh sau : REVERSE PROC ; input: SI= offset of array ; BX= number of elements ; output : reverse array PUSH AX ; ct cc thanh ghi PUSH BX PUSH CX PUSH SI PUSH DI

; DI ch ti phn t th n

Chng 7 : Mng v cc ch a ch MOV DI,SI ; DI tr ti t th nht MOV CX,BX ; CX=BX=n : s phn t DEC BX ; BX=n-1 SHL BX,1 ;BX=2x(n-1) ADD DI,BX ;DI = 2x(n-1) + offset ca mng : ch ti phn t ; th n SHR CX,1 ;CX=n/2 : s ln trao i ; trao i cc phn t XCHG_LOOP: MOV AX,[SI] ; ly 1 phn t na thp ca mng XCHG AX,[DI] ; a n ln na cao ca mng MOV [SI],AX ; hon thnh trao i ADD SI,2 ; SI ch ti phn t tip theo ca mng SUB DI,2 ; DI ch ti phn t th n-1 LOOP XCHG_LOOP POP DI POP SI POP CX POP BX POP AX RET REVERSE ENDP 7.2.2 Ch a ch ch s v c s Trong cc ch a ch ny , a ch offset ca ton hng c c bng cch cng mt s gi l displacement vi ni dung ca mt thanh ghi . Displacement c th l : a ch offset ca mt bin , v d A mt hng ( m hoc dng ), v d -2 a ch offset ca mt bin cng vi mt hng s , v d A+4 C php ca mt ton hng c th l mt trong cc kiu tng ng sau : [ register + displacement] [displacement + register] [ register]+ displacement [ displacement]+ register displacement[register] Cc thanh ghi phi l BX , SI , DI ( a ch on phi l thanh ghi DS)

v BP ( thanh ghi SS cha a ch on ) Ch a ch c gi l c s ( based) nu thanh ghi BX( base register) hoc BP ( base pointer) c dng .

Chng 7 : Mng v cc ch a ch Ch a ch c gi l ch s ( indexed) nu thanh ghi SI( source index) hoc DI ( destination index) c dng . V d : Gi s rng W l mng t v BX ch 4 . Trong lnh MOV AX,W[BX} displacement l a ch offset ca bin W . Lnh ny s di chuyn phn t c i ch W+4 vo thanh ghi AX . Lnh ny cng c th vit di cc dng tng ng sau : MOV AX, [W+BX] MOV AX, [BX+W] MOV AX, W+[BX] MOV AX, [BX]+W Ly v d khc , gi s rng SI cha a ch ca mng t W . Trong lnh MOV AX,[SI+2] displacement l 2 .Lnh ny s di chuyn ni dung ca t nh W+2 ti AX . Lnh ny cng c th vit di cc dng khc : MOV AX,[2+SI] MOV AX,2+[SI] MOV AX,[SI]+2 MOV AX,2[SI] Vi ch a ch c s c th vit li code cho bi ton tnh tng 10 phn t ca mng nh sau : XOR AX,AX ; xo AX XOR BX,BX ; xo BX ( thanh ghi c s ) MOV CX,10 ; CX= s phn t =10 ADDITION: ADD AX,W[BX} ; sum=sum+element ADD BX,2 ; tr ti phn t th hai LOOP ADDITION V d : Gi s rng ALPHA c khai bo nh sau : ALPHA DW 0123h,0456h,0789h,0ADCDH trong on c a ch bi DS v gi s rng : BX =2 [0002]= 1084h

SI=4 [0004]= 2BACh DI=1 Ch ra cc lnh no sau y l hp l, a ch offset ngun v s c chuyn . a. MOV AX,[ALPHA+BX] b. MOV BX,[BX+2]

Chng 7 : Mng v cc ch a ch c. MOV CX,ALPHA[SI} d. MOV AX,-2[SI] e. MOV BX,[ALPHA+3+DI] f. MOV AX,[BX]2 g. MOV BX,[ALPHA+AX] Gii : Source offset Number moved a. ALPHA+2 0456h b. 2+2 2BACh c. ALPHA+4 0789h d. -2+4=+2 1084h e. ALPHA+3+1=ALPHA+4 0789h d. illegal form source operand ...[BX]2 g. illegal ; thanh ghi AX l khng c php V d sau y cho thy mt mng c x l nh th no bi ch a ch ch s v c s . V d : i cc k t vit thng trong chui sau thnh k t vit hoa . MSG DB co ty lo lo ti ca Gii : MOV CX,17 ; s k t cha trong CX=17 XOR SI,SI ; SI ch s cho k t TOP: CMP MSG[SI], ; blank? JE NEXT ; yes , skip AND MSG[SI],0DFH ; i thnh ch hoa NEXT: INC SI ; ch s k t tip theo LOOP TOP ; lp 7.2.3 Ton t PTR v ton t gi LABEL

Chng 7 : Mng v cc ch a ch Trong cc chng trc chng ta bit rng cc ton hng ca mt lnh phi cng loi , tc l cng l byte hoc cng l t .Nu mt ton hng l hng s th ASM s chuyn chng thnh loi tng ng vi ton hng kia . V d , ASM s thc hin lnh MOV AX,1 nh l lnh ton hng t . Tng t , ASM s thc hin lnh MOV BH,5 nh l lnh byte . Tuy nhin , lnh MOV [BX],1 l khng hp l v ASM khng bit ton hng ch bi thanh ghi BX l ton hng byte hay ton hng t . C th khc phc iu ny bng ton t PTR nh sau : MOV BYTE PTR [BX],1 ; ton hng ch l ton hng byte MOV WORD PTR [BX],1 ; ton hng ch l ton hng t V d : Thay k t t thnh T trong chui c nh ngha bi : MSG DB this is a message Cch 1: Dng ch a ch gin tip thanh ghi : LEA SI,MSG ; SI tr ti MSG MOV BYTE PTR [SI],T ; thay t bng T Cch 2 : Dng ch a ch ch s : XOR SI,SI ; xo SI MOV MSG[SI],T ; thay t bi T y khng cn dng PTR v MSG l bin byte . Ni chung ton t PTR c dng khai bo loi ( type) ca ton hng . C php chung ca n nh sau: Type PTR address_expression Trong Type : byte , word , Dword Addres_expression : l cc bin c khai bo bi DB,DW, DD . V d chng ta c 2 khai bo bin nh sau : DOLLARS DB 1AH CENTS DB 52H v chng ta mun di chuyn DOLLARS vo AL , di chuyn CENTS vo AH ch bng mt lnh MOV duy nht . C th dng lnh sau : MOV AX, WORD PTR DOLLARS ; AL=DOLLARS v AH=CENTS Ton t gi LABEL

C mt cch khc gii quyt vn xung t v loi ton hng nh trn bng cch dng ton t gi LABEL nh sau y : MONEY LABEL WORD DOLLARS DB 1AH CENTS DB 52H Cc lnh trn y khai bo bin MONEY l bin t vi 2 thnh phn l DOLLARS v CENTS . Trong DOLLRAS c cng a ch vi MONEY . Lnh MOV AX, MONEY Tng ng vi 2 lnh :

Chng 7 : Mng v cc ch a ch MOV AL, DOLLARS MOV AH, CENTS V d : Gi s rng s liu c khai bo nh sau : .DATA A DW 1234h B LABEL BYTE DW 5678h C LABEL WORD C1 DB 9Ah C2 DB 0bch Hy cho bit cc lnh no sau y l hp l v kt qa ca lnh . a. MOV AX,B b. MOV AH,B c. MOV CX,C d. MOV BX,WORD PTR B e. MOV DL,WORD PTR C f. MOV AX, WORD PTR C1 Gii : a. khng hp l b. hp l , 78h c. hp l , 0BC9Ah d. hp l , 5678h e. hp l , 9Ah f. hp l , 0BC9Ah 7.2.4 Chim on ( segment override) Trong ch a ch gin tip bng thanh ghi , cc thanh ghi con tr BX,SI hoc DI ch ra a ch offset cn thanh ghi on l DS . Cng c th ch ra mt thanh ghi an khc theo c php sau : segment_register : [ pointer_register] V d : MOV AX, ES:[SI]

nu SI=0100h th a ch ca ton hng ngun l ES:0100h Vic chim an cng c th dng vi ch a ch ch s v ch a ch c s . 7.2.5 Truy xut on stack Nh chng ta ni trn y khi BP ch ra mt a ch offset trong ch a ch gin tip bng thanh ghi , SS s cung cp s on . iu ny c ngha l c th dng dng BP truy xut stack .

Chng 7 : Mng v cc ch a ch V d : Di chuyn 3 t ti nh stack vo AX,BX,CX m khng lm thay i ni dung ca stack . MOV BP,SP ; BP ch ti nh stack MOV AX,[BP] ; copy nh stack vo AX MOV BX,[BP+2] ; copy t th hai trn stack vo BX MOV CX,[BP+4] ; copy t th ba vo CX 7.3 Sp xp s liu trn mng Vic tm kim mt phn t trn mng s d dng nu nh mng c sp xp ( sort) . sort mng A gm N phn t c th tin hnh qua N-1 bc nh sau : Bc 1: Tm s ln nht trong s cc phn t A[1]...A[N] . Gn s ln nht cho A[N] . Bc 2 : Tm s ln nht trong cc s A[1]...A[N-1]. Gn s ln nht cho A[N-1} . . . Bc N-1 : Tm s ln nht trong 2 s A[1] v A[2}. Gn s ln nht cho A[2} V d : gi s rng mng A cha 5 phn t l cc s nguyn nh sau : Position 1 2 3 4 5 initial 21 5 16 40 7 bc 1 21 5 16 7 40 bc 2 7 5 16 21 40 bc 3 7 5 16 21 40 bc 4 5 7 16 21 40 Thut ton i =N FOR N-1 times DO find the position k of the largest element among A[1]..A[i] Swap A[i] and A[k] ( uses procedure SWAP ) i=i-1 END_FOR Sau y l chng trnh sort cc phn trong m mng . Chng ta s dng th tc SELECT chn phn t trn mng . Th tc SELECT s go th tc SWAP

sp xp . Chng trnh chnh s nh sau :

Chng 7 : Mng v cc ch a ch TITLE PGM7_3: TEST SELECT .MODEL SMALL .STACK 100H .DATA A DB 5,2,,1,3,4 .CODE MAIN PROC MOV AX,@DATA MOV DS,AX LEA SI,A MOV BX,5 ; s phn t ca mng cha trong BX CALL SELECT MOV AH,4CH INT 21H MAIN ENDP INCLUDE C:\ASM\SELECT.ASM END MAIN Tp tin SELECT.ASM cha th tc SELECT vth tc SWAP c vit nh sau ti C:\ASM . SELECT PROC ; sp xp mng byte ; input: SI = a ch offset ca mng BX= s phn t ( n) ca mng ; output: SI = i ch offset ca mng sp xp . ; uses : SWAP PUSH BX PUSH CX PUSH DX PUSH SI DEC BX ; N = N-1 JE END_SORT ; Nu N=1 th thot MOV DX,SI ; ct a ch offfset ca mng vo DX ; lp N-1 ln SORT_LOOP:

MOV SI,DX ; SI tr ti mng A MOV CX,BX ; CX = N -1 s ln lp MOV DI,SI ; DI ch ti phn t th nht

Chng 7 : Mng v cc ch a ch MOV AL,[DI] ; AL cha phn t th nht ; tm phn t ln nht FIND_BIG: INC SI ; SI tr ti phn t tip theo CMP [SI],AL ; phn t tip theo > phn t th nht ING NEXT ; khng , tip tc MOV DI,SI ; DI cha a ch ca phn t ln nht MOV AL,[DI] ; AL cha phn t ln nht NEXT: LOOP FIND_BIG ; swap phn t ln nht vi phn t cui cng CALL SWAP DEC BX ; N= N-1 JNE SORT_LOOP ; lp nu N<>0 END_SORT: POP SI POP DX POP CX POP BX RET SELECT ENDP SWAP PROC ; i ch 2 phn t ca mng ; input : SI= phn t th nht ; DI = phn t th hai ; output : cc phn t trao i PUSH AX ; ct AX MOV AL,[SI] ; ly phn t A[i] XCHG AL,[DI] ; t n trn A[k] MOV [SI],AL ; t A[k] trn A[i] POP AX ; ly li AX RET SWAP ENDP Sau khi dch chng trnh , c th dng DEBUG chy th v test kt qa .

7.4 Mng 2 chiu Mng 2 chiu l mt mng ca mt mng , ngha l mt mng 1 chiu m cc phn t ca n l mt mng 1 chiu khc . C th hnh dung mng 2 chiu nh mt ma trn ch nht . V d mng B gm c 3 hng v 4 ct ( mng 3x4) nh sau :

Chng 7 : Mng v cc ch a ch ROW \ COLUMN 1 2 3 4 1 2 3 B[1,1] B[1,2] B[1,3] B[1,4] B[2,1] B[2,2] B[2,3] B[2,4] B[3,1] B[3,2] B[3,3] B[3,4] Bi v b nh l 1 chiu v vy cc phn t ca mng 2 chiu phi c lu tr trn b nh theo kiu ln lt . C 2 cch c dng : Cch 1 l lu tr theo th t dng : trn mng lu tr cc phn t ca dng 1 ri n cc phn t ca dng 2 ... Cch 2 l lu tr theo th t ct : trn mng lu tr cc phn t ca ct 1 ri n cc phn t ca ct 2... Gi s mng B cha 10,20,30,40 trn dng 1 cha 50,60,70,80 trn dng 2 ch 90,100,110,120 trn dng 3 Theo trt t hng chng c lu tr nh sau : B DW 10,20,30,40 DW 50,60,70,80 DW 90,100,110,120 Theo trt t ct chng c lu tr nh sau : B DW 10,50,90 DW 20,60,100 DW 30,70,110 DW 40,80,120 Hu ht cc ngn ng cp cao bin dch mng 2chiu theo trt t dng . Trong ASM , chng ta c th dng mt trong 2 cch : Nu cc thnh phn ca mt hng c x l ln lt th cch lu tr theo trt t hng c dng . Ngc li th dng cch lu tr theo trt t ct .

Xc nh mt phn t trn mng 2 chiu : Gi s rng mng A gm MxN phn t lu tr theo trt t dng . Go S l ln ca mt phn t : S=1 nu phn t l byte , S=2 nu phn t l t . tm phn t th A[i,j] th cn tm : hng i v tm phn t th j trn hng ny . Nh vy phi tin hnh qua 2 bc : Bc 1: Hng 1 bt u ti v tr A . V mi hng c N phn t , do Hng 2 bt u ti A+ NxS . Hng 3 bt u ti A+2xNxS . Hng th i bt u ti A+(i-1)xSxN . Bc 2: Phn t th j trn mt hng cch v tr u hng (j-1)xS byte T 2 bc trn suy ra rng trong mng 2 chiu NxM phn t m chng c lu tr theo trt t hng th phn t A[i,j] c a ch c xc nh nh sau : A+((i-1)xN + (j-1))x S (1)

Chng 7 : Mng v cc ch a ch Tng t nu lu tr theo trt t ct th phn t A[i,j] c a ch nh sau : A+(i-1)+(j--)xM)xS (2) V d : Gi s A l mng MxN phn t kiu t ( S=2) c lu tr theo kiu trt t hng . Hi : Hng i bt u ti a ch no ? Ct j bt u ti i ch no ? Hai phn t trn mt ct cch nhau bao nhiu bytes Gii : Hng i bt u ti A[i,1] theo cng thc (1) th n c a ch l : A+(i-1)xNx2 Ct j bt u ti A[1,j ] theo cng thc (1) th n c a ch : A+(j-1)x2 V c N ct nn 2 phn t trn cng mt ct cch nhau 2xN byte . 7.5 Ch a ch ch s c s Trong ch ny , a ch offset ca ton hng l tng ca : 1. ni dung ca thanh ghi c s ( BX or BP) 2. ni dung ca thanh ghi ch s ( SI or DI) 3. a ch offset ca 1 bin ( tu chn) 4. mt hng m hoc dng ( tu chn) Nu thanh ghi BX c dng th DS cha s on ca a ch ton hng .Nu BP c dng th SS ch s on . Ton hng c vit theo 4 cch di y: 1. variable[base_register][index_register] 2. [base_register + index_register + variable + constant ] 3. variable [ base_register + index_register + constant] 4. constant [ base _ register + index_register + variable] Trt tc ca cc thnh phn trong du ngoc l tu . V d , gi s W l bin t , BX=2 v SI =4 . Lnh MOV AX, W[BX][SI] s di chuyn ni dung ca mng ti a ch W+2+4 = W+6 vo thanh ghi AX Lnh ny cng c th vit theo 2 cch sau : MOV AX,[W+BX+SI] MOV AX,W[BX+SI] Ch a ch ch s c s thng c dng x l mng 2 chiu nh v d sau : Gi s rng A l mng 5x7 t c lu tr theo trt t dng . Vit on m dng ch a ch ch s : 1) xa dng 3 2) xo ct 4

Gii : 1) Dng i bt u ti A+(i-1)xNx2 . Nh vy dng 3 bt u ti A+(2-1)x7x2 = A + 28 . C th xa dng 3 nh sau : MOV BX,28 ; BX ch n u dng 3

Chng 7 : Mng v cc ch a ch XOR SI,SI ; SI s ch mc ct MOV CX,7 ; CX= s phn t ca mt hng CLEAR: MOV A[BX][SI],0 ; xo A[3,1] ADD SI,2 ; n ct tip theo LOOP CLEAR 2) Ct j bt u ti i ch A + (j-1)x2 . Vy ct 4 bt u ti i ch A+(41) x2 = A+ 6 . Hai phn t trn mt ct cch nhau Nx2 byte , y N=7 , vy 2 phn t cch nhau 14 byte . C th xa ct 4 nh sau : MOV SI,6 ; SI ch n ct 4 XOR BX,BX ; BX ch n hng MOV CX,5 ; CX= 5 : s phn t trn mt ct CLEAR: MOV A[BX][SI],0 ; Xo A[i,4] ADD BX,1 ; n dng tip theo LOOP CLEAR 7.6 ng dng tnh trung bnh Gi s mt lp gm 5 sinh vin v c 4 mn thi . Kt qa cho bi mng 2 chiu nh sau : Tn Sinh vin TEST1 TEST2 TEST3 TEST4 MARY 67 45 98 33 SCOTT 70 56 87 44 GEORGE 82 72 89 40 BETH 80 67 95 50 SAM 78 76 92 60

Chng ta s vit1 chng trnh tnh im trung bnh cho mi bi thi . lm iu ny c th tng theo ct ri chia cho 5 . Thut ton : 1. j = 4 2. repeat 3. Sum the scores in column j 4. divide sum by 5 to get average in column j 5. j = j - 1 5. Until j = 0

Chng 7 : Mng v cc ch a ch Trong bc 3 c th lm nh sau : Sum[j]= 0 i=1 FOR 5 times DO Sum[j]= Sum[j]+ Score[i, j] i=i+1 END_FOR Chng trnh c th vit nh sau : TITLE PGM7_4 : CLASS AVERAGE .MODEL SMALL .STACK 100H .DATA FIVE DB 5 SCORES DW 67,45,98,33 ; MARY DW 70,56,87,44 ;SCOTT DW 82,72,89,40 ;GEORGE DW 80,67,,95,50 ; BETH DW 78,76,92,60 ;SAM AVG DW 5 DUP (0) .CODE MAIN PROC MOV AX,@DATA MOV DS,AX ;J=4 REPEAT: MOV SI,6 ; SI ch n ct th 4 XOR BX,BX ; BX ch hng th nht XOR AX,AX ; AX cha tng theo ct ; Tng im trn ct j FOR: ADD AX , SCORES[BX+SI] ADD BX,8 ; BX ch n hng th 2

LOOP FOR ; end_for ; tnh trung bnh ct j XOR DX,DX ; xo phn cao ca s b chia (DX:AX) DIV FIVE ; AX = AX/5 MOV AVG[SI],AX ; ct kt qa trn mng AVG SUB SI,2 ; n ct tip ; un til j=0 JNL REPEAT

Chng 7 : Mng v cc ch a ch ;DOS EXIT MOV AH,4CH INT 21H MAIN ENDP END MAIN Sau khi bin dch chng tenh c th dng DEBUG chy v xem kt qa bng lnh DUMP. 7.7 Lnh XLAT Trong mt s ng dng cn phi chuyn s liu t dng ny sang dng khc . V d IBM PC dng ASCII code cho cc k t nhng IBM Mainframes dng EBCDIC ( Extended Binary Coded Decimal Interchange Code) . chuyn mt chui k t c m ho bng ASCII thnh EBCDIC , mt chng trnh phi thay m ASCII ca tng k t trong chui thnh m EBCDIC tng ng . Lnh XLAT ( khng c ton hng ) c dng i mt gi tr byte thnh mt gi tr khc cha trong mt bng . AL phi cha byte cn bin i DX cha i ch offset ca bng cn bin i Lnh XLAT s : 1) cng ni dung ca AL vi a ch trn BX to ra i ch trong bng 2) thay th gi tr ca AL vi gi tr tm thy trong bng V d , gi s rng ni dung ca AL l trong vng 0 n Fh v chng ta mun thay n bng m ASCII ca s hex tng ng n , tc l thay 6h bng 036h=6 , thay Bh bng 042h=B . Bng bin i l : TABLE DB 030h ,031h , 032h ,033h ,034h , 035h , 036h, 037h,038h,039h DB 041h , 042h ,043h , 044h, 045h , 046h V d , i 0Ch thnh C , chng ta thc hin cc lnh sau : MOV AL,0Ch ; s cn bin i

LEA BX,TABLE ; BX ch i ch offset ca bng XLAT ; AL cha C y XLAT tnh TABLE + Ch = TABLE +12 v thay th AL bi 043h . Nu AL cha mt s khng trong khang 0 n 15 th XLAT s cho mt gi tr sai . V d : M ho v gii m mt thng ip mt Chng trnh ny s : Nhc nh ngi dng nhp vo mt thng ip M ho n di dng khng nhn bit c , In chng ra dng tip theo Dch chng tr li dng ban u ri in chng dng tip theo Khi chy ct mn hnh s c dng sau :

Chng 7 : Mng v cc ch a ch ENTER A MESSAGE : DAI HOC DA LAT ; input OXC BUC OX EXK ; encode DAI HOC DA LAT ; translated Thut ton nh sau : Print prompt Read and encode message Go to anew line Print encoded message go to a new line translate and print message TITLE PGM7_5 : SECRET MESSAGE .MODEL SMALL .STACK 100H .DATA ;ALPHABET ABCDEFGHIJKLMNOPQRSTUVWXYZ CODE_KEY DB 65 DUP ( ), XQPOGHZBCADEIJUVFMNKLRSTWY DB 37 DUP ( ) ; 128 k t ca bng m ASCII CODED DB 80 dup ($) ; 80 k t c g vo DECODE_KEY DB 65 DUP ( ), JHIKLQEFMNTURSDCBVWXOPYAZG DB 37 DUP ( ) PROMPT DB ENTER A MESSAGE :,0DH,0AH,$ CRLF DB 0DH,0AH,$ .CODE MAIN PROC MOV AX,@DATA MOV DS, AX ; in du nhc MOV AH,9

LEA DX,PROMPT INT 21H ; c v m ho k t MOV AH,1 LEA BX,CODE_KEY ; BX ch ti CODE_KEY LEA DI, CODED ; DI ch ti thng ip m ho

Chng 7 : Mng v cc ch a ch 98 WHILE_: INT 21h ; c k t vo AL CMP AL,0DH ; c phi l k t CR JE ENDWHILE ; ng , n phn in thng ip m ho XLAT ; m ho k t MOV [DI],AL ; ct k t trong CODE JMP WHILE_ ; x l k t tip theo ; xung hng MOV AH,9 LEA DX,CRLF INT 21H ; in thng ip m ho LEA DX,CODED INT 21H ; xung hng LEA DX,CRLF INT 21H ; gii m thng ip v in n MOV AH,2 LEA BX,DECODE_KEY ; BX cha i ch bng gii m LEA SI,CODED ; SI ch ti thng ip m ho WHILE1: MOV AL,[SI] ; ly k t t thng ip m ho CMP AL.$ ; c phi cui thng ip JE ENDWHILE1 ; kt thc XLAT ; gii m MOV DL,AL ;t k t vo DL INT 21H ; in k t INC SI ; SI=SI+1 JMP WHILE1 ; tip tc ENDWHILE1: MOV AH,4CH INT 21H MAIN ENDP END MAIN Trong chng trnh c an s liu vi cc khai bo sau : ; ALPHABET ABCDEFGHIJKLMNOPQRSTUVWXYZ Cho bit bng cha ci ting Anh

CODE_KEY DB 65 DUP ( ), XQPOGHZBCADEIJUVFMNKLRSTWY

Chng 7 : Mng v cc ch a ch DB 37 DUP ( ) Khai bo 128 k t ca bng m ASCII , trong th t cc k t hoa l tu . CODED DB 80 dup ($) 80 k t c g vo , gi tr ban u l $ c th in bng hm 9 ngt 21h DECODE_KEY DB 65 DUP ( ), JHIKLQEFMNTURSDCBVWXOPYAZG DB 37 DUP ( ) Bng gii m c thit lp theo cch m ho , ngha l trong phn m ho chng ta m ho A thnh X v vy khi gii m X phi gii m thnh A ... Cc k t g vo khng phi l k t hoa u c chuyn thnh k t trng.

You might also like