Giao trinh hop ngu Unicode

Embed Size (px)

DESCRIPTION

Tài liệu kiến thức cơ bản về vi xử lý, cấu trúc cách hoạt động của vi xử lý.Cấu trúc cơ bản của lập trình hợp ngữ giải những bài toán đơn giản

Citation preview

Chng 1 : C BN V HP NG

Trong chng ny s gii thiu nhng nguyn tc chung to ra , dch vchy mt chng trnh hp ng trn my tnh .Cu trc ng php ca lnh hp ng trong gio trnh ny c trnh by theoMacro Assembler ( MASM) da trn CPU 8086 .1.1 C php lnh hp ngMt chng trnh hp ng bao gm mt lot cc mnh ( statement) cvit 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 thnhm my.# mt ch dn ca Assembler ( Assembler directive) : ASM khng chuyn thnhm myCc mnh ca ASM gm 4 trng :Name Operation Operand(s) Commentcc trng cch nhau t nht l mt k t trng hoc mt k t TABv d lnh sau :START: MOV CX,5 ; kh to thanh ghi CXSau 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 schuyn 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 vcc k t c bit sau : ? ,@ , _ , $ v du . Khng c php c k t trng trongphn tn . Nu trong tn c k t . th n phi l k t u tin . Tn khng cbt 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 lCOUNTER1 TWO WORDS@CHARACTER 2ABCSUM_OF_DIGITS A45.28DONE? YOU&ME.TEST ADD-REPEAT cng bi ging HP NG 2

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 (pseudooperation code = pseudo-op) . ASM khng chuyn pseudo-op thnh m my mahng dn ASM thc hin mt vic g v d to ra mt th tc , nh ngha ccbin ...

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 hngINC AX ; 1 ton hngADD WORD1,2 ; 2 ton hng cng 2 vi ni dung ca t nh WORD1Trong cc lnh 2 ton hng ton hng u l ton hng ch ( destinationoperand) . Ton hng ch thng l thanh ghi hoc v tr nh dng lu tr ktqu . Ton hng th hai l ton hng ngun . Ton hng ngun thng khng b thayi sau khi thc hin lnh .i vi mt ch dn ca ASM , trng ton hng cha mt hoc nhiu thngtin 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 . Lptrnh vin dng trng ch thch thuyt minh v cu lnh . iu ny l cn thitv ngn ng ASM l ngn ng cp thp ( low level) v vy s rt kh hiu chngtrnh nu n khng c ch thch mt cch y v r rng . Tuy nhin khng nnc ch thch i vi mi dng ca chng trnh , k c nnhng lnh m ngha can rt r rng nh :NOP ; khng lm chi cNgi ta dng du chm phy (;) bt u trng ch thch .ASM cng cho php dng ton b mt dng cho ch thch to mt khongtrng ngn cch cc phn khc nhau cu chng trnh ,v d :;; khi to cc thanh ghi;MOV AX,0MOV BX,0

1.2 Cc kiu s liu trong chng trnh hp ng cng bi ging HP NG 3CPU ch lm vic vi cc s nh phn . V vy ASM phi chuyn tt c ccloi s liu thnh s nh phn . Trong mt chng trnh hp ng cho php biu dins liu di dng nh phn , thp phn hoc thp lc phn v thm ch l c k tna .

1.2.1 Cc sMt s nh phn l mt dy cc bit 0 v 1 va 2phi kt thc bng h hoc HMt 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 Loi10111 thp phn10111b nh phn64223 thp phn-2183D thp phn1B4DH hex1B4D s hex khng hp lFFFFH s hex khng hp l0FFFFH s hex

1.2.2 Cc k tK t v mt chui cc k t phi c ng gia hai du ngoc n hochai du ngoc kp . V d A v HELLO . Cc k t u c chuyn thnh mASCII 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 mtloi d liu v n c gn mt a ch b nh sau khi dch chng trnh . Bng sauy lit k cc ton t gi dng nh ngha cc loi s liu .PSEUDO-OP STANDS FORDB define byteDW 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 4Ch dn ca ASM nh ngha bin byte c dng nh sau :NAME DB initial_valueV d :ALPHA DB 4Ch dn ny s gn tn ALPHA cho mt byte nh trong b nh m gitr 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 tCh dn ca ASM nh ngha mt bin t nh sau :NAME DW initial_valueV d :WRD DW -2Cng 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 cac byte nh hoc t nh lin tipnhau . V d nh ngha mt mng 3 byte gi l B_ARRAY m gi tr ban uca n l 10h,20h v 30h chng ta c th vit :B_ARRAY DB 10h,20h,30hB_ARRAY l tn c gn cho byte u tinB_ARRAY+1 l tn ca byte th haiB_ARRAY+2 l tn ca byte th baNu ASM gn a ch offset l 0200h cho mng B_ARRAY th ni dung bnh s nh sau :SYMBOL ADDRESS CONTENTSB_ARRAY 200h 10hB_ARRAY+1 201h 20hB_ARRAY+2 202h 30hCh dn sau y s nh ngha mt mng 4 phn t c tn l W_ARRAY:W_ARRAY DW 1000,40,29887,329Gi s mng bt u ti 0300h th b nh s nh sau:SYMBOL ADDRESS CONTENTSW_ARRAY 300h 1000dW_ARRAY+2 302h 40dW_ARRAY+4 304h 29887dW_ARRAY+6 306h 329d

Byte thp v byte cao ca mt ti khi chng ta cn truy xut ti byte thp v byte cao ca mt bin t . Gi s chng ta nh ngha :WORD1 DW 1234hByte thp ca WORD1 cha 34h , cn byte cao ca WORD1 cha 12hK 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 tV d :LETTERS DW 41h,42h,43htng ng viLETTERS 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 viMSG 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 constantv d :LF EQU 0AHsau khi c khai bo trn th LF c dng thay cho 0Ah trong chng trnh . V vy ASM s chuyn cc lnh :MOV DL,0Ahv MOV DL,LFthnh cng mt m my .Cng c th dng EQU nh ngha mt chui , v d:PROMPT EQU TYPE YOUR NAME Sau khi c khai bo ny , thay choMSG DB TYPE YOUR NAME chng ta c th vitMSG DB PROMPT

1.5 Cc lnh c bnCPU 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 la cc bin byte .

1.5.1 Lnh MOV v XCHGLnh 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 , SourceSau y l vi v d :MOV AX,WORD1 ; ly ni dung ca t nh WORD1 a vo thanh ghi AXMOV AX,BX ; AX ly ni dung ca BX , BX khng thay iMOV AH,A ; AX ly gi tr 41hBng sau cho thy cc trng hp cho php hoc cm ca lnh MOV

Destination operand

source operand General RegSegment RegMemory Location

General RegYYY

Segment RegYYY

Memory LocationYYNO

ConstantYNOY

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

Destination operand

source operandGeneral Register

Memory Locatin

General MemoryYY

Memory LocatinYNO

1.5.2 Lnh ADD, SUB, INC , DECLnh ADD v SUB c dng cng v tr ni dung ca 2 thanh ghi , camt thanh ghi v mt v tr nh , hoc cng ( tr) mt s vi (khi) mt thanh ghihoc mt v tr nh . C php l :ADD Destination , SourceSUB Destination , SourceV d :ADD WORD1, AXADD BL , 5SUB AX,DX ; AX=AX-DXV l do k thut , lnh ADD v SUB cng b mt s hn ch nh bng sau: Destination operandSource operand General Reg Memory LoacationGeneral Reg Y YMemory Localtion Y NOConstant Y Y

Vic cng hoc tr trc tip gia 2 v tr nh l khng c php . giiquyt 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, BYTE2ADD BYTE1, ALLnh INC ( incremrent) cng thm 1 vo ni dung ca mt thanh ghi hocmt v tr nh . Lnh DEC ( decrement) gim bt 1 khi mt thanh ghi hoc 1 vtr nh . C php ca chng l :INC DestinationDEC DestinationV d :INC WORD1INC AXDEC BL

1.5.3 Lnh NEG ( negative)Lnh NEG i du ( ly b 2 ) ca mt thanh ghi hoc mt v tr nh . Cphp :NEG destinationV d : NEG AX ;Gi s AX=0002h sau khi thc hin lnh NEG AX th AX=FFFEhLU : 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 ASMGi s A v B l 2 bin t .Chng ta s chuyn cc mnh sau trong ngn ng cp cao ra ngn ngASM .1.6.1 Mnh B=AMOV AX,A ; a A vo AXMOV B,AX ; a AX vo B1.6.2 Mnh A=5-AMOV AX,5 ; a 5 vo AXSUB AX,A ; AX=5-AMOV A,AX ; A=5-Acch khc :NEG A ;A=-AADD A,5 ;A=5-A1.6.3 Mnh A=B-2*AMOV AX,B ;Ax=BSUB AX,A ;AX=B-ASUB AX,A ;AX=B-2*AMOV A,AX ;A=B-2*A

1.7 Cu trc ca mt chng trnh hp ngMt chng trnh ngn ng my bao gm m ( code) , s liu ( data) v ngnxp (stack ) . Mi mt phn chim mt on b nh . Mi mt on chng trnh lc 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 dnMODEL nhm xc nh kiu b nh dng vi chng trnh . C php ca ch dnMODEL nh sau :.MODEL memory_modelBng sau cho thy cc kiu b nh :MODEL DESCRITIONSMALL code v data nm trong 1 onMEDIUM code nhiu hn 1 on , data trong 1 onCOMPACT data nhiu hn 1 an , code trong 1 onLARGE code v dayta ln hn 1 on , array khng qa 64KBHUGE code ,data ln hn 1 on , array ln hn 64KB

1.7.2 on s liuon 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 mngv d :.DATAWORD1 DW 2WORD2 DW 5MSG DB THIS IS A MESSAGE MASK EQU 10010010B

1.7.3 on ngn xpMc ch ca viec khai bo on ngn xp l dnh mt vng nh ( vngsatck) lu tr cho stack . C php ca lnh nh sau :.STACK sizenu khng khai bo size th 1KB c dnh cho vng stack ..STACK 100h ; dnh 256 bytes cho vng stack

1.7.4 an mon m ch cc lnh ca chng trnh . Bt u on m bng ch dnCODE nh sau :.CODEBn 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 procedurename ENDPSau y l c trc ca mt chng trnh hp ng m phn CODE l th tc c tn l MAIN

.MODEL SMALL.STACK 100h.DATA; nh ngha s liu ti y.CODEMAIN PROC;thn ca th tc MAINMAIN ENDP; cc th tc khc nu cEND MAIN

1.8 Cc lnh vo raCPU thng tin vi cc ngoi vi thng qua cc cng IO . Lnh IN v OUT caCPU cho php truy xut n cc cng ny . Tuy nhin hu ht cc ng dng khngdng 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) ccung cp bi cc hng ch to my tnhC 2 loai chng trnh phc v IO l : cc routine ca BIOS ( Basic InputOutput System) v cc routine ca DOS .

Lnh INT ( interrupt) gi cc chng trnh con ca BIOS v DOS c th dng lnh INT vi cphp 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 21hINT 21h c dng gi mt s ln cc cc hm ( function) ca DOS . Tutheo 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 :FUNCTION NUMBER ROUTINE1 Single key input2 Single character output

FUNTION 1 : Single key inputInput : AH=1Output:AL= ASCII code if character key is pressedAL=0 if non character key is pressed gi routine ny thc hin cc lnh sau :MOV AH,1 ; input key functionINT 21h ; ASCII code in AL and display character on the screen

