Trong chng trc chng ta tm hiu v cu trc v tp lnh ca b vi x l 8088. Trong chng ny chng ta s tm hiu cch lp trnh Assembly cho cc h vi x l c xy dng trn b vi x l 8088 (v h vi x l Intel 80x86 ni chung). S d ta dng ngn ng lp trnh Assembly vit phn mm cho h vi x l l v n c cc u im sau: - S dng trc tip tp lnh ca b vi x l nn qu trnh iu hnh chc nng rt st vi cu trc phn cng ca h thng, tn dng trit kh nng ca phn cng m khng mt ngn ng lp trnh bc cao no lm c. - C tc thc hin nhanh hn nhiu so vi cc ngn ng bc cao. Do vy n rt thch hp vi cc chc nng yu cu thi gian thc chng hn nh thao tc vi cc tn hiu bin i nhanh. Cc chng trnh vit bng ngn ng Assembly phi c dch ra ngn ng my (dng nh phn) v y l dng duy nht m h vi x l c th hiu c. C nhiu chng trnh bin dch nhng thng dng nht hin nay Macro Assembler ca hng Microsoft v Turbo Assembler ca hng Borland. Chng ta s s dng Macro Assembler 6.0 bin dch cc chng trnh Assembly. Chng trnh bin dch MASM 6.0 c rt nhiu file nhng ti thiu cn nhng file sau: - MASM.EXE bin dch chng trnh sang ngn ng my - LINK.EXE lin kt cc chng trnh v to ra mt chng trnh chy c c ui exe. - EXE2BIN chuyn chng trnh ui exe sang ui com.
I - KHUNG CHNG TRNH ASSEMBLY 1. B k t ca Assembly Mt ngn ng bt k t ngn ng giao tip ca con ngi ti ngn ng my tnh u xy dng trn mt b k t. Cc k t ghp li thnh cc t c ngha gi l t vng. Cc t li c vit thnh cc cu tun theo c php v ng php ca ngn ng din t hnh ng s vic cn thc hin. B k t ca Assembly gm c: - Cc ch ci latin: 26 ch hoa A-Z, 26 ch thng a-z. - Cc ch s thp phn: 0 - 9 - Cc k hiu php ton, cc du chm cu v cc k hiu c bit: + - * / @ ? $ , . : [ ] ( ) < > { } & % ! \ # v.v... - Cc k t ngn cch: space v tab 2. T kha T kha l cc t ca ring Assembly nh tn cc thanh ghi, tn lnh dng gi nh ca b vi x l, tn ton t... Cc t kha ny i hi ngi lp trnh phi dng ng nh Assembly quy nh. Cc t kha c th vit bng ch hoa hoc ch thng u c. 3. Tn t t Tn l mt dy k t dng biu th tn hng, tn bin, tn nhn, tn chng trnh con, tn on nh... Tn do ngi lp trnh t t nhng phi tun theo quy tc sau: Quy tc t tn: Tn ch gm ch ci, ch s v mt s k t c bit nh ? @ _ $ Ch u ca tn bt buc phi l ch ci. Trong tn khng c du cch. Tn c th di t 1 n 35 k t. 4. Cu trc mt lnh Assembly Mt chng trnh Assembly bao gm cc dng lnh, mt dng lnh c th l mt lnh tht di dng gi nh ca b vi x l hoc mt hng dn cho chng trnh dch (assembler directive, i khi gi l lnh gi). Lnh tht s c dch ra m my cn lnh gi th khng Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 21 - c dch, v n ch c tc dng ch dn cho chng trnh dch thc hin cng vic. Ta c th vit cc dng lnh bng ch hoa hoc ch thng u c v chng c coi l tng ng nhau. Mt dng lnh ca Assembly c th c nhng trng sau (khng nht thit phi c cc trng): Tn M lnh Cc ton hng Ch gii
V d: LAP: MOV AH,[BX] ; Copy ni dung ca nh c a ch DS:BX vo AH Dng lnh trn c 4 trng. Trng tn l nhn LAP, trng m lnh l lnh MOV, trng ton hng l cc thanh ghi AH v BX, trng ch gii t sau du chm phy MAIN PROC v MAIN ENDP Hai dng lnh ny l hai lnh gi, trng tn c tn th tc l MAIN, trng m lnh c lnh gi PROC v ENDP. y l hai lnh gi bt u v kt thc mt th tc c tn l MAIN. Trng tn Trng tn c th l tn nhn, tn bin hoc tn th tc (chng trnh con). Cc tn v nhn ny s c trnh bin dch gn bng cc a ch c th ca nh. Mt nhn kt thc bng du hai chm (:). Trng m lnh Cha cc lnh tht hoc lnh gi Trng ton hng i vi cc lnh tht th trng ny cha cc ton hng ca lnh. Ty tng loi lnh m c th khng c, c 1 hoc 2 ton hng trong mt lnh. i vi cc lnh gi th trng ny cha cc thng tin khc lin quan n lnh gi. Trng ch gii Li gii thch phi c bt u bng du chm phy. Trng ch gii dnh cho ngi lp trnh ghi cc li gii thch cho cc lnh ca chng trnh, gip cho ngi c chng trnh d hiu cc thao tc ca chng trnh ln. Khi c thy du chm phy, chng trnh dch b qua khng dch t sau du chm phy n ht dng. Ngi lp trnh c th li dng c im ny loi b mt dng lnh no trong chng trnh. 5. Cc dng hng dng trong Assembly - Hng s nh phn: gm mt dy cc ch s 0 v 1, kt thc bng ch B. V d: 10011101B - Hng s hex: gm mt dy cc s t 0 n 9 v cc ch ci t A n F (a n f), kt thc bng ch H. i vi cc s bt u bng ch th phi thm 0 ng trc bo cho chng trnh dch bit l s khng phi l tn. V d: 7AC5H, 0ABH - Hng s thp phn: gm mt dy cc s t 0 n 9, c hoc khng c ch D theo sau. V d: 34 hoc 34D. - Hng k t: l mt k t bt k t gia hai du phy trn. V d: A - Hng xu k t: l mt dy k t bt k t gia hai du phy trn. V d: Nhap 6. Khai bo bin v hng a) Khai bo bin Bin l tn nh dng ct gi d liu. Khai bo bin l t tn cho nh v xc nh nh c kch thc 1 byte, 1 t hay 1 t kp. Cc tn bin s c trnh bin dch gn cho mt a ch nht nh trong b nh khi dch chng trnh. Khai bo bin kiu byte Tn bin DB Gi tr khi u Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 22 - V d: B1 DB 4
V d trn nh ngha bin kiu byte c tn l B1 v dnh 1 byte b nh cho n, trong byte c cha gi tr 4. Nu khng mun bin cha gi tr khi u ta c th dng ton t ? vo v tr gi tr khi u. V d: B2 DB ?
V d trn ch nh ngha bin byte c tn l B2 v dnh 1 byte b nh cho n. Khai bo bin kiu t Tn bin DW Gi tr khi u V d: W1 DW 42H V d ny nh ngha bin t c tn l W1 v dnh 2 byte b nh cho n, trong cha gi tr khi u l 42H. Mun bin khng cha gi tr khi u ta dng ton t ? v v tr gi tr khi u. V d: W2 DW ? Khai bo bin kiu t kp Tn bin DD Gi tr khi u V d: DW1 DD 1000 Khai bo bin mng Bin mng l bin hnh thnh t mt dy lin tip cc phn t ( nh) c cng kiu byte t hoc t kp. Khai bo bin mng l t tn cho mt dy lin tip cc byte t hoc t kp trong b nh ng thi cung cp cc gi tr ban u tng ng. S phn t ca mng c xc nh qua s gi tr khi u. Tn bin mng DB/DW/DD Cc gi tr khi u
V d: M1 DB 4,5,6,7,8,9
V d trn nh ngha bin mng c tn l M1 v dnh 6 byte lin tip cho n cha cc gi tr khi u tng ng l 4, 5 ,6 ,7 ,8 , 9. Phn t u ca mng l 4 v c a ch trng vi a ch ca tn bin (M1), phn t th hai l 5 v c a ch l M1+1... Khi chng ta mun khi u cc phn t ca mng vi cng mt gi tr chng ta c th dng thm ton t DUP. Ton t DUP dng lp li cc d liu vi s ln quy nh. C php: Count DUP(Cc d liu) -> lp li cc d liu vi s ln Count. V d: M2 DB 20 DUP(0) M3 DB 20 DUP(?)
V d trn nh ngha mt bin mng c tn l M2 gm 20 byte cha 20 gi tr khi u bng 0 v mt bin mng khc c tn l M3 gm 20 byte nhng khng cha gi tr khi u.
Ch : + Ton t DUP c th dng lng nhau nh ngha 1 mng V d: M4 DB 4,3,2,2 DUP(1,2 DUP(5),6)
Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 23 - Khai bo ny tng ng vi khai bo sau: M4 DB 4,3,2,1,5,5,6,1,5,5,6 + i vi cc b vi x l ca Intel, khi ta lu tr mt t trong b nh th byte thp ca n s c nh c a ch thp, byte cao nh c a ch cao. V d: W1 DW 0FFACH
khi byte thp ACH s c ti a ch W1, cn byte cao FFH s c ti a ch tip theo W1+1. Khai bo bin kiu xu k t Bin kiu xu k t l trng hp c bit ca bin mng kiu byte, trong cc phn t ca mng l cc k t. Mt xu k t c th nh ngha bng cc k t hoc bng m ASCII ca cc k t . V d: Xaukt DB ABCDE hoc Xaukt DB 41h,42h,43h,44h,45h hoc Xaukt DB 41h,42h,C,D,45h b) Khai bo hng Cc hng trong chng trnh Assembly c gn tn lm cho chng trnh d c hn. Hng c th l kiu s hoc kiu k t. Vic gn tn cho hng c thc hin bng lnh gi EQU nh sau: Tn hng EQU Gi tr ca hng V d: CR EQU 0Dh LF EQU 0Ah CHAO EQU Hello
V lnh gi EQU khng dnh ch ca b nh cho tn hng nn ta c th khai bo hng bt k u trong chng trnh. Tuy nhin ngi ta thng t cc khai bo hng trong on d liu. 7. Khung ca mt chng trnh Assembly Mt chng trnh m my trong b nh thng bao gm cc vng nh khc nhau cha m lnh, cha d liu ca chng trnh v mt vng nh c dng lm ngn xp phc v hot ng ca chng trnh. Chng trnh vit bng ngn ng Assembly cng phi c cu trc tng t khi dch n s to ra m my c cu trc nh trn, tc l on m lnh s c dch v trong vng nh m lnh, on d liu s c dch v trong vng nh d liu v on ngn xp s c dch v to ra vng nh ngn xp cho chng trnh. Trc khi tm hiu khung ca mt chng trnh Assembly ta xem xt cc khai bo c trong chng trnh: a) Khai bo quy m s dng b nh Kch thc b nh dnh cho on m v on d liu trong mt chng trnh c xc nh bng lnh gi .MODEL. Lnh ny phi c t trc cc lnh khc trong chng trnh nhng t sau lnh gi khai bo loi CPU. C php: .MODEL Kiu_kch_thc_b_nh Kiu kch thc b nh M t TINY M lnh v d liu gi gn trong mt on 64 KB SMALL M lnh gi gn trong mt on 64 KB. D liu gi gn trong W1 W1+1 FFH ACH Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 24 - mt on 64 KB MEDIUM M lnh khng gi gn trong mt on 64 KB D liu gi gn trong mt on 64 KB COMPACT M lnh gi gn trong mt on 64 KB D liu khng gi gn trong mt on 64 KB LARGE M lnh khng gi gn trong mt on 64 KB D liu khng gi gn trong mt on 64 KB Khng c mng no ln hn 64 KB HUGE M lnh khng gi gn trong mt on 64 KB D liu khng gi gn trong mt on 64 KB Cc mng c th ln hn 64 KB b) Khai bo on ngn xp Vic khai bo on ngn xp l dnh ra mt vng nh ln dng lm ngn xp phc v cho hot ng ca chng trnh. C php: .STACK Kch_thc
Kch_thc quyt nh s byte dnh cho ngn xp. Thng thng vi 100 - 256 byte l lm ngn xp v ta c th khai bo kch thc cho ngn xp nh sau: .STACK 100 hoc .STACK 100H c) Khai bo on d liu on d liu cha ton b cc khai bo bin v hng ca chng trnh. Cc khai bo trong on d liu t sau lnh gi .DATA V d: .DATA MSG DB Hello!$ B1 DB 100 CR EQU 0DH LF EQU 0AH d) Khai bo on m on m cha m lnh ca chng trnh, tc l cc lnh ca chng trnh s vit y. bt u on m ta dng lnh gi .CODE Bn trong on m, cc lnh ca chng trnh c th t chc thnh chng trnh chnh v chng trnh con nh sau: .CODE Tn_CTChnh PROC
;Cc lnh ca chng trnh chnh . . CALL Tn_CTCon ;Gi chng trnh con . . Tn_CTChnh ENDP ;Khai bo cc chng trnh con y Tn_CTCon PROC
;Cc lnh ca chng trnh con Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 25 -
RET ;Tr v Tn_CTCon ENDP e) Khung chng trnh Assembly dch ra chng trnh .EXE .MODEL SMALL .STACK 100H .DATA ;Cc khai bo bin v hng ti y .CODE MAIN PROC ;Khi u cho on DS MOV AX,@DATA MOV DS,AX ;Cc lnh ca chng trnh ti y ...... ;Tr v DOS dng hm 4CH ca INT 21H MOV AH,4CH INT 21H MAIN ENDP ;Cc chng trnh con (nu c) khai bo ti y
END MAIN ;Kt thc ton b chng trnh
Dng cui cng ca chng trnh ta dng lnh gi END v tip theo l MAIN kt thc ton b chng trnh. Ta c nhn xt rng MAIN l tn ca chng trnh chnh nhng v thc cht n l ni bt u cc lnh ca chng trnh trong on m lnh. Khi mt chng trnh EXE c np vo b nh, DOS s to ra mt mng gm 256 byte lm on mo u chng trnh (Program Segment Prefix, PSP) dng cha cc thng tin lin quan n chng trnh v t n vo ngay pha trc phn b nh cha m lnh ca chng trnh. Trong khi a cc thng s lin quan n chng trnh vo PSP, DOS s dng n cc thanh ghi DS v ES. Do vy DS v ES khng cha gi tr a ch ca on d liu ca chng trnh. chng trnh c th chy ng ta phi c cc lnh khi to cho thanh ghi on DS (hoc c ES nu cn) cha a ch on d liu ca chng trnh. MOV AX,@DATA MOV DS,AX ;MOV ES,AX ;Nu cn trong @DATA l a ch ca on d liu.
V d: Chng trnh hin ln mn hnh dng ch CHAO CAC BAN
.MODEL SMALL .STACK 100H .DATA CRLF DB 13,10,$ CHAO DB CHAO CAC BAN!$ .CODE MAIN PROC ;Khoi tao thanh ghi DS MOV AX,@DATA MOV DS,AX ;Xuong dong moi Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 26 - MOV AH,9 LEA DX,CRLF INT 21H ;Hien thi loi chao MOV AH,9 LEA DX,CHAO INT 21H ;Xuong dong moi MOV AH,9 LEA DX,CRLF INT 21H ;Tro ve DOS MOV AH,4CH INT 21H MAIN ENDP END MAIN f) Khung chng trnh Assembly dch ra chng trnh .COM Chng trnh ui .COM ngn gn v n gin hn nhiu so vi chng trnh ui .EXE. Trong chng trnh ui .COM, on m, on d liu v on ngn xp c gp li trong mt on duy nht l on m. Vic to ra tp ny khng nhng tit kim c thi gian v b nh khi chy chng trnh m cn tit kim c c khng gian nh khi lu tr chng trnh trn a. Khung ca chng trnh Assembly dch ra ui .COM nh sau:
.MODEL TINY .CODE ORG 100H START: JMP CONTINUE ;Cc khai bo bin v hng ti y
CONTINUE: MAIN PROC ;Cc lnh ca chng trnh chnh ti y
;Tr v DOS INT 20H MAIN ENDP ;Cc chng trnh con (nu c) khai bo y
END START
Ta nhn thy ngay u on m l lnh gi ORG 100H dng gn a ch bt u ca chng trnh ti 100h trong on m, cha li vng nh 256 byte (t a ch 0 n 255) cho on mo u chng trnh (PSP). Lnh JMP sau nhn START dng nhy qua ton b phn b nh dnh cho vic khai bo d liu. ch ca lnh nhy ny l u chng trnh chnh. Khi kt thc chng trnh COM, tr v DOS ta dng ngt INT 20H ca DOS lm cho chng trnh gn hn. kt thc ton b chng trnh ta dng lnh gi END theo sau l nhn START, v START tng ng vi a ch lnh u tin ca chng trnh trong on m. V d: Chng trnh hin ln mn hnh dng ch CHAO CAC BAN Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 27 -
.MODEL TINY .CODE ORG 100H START: JMP CONTINUE CRLF DB 13,10,$ CHAO DB CHAO CAC BAN!$ CONTINUE: MAIN PROC ;Xuong dong moi MOV AH,9 LEA DX,CRLF INT 21H ;Hien thi loi chao MOV AH,9 LEA DX,CHAO INT 21H ;Xuong dong moi MOV AH,9 LEA DX,CRLF INT 21H ;Tro ve DOS INT 20H MAIN ENDP END START II BIN SON V DCH CHNG TRNH ASSEMBLY vit v dch cc chng trnh Assembly ta theo cc bc sau: Bc 1: Son tho chng trnh Dng cc phn mm son tho vn bn dng TEXT (nh NC, PASCAL, C) to ra tp vn bn chng trnh Assembly. Sau ghi tp chng trnh Assembly ra a vi ui .ASM Bc 2: Dch chng trnh sang ngn ng my Dng chng trnh dch MASM dch tp chng trnh ui .ASM sang m my di dng tp ui .OBJ. Nu trong bc ny chng trnh c li v c php th chng trnh dch s bo li v ta phi quay li Bc 1 sa. Cch lm nh sau: gi s chng trnh MASM nm trn th mc gc C, du nhc ca DOS l C:\>, khi t du nhc ca DOS g MASM Tn tp chng trnh; Du chm phy sau tn tp chng trnh bo cho MASM ch to tp .OBJ, khng to ra cc tp khc. Tn tp chng trnh c th g c ui .ASM hoc khng g cng c. Bc 3: Lin kt cc tp ui .OBJ to thnh mt tp chng trnh chy c ui .EXE Cch lm nh sau: gi s chng trnh lin kt LINK nm trn th mc gc C, du nhc ca DOS l C:\>, khi t du nhc ca DOS ta g lnh LINK Tntp1 + Tntp2 + ; Chng trnh lin kt s ly tn tp u tin (Tntp1) t tn cho tp ui .EXE cui cng. Du chm phy sau cng bo cho chng trnh LINK khng hi tn cc tp. Bc 4: Nu chng trnh vit dch ra ui .COM th ta phi dng chng trnh EXE2BIN ca DOS dch tip tp .EXE ra tp chng trnh chy c ui .COM Cch lm nh sau: gi s chng trnh EXE2BIN nm trn th mc gc C, du nhc ca DOS l C:\>, khi t du nhc ca DOS ta g lnh EXE2BIN Tntp.EXE Tntp.COM Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 28 -
Ch : Vi trnh bin dch MASM phin bn 6.x tr ln, nu ch bin dch v lin kt mt tp chng trnh th ta c th gp Bc 2, 3, 4 thnh mt bc bng cch dng chng trnh kt hp c bin dch v lin kt ML. Ti du nhc ca DOS g vo nh sau: ML Tntp1.ASM
III - THC HIN CC CU TRC IU KHIN CHNG TRNH BNG ASSEMBLY Thng thng khi lp trnh chng ta cn n cc cu trc iu khin chng trnh sau: + Cu trc r nhnh IF-THEN + Cu trc la chn CASE + Cu trc lp vi s ln xc nh FOR-DO + Cu trc lp vi s ln khng xc nh REPEAT-UNTIL v WHILE-DO thc hin cc cu trc iu khin chng trnh ny chng ta s dng cc lnh nhy v lnh lp ca b vi x l. C th nh sau: 1. Cu trc r nhnh IF-THEN C hai dng (1) IF <iu kin> THEN <Cng vic> (2) IF <iu kin> THEN <Cng vic 1> ELSE <Cng vic 2> Hot ng ca cu trc ny c th din t bng lu sau
V d: 1. Vit on chng trnh gn BX |AX|
Gii Dng cu trc IF kim tra nu AX < 0 th i du. Sau cu trc IF dng lnh MOV a AX vo BX. IF_: CMP AX,0 JAE ENDIF_ NEG AX ENDIF_: MOV BX,AX
2. Gi s AL v BL cha m ASCII ca k t. Kim tra nu AL<=BL th hin ra mn hnh k t trong AL, cn khng th hin k t trong BL. Gii iu kin Cng vic iu kin Cng vic 1 Cng vic 2 Cu trc IF-THEN Cu trc IF-THEN-ELSE ng Sai ng Sai Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 29 - Thut gii IF AL<=BL THEN Hin k t trong AL ELSE Hin k t trong BL ENDIF
on chng trnh nh sau: IF_: CMP AL,BL JA ELSE_ MOV AH,2 MOV DL, AL INT 21H JMP ENDIF_ ELSE_: MOV AH,2 MOV DL, BL INT 21H ENDIF_:
2. Cu trc la chn CASE Khc vi cu trc r nhnh IF-THEN ch r c hai nhnh, cu trc la chn c th r nhiu nhnh. Dng tng qut nh sau:
CASE <Biu thc> OF Gi_tr_1: Cng_vic_1 Gi_tr_2: Cng_vic_2
Gi_tr_N: Cng_vic_N END_CASE Hot ng ca cu trc ny th hin bng lu sau:
V d: Nu AX cha s m th a -1 vo BX, nu AX cha 0 th a 0 vo BX, nu AX cha s dng th a 1 vo BX. Gii on chng trnh nh sau: CASE_: CMP AX,0 JL AM JE KHONG JG DUONG AM: Biu thc Cng vic 1 Cng vic 2 Cng vic N .. Gi_tr_1 Gi_tr_2 Gi_tr_N Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 30 - MOV BX,-1 JMP ENDCASE_ KHONG: MOV BX,0 JMP ENDCASE_ DUONG: MOV BX,1 ENDCASE_: 3. Cu trc lp vi s ln xc nh FOR-DO Dng tng qut FOR <S ln lp> DO <Cng vic> ENDFOR Hot ng ca cu trc ny th hin bng lu sau:
V d: Hin th mt dng 80 k t $ on chng trnh nh sau: FOR_: MOV CX,80 MOV AH,2 MOV DL,$ INT 21H LOOP FOR_ ENDFOR_: 4. Cu trc lp vi s ln khng xc nh a) Kim tra iu kin trc Dng tng qut WHILE <iu kin> DO <Cng vic> Hot ng ca cu trc ny c th hin qua lu sau:
V d: m s k t c c t bn phm,khi gp k t CR th thi. on chng trnh nh sau:
MOV CX,-1 ;Cha s k t m c MOV AL,$ ; AL khc k t CR WHILE_: CMP AL,0DH ;C khc k t CR khng? JE ENDWHILE_ ;Khng khc, tc bng CR th thot INC CX MOV AH,1 INT 21H JMP WHILE_ ENDWHILE_: b) Kim tra iu kin sau Dng tng qut REPEAT <Cng vic> UNTIL <iu kin> Hot ng ca cu trc ny c th hin qua lu trn:
V d: m s k t c c t bn phm, khi gp k t CR th thi. a s ln lp vo b m Cng vic Gim b m i 1 B m = 0? ng Sai iu kin Cng vic Cu trc WHILE-DO ng Sai iu kin Cng vic Cu trc REPEAT-UNTIL ng Sai Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 31 - on chng trnh nh sau:
MOV CX,0 ;Cha s k t m c REPEAT_: MOV AH,1 INT 21H CMP AL,0DH ;C bng k t CR khng? JE UNTIL_ ;Bng CR INC CX JMP REPEAT_ UNTIL_:
IV - MT S CHNG TRNH C TH Vit chng trnh assembly cho my tnh c nhn nhp vo mt s h 10 trong khong - 32768 n 32767, sau hin s nhp vo ra mn hnh dng nh phn. Lu thut gii:
Chng trnh hon chnh:
;Nhap tung so, nhap den dau chuyen thanh so den do .MODEL SMALL HienXau MACRO xau PUSH AX PUSH DX LEA DX,xau MOV AH,09H INT 21H POP DX POP AX ENDM .STACK 100H .DATA TB1 DB 'Nhap vao mot so thap phan: $' TB2 DB 13,10,'Dang nhi phan la: $' .CODE MAIN PROC Bt u Nhp tng ch s, nhp n u chuyn thnh s n a tng bit ca s ra mh Kt thc Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 32 - ;Khoi tao thanh ghi DS MOV AX,@DATA MOV DS,AX ;Xoa man hinh MOV AH,0FH INT 10H MOV AH,0 INT 10H ;Hien thong bao nhap so thap phan HIENXAU TB1 ;Nhap tung so, nhan so tinh duoc truoc do voi 10 roi cong voi so vua nhap XOR BX,BX ;Xoa BX = 0, BX dung de chua so he 10 nhap vao MOV CX,10 ;So nhan MOV DI,0 ;Ghi nho ve dau: DI=0 la duong, DI=1 la am NHAP: MOV AH,1 INT 21H CMP AL,13 JE THOI ;Neu an Enter thi thoat CMP AL,'-' JNE TIEP MOV DI,1 JMP NHAP TIEP:SUB AL,30H ;Chuyen chu so thanh so XOR AH,AH PUSH AX ;Dua so vua nhap vao ngan xep MOV AX,BX ;Dua so tinh duoc truoc do vao AX de nhan voi 10 MUL CX ;Nhan so tinh duoc truoc do voi 10 MOV BX,AX ;Dua tich sang BX POP AX ;Lay lai so de trong ngan xep ADD BX,AX ;Cong so do voi BX roi de ket qua trong BX JMP NHAP ;Quay lai nhap so tiep theo THOI: ;Kiem tra xem co nhap vao dau - hay khong CMP DI,0 JE DUARA ;Khong nhap vao dau tru NEG BX ;Co nhap dau -
;Dua so he 10 ra man hinh duoi dang he 2 DUARA: HIENXAU TB2 CALL HIENBIN ;Goi chuong trinh con ;Tro ve DOS MOV AH,4CH INT 21H MAIN ENDP ;Khai bao chuong trinh con HIENBIN PROC ;Cat cac thanh ghi de khong bi anh huong PUSH AX PUSH BX PUSH CX Bi ging k thut vi x l - GV. Ng Cng Thng Chng 3 Lp trnh Assembly cho h vi x l - 33 - PUSH DX
MOV CX,16 MOV AH,2 MOV DH,0 HIEN: XOR DL,DL ROL BX,1 ADC DL,30H INT 21H INC DH CMP DH,4 JNE HIENTIEP MOV AH,2 MOV DL,' ' INT 21H MOV DH,0 HIENTIEP: LOOP HIEN ;Lay lai noi dung cua cac thanh ghi da cat POP DX POP CX POP BX POP AX RET ;Tro ve chuong trinh chinh HIENBIN ENDP END MAIN