Lap Trinh Hop Ngu

Embed Size (px)

Citation preview

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 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 SFOF

Chng 3 : Cc lnh lp v r nhnh JLE/JNG jump if less than or equal ZF=1 or SFOF 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