FUNTION 2 : Display a character or execute a control functionInput : AH=2DL=ASCII code of the the display character or controlcharacterOutput:AL= ASCII code of the the display character or controlcharacterCc lnh sau s in ln mn hnh du ?MOV AH,2MOV DL,? ; character is ?INT 21H ; display characterHm 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 FUNCTION7 BEL beep8 BS backspace9 HT tabA LF line feedD CR carriage return

1.9 Chng trnh u tinChng 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.MODEL SMALL.STACK 100H.CODEMAIN PROC; display du nhcMOV AH,2MOV DL,?INT 21H; nhp 1 k tMOV AH,1 ; hm c k tINT 21H ; k t c a vo ALMOV BL,AL ; ct k t trong BL; nhy n dng miMOV AH,2 ; hm xut 1 k tMOV DL,0DH ; k t carriage returnINT 21H , thc hin carriage returnMOV DL,0AH ; k t line feedINT 21H ; thc hin line feed; xut k tMOV DL,BL ; a k t vo DLINT 21H ; xut k t; tr v DOSMOV AH,4CH ; hm thot v DOSINT 21H ; exit to DOSMAIN ENDPEND MAIN

1.10 To ra v chy mt chng trnh hp ngC 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 ngunDng 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 trnhChng 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] : PGM1Cross-reference [NUL.CRF] : PGM1Tn 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 dung 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 trnhTp 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 . 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 trnhT du nhc lnh c th chy chng trnh bng cch g tn n ri nhn ENTER .

1.11 Xut mt chui k tTrong 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 stringInput : DX=offset address of stringThe string must end with a $ characterK 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 , sourceNgt 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 DXProgram Segment Prefix ( PSP ) : Phn u ca on chng trnhKhi mt chng trnh c np vao 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,@DATAMOV 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.DATAMSG DB HELLO!$.CODEMAIN PROC; initialize DSMOV AX,@DATAMOV DS,AX; display messageLEA DX,MSGMOV AH,9INT 21H; return to DOSMOV AH,4CHINT 21HMAIN ENDPEND MAIN

1.12 Chng trnh i ch thng sang ch hoaChng 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.DATACR EQU 0DHLF EQU 0AHMSG1 DB ENTER A LOWER CASE LETTER:$MSG2 DB 0DH,0AH,IN UPPER CASE IT IS : cng bi ging HP NG 16CHAR DB ?,$ ; nh ngha bin CHAR c gi tr ban u cha ;xc nh.CODEMAIN PROC; INITIALIZE DSMOV AX,@DATAMOV DS,AX;PRINT PROMPT USERLEA DX,MSG1 ; ly thng ip s 1MOV AH,9INT 21H ; xut n ra mn hnh;nhp vo mt k t thng v i n thnh k t hoaMOV AH,1 ; nhp vo 1 k tINT 21H ; ct n trong ALSUB AL,20H ; i thnh ch hoa v ct n trong ALMOV CHAR, AL ; ct k t trong bin CHAR; xut k t trn dng tip theoLEA DX, MSG2 ; ly thng ip th 2MOV AH,9INT 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 exitMOV AH,4CHINT 21H ; dos exitMAIN ENDPEND MAIN

Chng 2 : Trng thi ca vi x l v cc thanh ghi cTrong 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 808611 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CFBng 2.1 :Thanh ghi c ca 8086

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 Symbol0 Carry flag CF2 Parity flag PF4 Auxiliarycarry flag AF6 Zero flag ZF7 Sign flag SF11 Overflow flag OF8 Trap flag TF9 Interrrupt flag IF10 Direction flag DFBng 2.2 : Cc c ca 8086Mi bit trn thanh ghi c phn nh 1 trng thi ca CPU .Cc c trng thi ( status flags)

Cc c trang 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=0C 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=0C 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 ccs thp phn c th biu din l -32768 n +32767 . i vi cc s khng du , di cc s c th biu din trong 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 qathu 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 trn2) ch trn du3) ch trn khng du4) trn c du v khng duV d ca trn khng du l php cng ADD AX,BXvi AX=0FFFFh , BX=0001h .Kt qa di dng nh phn l :1111 1111 1111 11110000 0000 0000 000110000 0000 0000 0000Nu 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 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 11110111 1111 1111 11111111 1111 1111 1110 = FFFE hBiu 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 duSau 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 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 la 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 duLm 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 2s 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 :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 CPUC 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 bnh 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 noTi 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 khng xc nh . Trong phn ny chng ta ch xt anh 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 FLAGSMOV/XCHG NONEADD/SUB ALLINC/DEC ALL tr CFNEG 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=FFFFhFFFFh+ FFFFh1FFFEhKt qa cha trn AX l FFFEh = 1111 1111 1111 1110SF=1 v MSB=1PF=0 v c 7 ( l) s 1 trong byte thp ca kt qaZF=0 v kt qa khc 0CF=1 v c nh 1 t MSBOF=0 v du ca kt qa ging nh du ca 2 s hng ban u .V d 2 : ADD AL,BL trong AL= BL= 80h80h+ 80h= 100hKt qa trn AL = 00hSF=0 v MSB=0PF=1 v tt c cc bit u bng 0ZF=1 v kt qa bng 0CF=1 v c nh 1 t MSBOF=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= 0001h8000h - 0001h= 7FFFFh = 0111 1111 1111 1111SF=0 v MSB=0PF=1 v c 8 ( chn ) s 1 trong byte thp ca kt qaZF=0 v kt qa khc 0CF=0 v khng c mnOF=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=FFhKt qa trn AL=00h = 0000 0000SF=0 v MSB=0PF=1ZF=1 v kt qa bng 0CF khng b nh hng bi lnh INC mc d c nh 1 t MSBOF=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,-5Kt qu trn BX = -5 = FFFBhKhng c c no nh hng bi lnh MOVV d 6: NEG AX trong AX=8000h8000h =1000 0000 0000 0000b 1 =0111 1111 1111 1111+11000 0000 0000 0000 = 8000hKt qa trn AX=8000hSF=1 v MSB=1PF=1 v c s chn con s 1 trong byte thp ca kt qaZF=0 v kt qa khc 0CF=1 v lnh NEG lm cho CF=1 tr khi kt qa bng 0OF=1 v du ca kt qa ging vi du ca ton hng ngun .

