JMP KetThuc TiepTuc: ...
Trang 1CH NG III: CÁC L NH NH Y
3.1 Thanh ghi c và các c tr ng thái
Thanh ghi c dài 16 bít, m i bít c g i là m t c và có công d ng riêng D i ây là trí c a các c :
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Ta th y b vi x lý 8086 m i s d ng 9 bít c a thanh ghi c , sau ây là tên và ch c
ng c a các c :
Các c chia làm hai nhóm khác nhau: Nhóm c tr ng thái (g m 6 c : CF, PF, AF, ZF,
SF, OF) và nhóm c u khi n (g m 3 c : TF, IF, DF) Trong ch ng này ta s t p trung tìm hi u các c tr ng thái, còn các c u khi n s trình bày sau
M i khi môt l nh trong ch ng trình c th c hi n thì tr ng thái c a b vi x lý l i thay i, s thay i này c ph n ánh trong các c tr ng thái hi u rõ h n v n này ta s xem xét m t vài c tr ng thái hay dùng nh t
3.1.1 C nh CF
Ví d : xét các l nh sau ây:
MOV AX, 0FFFFh ADD AX, 1
Tr c khi th c hi n l nh ADD thì AX = FFFFh = 1111 1111 1111 1111b = 65535
Sau khi th c hi n phép c ng v i 1 thì AX b ng bao nhiêu?
1111 1111 1111 1111b + 1
1 0000 0000 0000 0000b Thanh ghi AX dài 16 bit nên sau l nh ADD thì AX = 0! Phép c ng ã không còn chính xác do k t qu v t quá ph m vi ch a c a AX (g i là hi n t ng tràn khi c ng s không u) Khi ó c CF c thi t l p b ng 1
Nh v y, c CF s c thi t l p khi th c hi n phép c ng có nh bít Msb ho c khi
th c hi n phép tr có vay bít Msb
3.1.2 C Zero ZF
Ví d : xét các l nh sau ây:
Trang 2MOV CX, 2Ah SUB CX, 2Ah Sau khi th c hi n l nh SUB thì CX = 0, c ZF c thi t l p b ng 1
Nh v y, c ZF s c thi t l p khi k t qu c a l nh v a th c hi n b ng 0
3.1.3 C tràn OF
Ví d : xét các l nh sau ây:
MOV AX, 7FFFh ADD AX, 7FFFh
Tr c khi th c hi n l nh ADD thì AX = 7FFFh = 0111 1111 1111 1111b = 32767
Sau khi th c hi n phép c ng thì AX b ng bao nhiêu?
0111 1111 1111 1111b + 0111 1111 1111 1111b
1111 1111 1111 1110b Sau l nh ADD thì AX = FFFEh N u coi ây là s không d u thì AX = 65534, không
có hi n t ng tràn, c CF = 0 Nh ng n u coi ây là s có d u thì AX = -2 (32767 +
32767 = -2!), phép c ng ã không còn chính xác do k t qu v t quá ph m vi ch a c a
AX (g i là hi n t ng tràn khi c ng s có d u) Khi ó c OF c thi t l p b ng 1
Nh v y, c OF s c thi t l p khi xu t hi n hi n t ng tràn trong phép tính v i s
có d u
3.2 Các l nh nh y có u ki n
3.2.1 Ví d
Xét ch ng trình h p ng sau:
TITLE Lenh nhay
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
NHAPLAI:
MOV AH, 1 ;Ch c n ng s 1: Nh p 1 kí t
INT 21h
JZ NHAPLAI
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN
Gi i thích:
Ch ng trình trên s nh p m t kí t t bàn phím, ki m tra xem ó có ph i là kí t kho ng tr ng ‘ ’ hay không, n u úng thì ti n hành nh p l i Quá trình ó c th c hi n
nh l nh so sánh CMP và l nh nh y JZ
Trang 3a) L nh CMP (Compare)
Cú pháp l nh:
CMP < ích>, <Ngu n>
L nh này có tác d ng t ng t l nh SUB, nó th c hi n phép tr gi a ích và Ngu n khác bi t là ch : ích không b thay i sau phép tr , ch có các c là thay i
Ví d :
CMP AL, ‘ ’
L nh trên s l y n i dung c a AL tr cho 20h (mã ASCII c a kí t kho ng tr ng) N u
t qu mà b ng 0, t c là AL = 20h (AL = ‘ ‘), thì c ZF s c thi t l p b ng 1 Tr ng thái c a các c s c s d ng làm u ki n cho các l nh nh y
b) L nh nh y JZ
L nh JZ là l nh nh y khi c ZF = 1 (Jump if Zero)
Cú pháp l nh:
JZ <Nhãn>
Trong ch ng trình trên, l nh JZ s ki m tra c ZF, n u ZF = 1 thì s nh y t i nhãn NHAPLAI, ngh a là th c hi n l i các l nh nh p d li u
3.2.2 M t s l nh nh y
Có nhi u l nh nh y khác nhau ng v i tr ng thái khác nhau c a các c :
JC
JNC
JO
JNO
JS
JNS
Nh y n u có nh (Jump if Carry)
Nh y n u không nh (Jump if Not Carry)
Nh y n u tràn có d u (Jump if OverFlow)
Nh y n u không tràn (Jump if Not OverFlow)
Nh y n u d u âm (Jump if Sign)
Nh y n u d u d ng (Jump if Not Sign)
CF = 1
CF = 0
OF = 1
OF = 0
SF = 1
SF = 0
Vi c ki m tra tr ng thái c a các c khi s d ng l nh nh y gây r t nhi u khó kh n cho
ng i l p trình (do có quá nhi u l nh nh y, khó nh , không h p v i t duy thông
th ng ) kh c ph c u này, ng i ta th ng s d ng các l nh nh y kèm v i l nh CMP theo quy t c sau:
CMP < ích>, <Ngu n>
u ki n nh y nh nh y không d u L nh nh y có d u
ích > Ngu n
ích < Ngu n
ích = Ngu n
ích Ngu n
ích Ngu n
ích Ngu n
JA/ JNBE JB/ JNAE JE/ JZ JAE/ JNB JBE/ JNA JNE/ JNZ
JG/ JNLE JL/ JNGE JE/ JZ JGE/ JNL JLE/ JNG JNE/ JNZ
t s t vi t t t:
A: Above (l n h n) = G: Greater than
B: Below (nh h n) = L: Less than
E: Equal (b ng)
Trang 4N: Not (không)
Ví d :
JNA: Jump if Not Above = JBE: Jump if Below - Equal
Gi i thích:
Tr c m i l nh nh y c n dùng m t l nh CMP t o u ki n nh y Ng i l p trình
c n c vào quan h gi a < ích> và <Ngu n> l a ch n l nh nh y thích h p
Ví d :
CMP AL, 5Ah
JA KetThuc ;N u AL > 5Ah thì nh y t i nhãn KetThuc
N u ích > Ngu n: Ta có th s d ng l nh nh y JA ho c JNBE (trong tr ng h p ích và Ngu n là s không d u) Hai l nh này có tác d ng gi ng h t nhau N u coi ích
và ngu n là các s có d u thì ph i s d ng l nh JG ho c JNLE
3.3 L nh nh y không u ki n JMP
Các l nh nh y có u ki n mà ta ã nghiên c u có m t nh c m là không th nh y quá xa Các l nh ó ch có th nh y t i m t nhãn ng tr c nó không quá 126 byte ho c
ng sau không quá 127 byte
kh c ph c u này có th s d ng l nh nh y không u ki n JMP Cú pháp l nh
nh sau:
JMP <Nhãn>
trí c a <Nhãn> ph i n m cùng m t n nh v i l nh nh y JMP
Ví d : Xét n l nh sau:
MOV AH, 1 ;Nh p m t kí t
INT 21h
CMP AL, ‘Z’ ;So sánh kí t v a nh p v i ‘Z’
JA KetThuc ;N u AL > ‘Z’ thì nh y t i nhãn KetThuc
;Các l nh khác
KetThuc:
MOV AH, 4Ch
INT 21h
n l nh trên ch th c hi n c khi kho ng cách gi a l nh JA và v trí t nhãn KetThuc không quá 127 byte Tuy nhiên, n u kho ng cách ó v t quá gi i h n cho phép thì ta có th kh c ph c b ng ph ng pháp “nh y hai b c” nh l nh JMP ( u tiên nh y
i m t “Nhãn trung gian”, sau ó m i nh y t i nhãn KetThuc):
MOV AH, 1 ;Nh p m t kí t
INT 21h
CMP AL, ‘Z’ ;So sánh kí t v a nh p v i ‘Z’
JA NhanTrungGian ;N u AL > ‘Z’ thì nh y t i NhanTrungGian
JMP TiepTuc
Trang 5JMP KetThuc
TiepTuc:
;Các l nh khác
KetThuc:
MOV AH, 4Ch
INT 21h
3.4 M t s ng d ng c a l nh nh y
Khi l p trình v i các ngôn ng b c cao, ta ã r t quen thu c v i các c u trúc l nh r nhánh (If, Case) và các c u trúc l p (For, While) Ph n ti p theo s trình bày cách th c s
ng l nh nh y gi l p các c u trúc b c cao ó
3.4.1 C u trúc r nhánh If
i v i c u trúc r nhánh thì v trí c a nhãn s ng sau l nh nh y:
<L nh nh y>
<Nhãn>
Ví d :
Nh p m t kí t t bàn phím, n u là kí t in th ng thì i sang in hoa Hi n kí t ra màn hình
Thu t toán nh sau:
• Nh p m t kí t KT
• IF (KT ‘z’) AND (KT ‘a’) THEN i KT sang in hoa
• Hi n KT ra màn hình
Gi i:
TITLE DOI KI TU
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AH, 1 ;Nh p m t kí t
INT 21h
CMP AL,
CMP AL,
HienChu:
Trang 6MOV AH, 2 ;Ch c n ng s 2: Hi n kí t
MOV DL, AL
INT 21h
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN
3.4.2 C u trúc l p
a) L p không bi t tr c s l n l p (While, Repeat)
i v i các c u trúc l p nói chung thì v trí c a nhãn s ng tr c l nh nh y:
<Nhãn>
<L nh nh y>
Ví d :
Nh p m t kí t s t bàn phím (‘0’, ‘1’, , ‘9’), i nó sang s th p phân t ng ng Thu t toán nh sau:
REPEAT
Nh p m t kí t KT
UNTIL (KT ‘0’) AND (KT ‘9’)
i KT sang s th p phân
Gi i:
TITLE VI DU LAP
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
NhapLai:
MOV AH, 1 ;Nh p m t kí t
INT 21h
CMP AL,
CMP AL,
;Các l nh khác
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
Trang 7END MAIN
Gi i thích:
Kí t ‘0’ có mã ASCII b ng 30h
Kí t ‘1’ có mã ASCII b ng 31h
Kí t ‘9’ có mã ASCII b ng 39h
i kí t s sang s th p phân t ng ng, ta l y mã ASCII c a nó em tr cho 30h
b) L p v i s l n l p bi t tr c (For)
Ví d :
Hi n ra màn hình 10 s nguyên theo th t : 0, 1, 2, 3, , 9
Thu t toán nh sau:
FOR I = 0 TO 9 DO <Hi n I ra màn hình>
Gi i:
TITLE VI DU LAP FOR
.MODEL SMALL
.STACK 100H
.DATA
I DB 0 ;Kh i t o giá tr bi n I b ng 0
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
Lap:
MOV DL, I
MOV AH, 2 ;Ch c n ng s 2: Hi n kí t
INT 21h
INC I ;T ng bi n I lên 1
CMP I, 10
JNZ Lap ;N u I 10 thì l p l i
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN
c) L nh l p LOOP
ây là c u trúc l nh có s n trong h p ng th c hi n các vòng l p bi t tr c s l n
p Cách vi t l nh nh sau:
MOV CX, <S l n l p>
NHANLAP:
Trang 8;Các l nh c n l p
LOOP NHANLAP
l n l p c t vào thanh ghi CX, sau m i l n l p thì CX c t ng gi m i 1
Ta s s d ng l nh này vi t l i ch ng trình trong ph n b:
TITLE VI DU LAP LOOP
.MODEL SMALL
.STACK 100H
.DATA
I DB 0 ;Kh i t o giá tr bi n I b ng 0
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV CX, 10 ;S l n l p
Lap:
MOV DL, I
MOV AH, 2 ;Ch c n ng s 2: Hi n kí t
INT 21h
INC I ;T ng bi n I lên 1
LOOP Lap
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN