1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng hợp ngữ - Chương 3 pdf

8 273 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 103,17 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

JMP KetThuc TiepTuc: ...

Trang 1

CH 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 2

MOV 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 3

a) 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 4

N: 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 5

JMP 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 6

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

END 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

Ngày đăng: 21/07/2014, 17:20

TỪ KHÓA LIÊN QUAN

w