2.4 Chng trnh DEBUG.EXEDebug 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.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.CODEMOV AX,4000H ; AX=4000HADD AX,AX ; AX=8000HSUB AX,0FFFFH ;AX=8001HNEG AX ; AX=7FFFHINC AX ; AX=8000HMOV AH,4CH ; HM THOT V DOSINT 21H ; EXIT TO DOSENDMAIN ENDPEND MAINSau khi dch chng trnh , gi s file chy l CHECKFL.EXE trn ng dnC:\ASM . chy debug chng ta g lnh sau :C:\> DEBUG C:\ASM\CHECK-FL.EXEt 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 :-RAX=0000 BX=0000 CX=001F DX=0000 SP=000ABP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5SS=0EE5 CS=0EE6 IP=0000NV UP DI PL NZ NA PO NC0EE6:0000 B80040 MOV AX,4000Chng ta thy ten 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 .FlagsSet (1) Symbol Clear (0) SymbolCF 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 interrupts) interrupts)Bng 2.3 : Biu th trng trng cc c ca DEBUGDng 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 cachng trnh bt u t lnh MOV AX,4000h-TAX=4000 BX=0000 CX=001F DX=0000 SP=000ABP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5SS=0EE5 CS=0EE6 IP=0003NV UP DI PL NZ NA PO NC0EE6:0003 03C0 ADD AX,AXSau khi thc hin lnh MOV AX,4000 cc c khng b thay i , ch c AX=4000h . By gi chng ta thc hin lnhADD AX,AX-TAX=8000 BX=0000 CX=001F DX=0000 SP=000ABP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5SS=0EE5 CS=0EE6 IP=0005OV UP DI NG NZ NA PE NC0EE6:0005 2DFFFF SUB AX,FFFFKt 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-TAX=8001 BX=0000 CX=001F DX=0000 SP=000ABP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5SS=0EE5 CS=0EE6 IP=0008NV UP DI NG NZ AC PO CY0EE6:0008 F7D8 NEG AXAX=8000H-FFFFH=8001HC OF=0(NV) nhng CF=1(CY) v c mn t MSBC PF=0(PO) v byte thp ch c 1 con s 1.Lnh tip theo s l lnh NEG AX-TAX=7FFF BX=0000 CX=001F DX=0000 SP=000ABP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5SS=0EE5 CS=0EE6 IP=000ANV UP DI PL NZ AC PE CY0EE6:000A 40 INC AXAX 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 8000hCui cng chng ta thc hin lnh INC AX-TAX=8000 BX=0000 CX=001F DX=0000 SP=000ABP=0000 SI=0000 DI=0000 DS=0ED5 ES=0ED5SS=0EE5 CS=0EE6 IP=000BOV UP DI NG NZ AC PE CY0EE6:000B B44C MOV AH,4CHOF=1(OV) v cng 2 s dng m kt qu l 1 s mCF=1(CY) v lnh INC khng nh hng ti c ny . thc hin ton b chng trnh chng ta g G(Go)-GProgram terminated normally thot kho debug g Q(Quit)-QC:\>Bng sau y cho bit mt s lnh debug thng dng , cc tham s trong ngoc l tu chnCOMMAND ACTIOND(start (end)(range))D 100D CS:100 120D( DUMP)Lit k ni dung cc byte di dng HEXLit k 80h bytes bt u t DS:100hLit k cc bytes t DS:100h n DS:120Lit k 80h bytes t byte cui cng c hin thG(=start ) (addr1addr2...addrn)GG=100G=100 150Chy ( go) lnh t v tr Start vi cc im dng ti addr1,addr2,addrnThc thi lnh t CS:IP n htThc thi lnh t CS:100h n htThc thi lnh ti CS:100h dng tiCS:150hQ Quit debug and return to DOSR(register)RR AXXem/ thay i ni dung ca thanh ghiXem ni dung tt c cc thnah ghi v cXem v thay i ni dung ca thanh ghiAXT(=start)(value)TT=100T=100 5T 4Qut value lnh t v tr startTrace lnh ti CS:IPTrace lnh ti CS:100hTrace 5 lnh bt u t CS:100hTrace 4 lnh bt u t CS:IPU(start)(value)U CS:100 110U 200 L 20UUnassemble vng a ch thanh lnh asmUnassemble t CS:100h n CS:110hUnassemble 20 lnh t CS:200hUnassemble 32 bytes t bytes cui cngc hin thA(start) a vo m hp ng cho 1 a ch hoc 1AA CS:100hvng i cha vo m hp ng ti CS:IPa vo m hp ng ti CS:100hChng 3 : Cc lnh lp v r nhnh 28Chng 3 : CC LNH IU KHINMt chng trnh thng thng s thc hin ln lt cc lnh theo th th m chng c viet 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.CODEMAIN PROCMOV AH,2 ; hm xut k tMOV CX,256 ; s k t cn xutMOV DL,0 ; DL gi m ASCII ca k t NUL; PRINT_LOOP :INT 21H ;display characterINC DLDEC CXJNZ PRINT_LOOP ;nhy n print_loop nu CX# 0;DOS EXITMOV AH,4CHINT 21HMAIN ENDPEND MAINTrong 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 kinLnh JNZ l mt lnh nhy c iu kin .C php ca mt lnh nhy c iu kin l :Jxxx destination-labelNu 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 thayi , 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 duSYMBOL DESCRITION CONDITION FOR JUMPSJG/JNLE jump if greater than ZF=0 and SF=OFjump if not less than or equal toJGE/JNL jump if greater than or equal to SF=OFjupm if not less or equal toJL/JNGE jump if lees thanjump if not greater or equal SFOFChng 3 : Cc lnh lp v r nhnh 30JLE/JNG jump if less than or equal ZF=1 or SFOFjump if not greaterNhy c iu kin khng duSYMBOL DESCRITION CONDITION FOR JUMPSJA/JNBE jump if above CF=0 and ZF=0jump if not below or equalJAE/JNB jump if above or equal CF=0jump if not belowJB/JNA jump if below Cf=1jump if not above or equalJBE/JNA jump if below or equal CF=1 or ZF=1jump if not aboveNhy 1 cSYMBOL DESCRITION CONDITION FOR JUMPSJE/JZ jump if equal ZF=1jump if equal to zeroJNE/JNZ jump if not equal ZF=0jump if not zeroJC jump if carry CF=1JNC jump if no carry CF=0JO jump if overflow OF=1JNO jump if not overflow OF=0JS jump if sign negative SF=1SYMBOL DESCRITION CONDITION FOR JUMPSChng 3 : Cc lnh lp v r nhnh 31JNS jump if nonnegative sign SF=0JP/JPE jump if parity even PF=1JNP/JPO jump if parity odd PF=0Lnh CMP ( Compare)Cc lnh nhy thng ly kt qa ca lnh Compare nh l iu kin . C php ca lnh CMP l :CMP destination, sourceLnh 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=0001hJG BELOWKt qa ca lnh CMP AX,BX l 7FFEh . Lnh JG c tha mn vZF=0=SF=OF do iu khin c chuyn n nhn BELOW.Din dch lnh nhy c iu kinV 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 lnhCMP AX,BXJG BELOWc ngha l nu AX>BX th nhy n nhn BELOWMc d lnh CMP c thit k cho cc lnh nhy . Nhng lnh nhy c th ng trc 1 lnh khc , chng hn :DEC AXJL THEREc ngha l nu AX trong din dch c du < 0 th iu khin c chuyn cho THERE .Nhy c du so vi nhy khng duChng 3 : Cc lnh lp v r nhnh 32Mt 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 chung ta din dch c du .Nu AX=7FFFh v BX=8000h , cc lnh :CMP AX,BXJA belows 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 e minh ha vic s dng cc lnh nhyV 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 CXCMP BX,CX ;BX ln hn CX?JLE NEXT ; khng th tip tcMOV CX,BX ; yes , t BX vo CXNEXT:3.3 Lnh JMPLnh JMP ( jump) l lnh nhy khng iu kin . C php ca JMP l JMP destinationTrong 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 lpDEC CXJNZ TOP ; nu CX>0 tip tc lpMOV AX,BXgi s thn vng lp cha nhiu lnh m n vt khi 126 bytes trc lnhJNZ TOP . C th gii quyt tnh trng ny bng cc lnh sau :TOP:Chng 3 : Cc lnh lp v r nhnh 33; thn vng lpDEC CXJNZ BOTTOM ; nu CX>0 tip tc lapJMP EXITBOTTOM:JMP TOPEXIT:MOV AX,BX

3.4 Cu trc ca ngn ng cp caoChng ta s dng cc lnh nhy thc hin cc cu trc tng t nh trong ngn ng cp cao3.4.1 Cu trc r nhnhTrong 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 trca) IF-THENCu trc IF-THEN c th din t nh sau :IF condition is trueTHENexecute true branch statementsEND IFV d : Thay th gi tr trn AX bng gi tr tuyt i ca nThut ton nh sau :IF AX