intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:8

106
lượt xem
24
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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

Chủ đề:
Lưu

Nội dung Text: Bài giảng hợp ngữ - Chương 3

  1. Bài gi ng h p ng Ch ng III: Các l nh nh y 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 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 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: 24
  2. Bài gi ng h p ng Ch ng III: Các l nh nh y 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 CMP AL, ;Ki m tra kí t v a nh p 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. 25
  3. Bài gi ng h p ng Ch ng III: Các l nh nh y a) 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 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 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 : nh Ch c n ng u ki n nh y CF = 1 JC Nh y n u có nh (Jump if Carry) CF = 0 JNC Nh y n u không nh (Jump if Not Carry) OF = 1 JO Nh y n u tràn có d u (Jump if OverFlow) JNO Nh y n u không tràn (Jump if Not OverFlow) OF = 0 JS Nh y n u d u âm (Jump if Sign) SF = 1 SF = 0 JNS Nh y n u d u d ng (Jump if Not Sign) ... ... ... 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 , k hô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>, u ki n nh y nh nh y không d u L nh nh y có d u ích > Ngu n JA/ JNBE JG/ JNLE ích < Ngu n JB/ JNAE JL/ JNGE ích = Ngu n JE/ JZ JE/ JZ ích Ngu n JAE/ JNB JGE/ JNL ích Ngu n JBE/ JNA JLE/ JNG ích Ngu n JNE/ JNZ 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) 26
  4. Bài gi ng h p ng Ch ng III: Các l nh nh y 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 to u ki n nh y. Ng i l p trình c n c vào quan h g i a < ích> và 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. k h 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 trí c a 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 t h c hi n c k hi kho ng cách gi a l nh JA và v t rí t nhãn KetThuc không quá 127 byte. Tuy nhiên, n u k ho ng cách ó v t quá gi i h n cho phép thì ta có th k h c ph c b ng ph ng pháp “nh y hai b c” nh l nh JMP ( u t iê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 27
  5. Bài gi ng h p ng Ch ng III: Các l nh nh y NhanTrungGian: 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 t rúc l p ( For, While). Ph n t i p t heo 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 t rí c a nhãn s ng sau l nh nh y: .... 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, JA HienChu ;N u AL > thì hi n kí t ra màn hình CMP AL, JB HienChu ;N u AL < thì hi n kí t ra màn hình SUB AL, 20h ; i kí t sang in hoa HienChu: 28
  6. Bài gi ng h p ng Ch ng III: Các l nh nh y 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 t rí c a nhãn s ng tr c 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, JB NhapLai ;N u AL < thì nh p l i CMP AL, JA NhapLai ;N u AL > thì nh p l i SUB AL, 30h ; i sang s th p phân t ng ng ... ;Các l nh khác MOV AH, 4Ch ;K t thúc INT 21h MAIN ENDP 29
  7. Bài gi ng h p ng Ch ng III: Các l nh nh y 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 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 ADD DL,30h ; i s nguyên sang kí t s t ng ng 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 t h c hi n các vòng l p bi t tr cs l n p. Cách vi t l nh nh sau: MOV CX, NHANLAP: 30
  8. Bài gi ng h p ng Ch ng III: Các l nh nh y ... ;Các l nh c n l p LOOP NHANLAP l nl p c t vào thanh ghi CX, sau m i l n l p thì CX ct 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 lnlp Lap: MOV DL, I ADD DL,30h ; i s nguyên sang kí t s t ng ng 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 31
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2