Professional Documents
Culture Documents
Tm tt l thuyt
Lnh so snh Trong hp ng, mun so snh hai s, ta phi thc hin mt php ton s hc hoc logic trn hai s v cn c vo cc bit trong thanh ghi c ri a ra kt lun. lm vic ny, c th dng lnh CMP v TEST. Bn cht ca lnh CMP Des,Src l lnh SUB Des,Src (thc hin php tnh Des Src) nhng kt qu ca php tnh khng c lu vo Des nh trong lnh SUB. V d: so snh hai s nguyn dng MOV AH,1 MOV AL,2 CMP AH,AL Sau khi thc hin hai lnh trn, c Carry (CF) bt, bo hiu rng AH < AL Bn cht ca lnh TEST Des,Src l lnh AND Des,Src (thc hin php tnh Des AND Src) nhng kt qu ca php tnh khng c lu vo Des nh trong lnh AND. V d: kim tra hai bit cui cng ca AL TEST AL,3 ; 3h = 11b Nu c Zero (ZF) bt, c ngha l c hai bit 0 v 1 ca AL u bng 0. Lnh nhy Thng thng, khi mt lnh (instruction) c thc hin, gi tr ca thanh ghi IP (instruction pointer) c t ng cp nht tr n lnh k tip. Ngoi ra, ni dung ca thanh ghi IP ch c th b thay i thng qua mt s lnh c bit. l: cc lnh nhy (J*), lnh lp (LOOP*), lnh gi hm (call, ret), lnh gi ngt (int, iret). Cc lnh ny c xp vo nhm Lnh iu khin lung (Program flow control instructions). Trong bi thc hnh ny, chng ta s hc cch s dng cc lnh nhy v cc lnh lp. Lnh nhy khng iu kin JMP <target> C cc trng hp sau: JMP SHORT <tn nhn> (short jump). Khi trong m lnh lu 1 byte khong cch (offset) gia v tr hin ti v v tr cn nhy n. Kiu ny ch nhy trong phm vi t 128 n +127 byte so vi v tr hin ti. V d: JMP SHORT Calculate JMP <tn nhn> (near jump). Khi trong m lnh lu 2 byte khong cch
(offset) gia v tr hin ti v v tr cn nhy n. Kiu ny nhy ty trong phm vi segment. V d: JMP Calculate JMP FAR PTR <tn nhn> (far jump). Khi trong m lnh lu offset v segment ca v tr cn nhy n. Kiu ny nhy n bt k ch no. V d: JMP FAR PTR Calculate JMP <con tr 2 byte> (near indirect jump). Khi trong m lnh lu a ch offset ca mt nh. Khi thc hin, IP s c gn bng gi tr lu ti a ch ny. C th kt hp dng vi nh v ch s. V d: myPointer DW Prepare, Calculate, Check, Output ... MOV bx,2 ; ch s trong mng con tr SHL bx,1 ; nhn i JMP myPointer[bx] ... Prepare: ; cng vic 0 ... Calculate: ; cng vic 1 ... Check: ; cng vic 2 ni cn nhy n ... Output: ; cng vic 3 ... JMP <con tr 4 byte> (far indirect jump). Tng t trng hp trn, nhng con tr gm c segment v offset. Ch khc khai bo con tr V d: myPointer DD Prepare, Calculate, Check, Output ... MOV bx,1 ; ch s trong mng con tr MOV cl,2 SHL bx,cl ; nhn 4 JMP myPointer[bx] ... Prepare: ; cng vic 0 ... Calculate: ; cng vic 1 ni cn nhy n ... JMP <thanh ghi 2 byte> (indirect jump via regs). Nhy n a ch lu trong thanh ghi AX. V d: MOV ax, offset Calculate ... JMP ax ; (IP AX)
Cc lnh nhy c iu kin bt u bng ch J sau l cc ch ci biu th iu kin (v d JGE ah,5: Jump if Greater than or Equal, nhy nu AH ln hn hay bng 5), tip sau l mt tn nhn. Ty thuc vo trng thi cc c hiu m b vi x l c thc hin vic nhy n nhn hay khng. i vi b vi x l 80286 tr xung, lnh nhy c iu kin c di 2 byte, byte u tin cha m lnh, byte th hai cha khong cch tng i t lnh n nhn, v vy <Label> trong lnh nhy c iu kin phi nm trong khong t -128 n 127 so vi v tr lnh nhy. Mun nhy xa hn ta phi dng kt hp lnh nhy khng iu kin JMP T 80386 tr ln, b lnh c b sung, cho php s dng lnh nhy c iu kin c di 4 byte, do <Label> c quyn nm ty trong cng phm vi segment. Khi s dng lnh nhy c iu kin sau khi thc hin php so snh, phi c bit lu ton hng trong php so snh l s c du (signed) hay khng c du (unsigned) la chn lnh cho ph hp. V d: MOV AH,AL ; AL hin bng 128 CMP AH,1 JGE Greater ; AH > 1 nhng khng nhy ???? . . . Greater: Mt s lnh nhy c iu kin thng dng (tham kho thm trong SGK trang 81): JE, JZ (nhy nu bng). JA (nhy nu ln hn, khng du), JG (nhy nu ln hn, c du), JB (nhy nu nh hn, khng du), JL (nhy nu nh hn, c du). JAE (nhy nu ln hn hay bng, khng du), JGE (nhy nu ln hn hay bng, c du), JBE (nhy nu nh hn hay bng, khng du), JLE (nhy nu nh hn hay bng, c du). JNE, JNZ (nhy nu khng bng). V d: nu AL l s nguyn khng du th on chng trnh trn phi sa li nh sau: MOV AH,AL CMP AH,1 JAE Greater . . . Greater: Lnh lp Bng cch dng cc lnh nhy c th to ra vng lp. Tuy nhin, vit chng trnh tin li v ngn gn, c th dng thm cc lnh lp nh LOOP, LOOPZ, Lnh LOOP <Label> t ng gim CX mt n v, sau kim tra xem CX c bng 0, nu khng bng th nhy n nhn <Label> Lnh LOOPZ <Label> t ng gim CX mt n v, sau kim tra xem CX c bng 0 hoc c ZF c bt khng, nu c hai iu ny khng xy ra th nhy n nhn <Label> V d: Nhp mng A gm 10 k t
SI, 0 CX, 10
; ch s mng ; s ln lp
;nhp k t MOV AH, 1 INT 21H MOV A[SI], AL INC SI ; xut k t MOV AH, 2 INT 21H LOOP LAP
Bi tp
Bi 1. Vit chng trnh cho nhp 1 k t t mn hnh v xut cu thng bo cho bui sng, bui tra hay bui chiu tng ng vi k t nhpvo l 'S', 's', 'T', 't', 'C', 'c'. Bi 2. Nhp 2 s nguyn dng thuc N,M thuc [0..9], nhp 1 k t Char. Xut ra mn hnh ma trn gm N dng v M ct gm k t Char. V d: N=3, M=4, C='*' **** **** **** Bi 3. Nhp 2 s nguyn dng A, B. Tnh A/B, A*B (khng dng lnh DIV, MUL) V d: A=18, B=3 Tnh A/B: 18 - 3 - 3 - 3 - 3 - 3 - 3 = 0, vy A/B = 6 (tng s ln A tr B cho n khi A = 0). Tnh A*B = 18 + 18 + 18 = 54 Bi 4. Tm USCLN ca 2 s nguyn dng N, M nhp t bn phm. Kim tra N,M c l hai s nguyn t cng nhau khng? V d: N = 15, M = 6 => USCLN(15, 6) = 3 V d: N = 3, M = 5 => USCLN(3, 5) = 1 => 3, 5 l 2 s nguyn t cng nhau. Bi 5. Dng lnh lp, vit chng trnh nhp vo 1 chui k t. Sau khi nhp xong m xem chui c bao nhiu k t. Xut s k t c trong chui. V d: S = "Hello world !" ==> S k t trong chui l 13. Bi 6. Nhp vo 2 chui s, i 2 chui thnh s, sau cng hai s, i ra chui v xut chui tng. V d: S1 = "123" => N1 = 123 S2 = "456" => N2 = 456 N = N1 + N2 = 123 + 456 = 579 => S = "579" (xut S ra mn hnh) Bi 7. Vit chng trnh cho php nhp vo mt chui S. i tt c k t thng thnh k t hoa.
i tt c k t hoa thnh k t thng. Bi 8. Nhp v xut mng 1 chiu. Tm phn t max, min, tnh tng cc phn t trong mng. V d: N=5 A[N] = {3,1,2,7,4} => max = 7, min = 1, tng = 17. Bi 9. Ci t thut ton Bubble Sort dng ASM. Thut ton Bubble Sort theo ngn ng C nh sau: for (int i = 0; i< N-1; i++) for(int j=N-1;j > i; j--) if(a[j] < a[j-1]) Hoan_Vi (a[j], a[j-1]); Bi 10. Nhp v xut mng A hai chiu. a. Tnh tng cc phn t trn ng cho chnh, ng cho ph. b. m s phn t 0 v phn t khc 0 trong mng. c. Tm phn t max ca mi dng, mi ct. Tnh tng ca mi dng, mi ct. d. Nhp 1 mng hai chiu B, to mt mng hai chiu C c cc phn t trn dng chn bng vi cc phn t trn dng chn ca A, cc phn t trn dng l bng cc phn t trn dng l ca B.
M rng
1. Trong bi tp 5, lm sao m s t c trong chui k t? 2. Trong bi tp 10, lm sao th hin mt menu cho php ngi dng chn trong cc k t t a n d sau thc hin cng vic ng vi ch ci .
Hng dn
Bi 1. Xem v d:
.MODEL SMALL .STACK 100H .DATA CBS CBT CBC .CODE MOV MOV
DB DB DB
;nhp 1 k t bt k MOV AH, 1 INT 21H CMP JE CMP JE CMP JE CMP JE CMP JE AL, 'S' CHAO_BUOI_SANG AL, 's' CHAO_BUOI_SANG AL, 'T' CHAO_BUOI_TRUA AL, 't' CHAO_BUOI_TRUA AL, 'C' CHAO_BUOI_CHIEU
CMP JE
CHAO_BUOI_SANG: LEA DX, CBS MOV AH,9 INT 21H JMP THOAT CHAO_BUOI_TRUA: LEA DX, CBT MOV AH,9 INT 21H JMP THOAT CHAO_BUOI_CHIEU: LEA DX, CBC MOV AH,9 INT 21H JMP THOAT THOAT: MOV INT END AH, 4CH 21H
Bi 3. nhp mt s nguyn, c th lm nh sau: u tin nhp xu k t cha cc s t 0 n 9, sau i tng k t ra s v nhn vi cc ly tha tng ng ca 10 v cng li. Bi 9. Xem v d sau: Lp gm 2 vng lp (xp mng A c N phn t tng dn)
MOV MOV DEC MOV N, 10 CX, N CX SI, 0 CX CX, N DI, 0 DL, A[SI] ;gi s mng A gm N k t, trong v d ny N=10
FOR_J: CMP JB MOV MOV MOV MOV LAP: INC LOOP FOR_J INC POP LOOP FOR_I SI CX DL, A[DI] LAP BL, A[DI] A[DI], DL A[SI], BL DL, A[SI] DI