Thông tin tài liệu:
Tài liệu tham khảo Bài giảng hợp ngữ gồm 9 chương - Chương 3 Các lệnh nhảy
Nội dung trích xuất từ tài liệu:
Bài giảng hợp ngữ - Chương 3Bài gi ng h p ng Ch ng III: Các l nh nh y CH NG III: CÁC L NH NH Y3.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 OF DF IF TF SF ZF AF PF CF 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 : Bit Tên c Kí hi u 0 C nh (Carry Flag) CF 2 C ch n l (Parity Flag) PF 4 C nh ph (Auxiliary Flag) AF 6 C Zero (Zero Flag) ZF 7 C d u (Sign Flag) SF 11 C tràn (OverFlow Flag) OF 8 C b y (Trap Flag) TF 9 C ng t (Interrupt Flag) IF 10 C nh h ng (Direction Flag) DF 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 trungtì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 ithay i, s thay i này c ph n ánh trong các c tr ng thái. hi u rõ h n v nnà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 CFVí d : xét các l nh sau ây: MOV AX, 0FFFFh ADD AX, 1Tr c khi th c hi n l nh ADD thì AX = FFFFh = 1111 1111 1111 1111b = 65535Sau 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ínhxá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 khith c hi n phép tr có vay bít Msb.3.1.2 C Zero ZFVí d : xét các l nh sau ây: 24Bài gi ng h p ng Ch ng III: Các l nh nh y MOV CX, 2Ah SUB CX, 2AhSau 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 OFVí d : xét các l nh sau ây: MOV AX, 7FFFh ADD AX, 7FFFhTr c khi th c hi n l nh ADD thì AX = 7FFFh = 0111 1111 1111 1111b = 32767Sau 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ôngcó 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 aAX (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 scó d u.3.2 Các l nh nh y có u ki n3.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 CMP AL, ;Ki m tra kí t v a nh p JZ NHAPLAI ... MOV AH, 4Ch ;K t thúc INT 21h MAIN ENDPEND MAINGi 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í tkho 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 nnh l nh so sánh CMP và l nh nh y JZ. 25Bài gi ng h p ng Ch ng III: Các l nh nh ya) L nh CMP (Compare)Cú pháp l nh: CMP < ích>, 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 t hay 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 ngthá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). ...