Bài giảng Kiến trúc máy tính - Bài 3: Lệnh nhảy – Lệnh lặp

Lệnh nhảy (Jump) z Định nghĩa: z Thay đổi trật tự thực hiện các lệnh (thay vì tuần tự) z Tùy thuộc vào tình huống, phản ánh ở trị các cờ z Các lệnh làm thay đổi cờ z Các lệnh tính toán sẽ thay đổi trị các cờ z Lệnh CMP Đích, Nguồn (Compare: So sánh) ƒ Tương tự lệnh SUB nhưng không làm thay đổi trị đích ƒ Cũng thay làm thay đổi cờ ƒ Nếu Đích = Nguồn, ZF = 1 ƒ Nếu Đích > Nguồn, SF = 0, CF = 0 ƒ Nếu Đích < Nguồn, SF = 1, CF = 1 ƒ VD: MOV AL, 10 CMP AL, 90h ; SF = 1, CF = 1

pdf2 trang | Chia sẻ: thanhle95 | Lượt xem: 394 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Bài giảng Kiến trúc máy tính - Bài 3: Lệnh nhảy – Lệnh lặp, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1Bài 3: Lệnh nhảy – Lệnh lặp (Sơ lược về thanh ghi cờ) z Thanh ghi cờ (Flag) z Ghi nhận các thông tin điều khiển, trạng thái của CPU và kết quả thực hiện lệnh sau cùng. z Mỗi bit gọi là 1 cờ (có trị 1: set, hoặc 0: clear) z Cờ điều khiển: IF, DF, TF z Cờ trạng thái: z CF (Carry flag) có trị 1 khi có nhớ hoặc mượn từ bit MSB z ZF (Zero flag) có trị 1 khi kết quả là 0 z SF (Sign flag) có trị 1 khi kết quả là âm (bit MSB là 1) z Các lệnh tính toán đều làm thay đổi cờ. (Xem thêm chương 2) z (Các thanh ghi sắp xếp theo chức năng) Lệnh nhảy (Jump) z Định nghĩa: z Thay đổi trật tự thực hiện các lệnh (thay vì tuần tự) z Tùy thuộc vào tình huống, phản ánh ở trị các cờ z Các lệnh làm thay đổi cờ z Các lệnh tính toán sẽ thay đổi trị các cờ z Lệnh CMP Đích, Nguồn (Compare: So sánh) ƒ Tương tự lệnh SUB nhưng không làm thay đổi trị đích ƒ Cũng thay làm thay đổi cờ ƒ Nếu Đích = Nguồn, ZF = 1 ƒ Nếu Đích > Nguồn, SF = 0, CF = 0 ƒ Nếu Đích < Nguồn, SF = 1, CF = 1 ƒ VD: MOV AL, 10 CMP AL, 90h ; SF = 1, CF = 1 z Các lệnh nhảy: (cấu trúc IF ... THEN ...) (đi sau các lệnh làm thay đổi cờ) z Lệnh nhảy không điều kiện: JMP Nhãn_đích z Lệnh nhảy theo điều kiện Jxx Nhãn_đích ƒ (tùy thuộc tr/thái th/ghi cờ) nếu thỏa nhảy đến Nhãn. ƒ Nhảy theo kết quả không dấu: JB, JA ƒ Nhảy theo kết quả có dấu: JL, LG ƒ Nhảy theo giá trị cờ: JE (nhảy nếu bằng: Equal), JZ (nhảy nếu ZF=1) : ZF=1, z Xem VD (trang 56) Chú ý: không có cấu trúc IF ... THEN ... ELSE Nhập 1 ký tự. Nếu là ‘S’ hoặc ‘s’ thì chào Buổi sáng Nếu khác thì chào Buổi chiều ;Hien thi cau hoi ;Nhap tra loi MOV AH,1 INT 21H ;Kiem tra tra loi la 'S' hay 's' ;Neu dung nhay den LaSang CMP AL,'s' JE LaSang CMP AL,'S' JE LaSang ;Tra loi khac 'S' hay 's' ;Lay dia chi cau chao buoi chieu va hien thi MOV DX,OFFSET Chieu JMP Hienthi ;Tra loi la 'S' hay 's' ;Lay dia chi cau chao buoi sang va hien thi LaSang: MOV DX,OFFSET Sang ;Hien thi cau chao Hienthi: MOV AH,9 ; hiển thị S hoặc C, chung INT 21h INT 21H ;Ve DOS AL = ‘s’ Gán Chào Chiều LàSáng: Gán Chào Sáng HiểnThị: Hiển thị Sáng Y 2Lệnh lặp (Loop) ƒ Vòng lặp thường kết thúc bằng 1 lệnh nhảy Các lệnh nhảy lặp: z LOOP Nhãn ƒ Biến đếm của vòng lặp sẽ là CX ƒ Phải khởi gán cho CX (số lần lặp) ƒ Sẽ giảm CX và kiểm tra nếu CX0 thì quay lại Nhãn (xem VD trang 58) ƒ Nếu muốn tạo 2 vòng lặp lồng nhau, dùng lệnh PUSH / POP (xem VD trang 58) z VD trang 58 ... .CODE MOV AH, 2 MOV CX, 256 MOV DL, 0 PrintLoop: INT 21H INC DL DEC CX JNZ PrintLoop ... ... .CODE MOV AH, 2 MOV CX, 256 MOV DL, 0 PrintLoop: INT 21H INC DL LOOP PrintLoop ... I = 256 .... I 0 I = I – 1 Y MOV CX, 5 Ngoai: PUSH CX ... MOV CX, 10 Trong: ... LOOP Trong POP CX LOOP Ngoai (Push / Pop: đưa vào / lấy ra từ Stack) ƒ LOOPE / LOOPZ Tiếp tục lặp khi CX 0 và ZF = 1 (Hoặc kết thúc lặp khi .... ) ƒ LOOPNE / LOOPNZ Tiếp tục lặp khi CX 0 và ZF = 0 (Hoặc kết thúc lặp khi .... ) VD: Nhập 1 chuỗi ký tự dài tối đa 128 hoặc kết thúc bằng Enter ƒ .CODE ƒ MOV CX, 128 ƒ KeyLoop: ƒ MOV AH, 1 ƒ INT 21H ƒ CMP AL, 0Dh ; Ký tự vừa bấm là Enter ƒ LOOPNE KeyLoop Nhập 1 ký tự. Nếu là số: từ 0 đến 9 thì dừng Nếu khác thì Báo nhập lại, tối đa 3 lần ;Nhap so lan lap vao CX MOV CX,4 ;Vong lap nhap ky tu va kiem tra BatDau: ;Nhap 1 ky tu MOV AH,1 INT 21H ;Kiem tra ky tu nhap co phai la so? CMP AL,'0' JB NhapLai CMP AL,'9' JA NhapLai JMP KetThuc NhapLai: MOV AH,9 MOV DX,OFFSET BaoSai1 INT 21H LOOP BatDau MOV AH,9 MOV DX,OFFSET BaoSai2 INT 21H KetThuc: ... AL < ‘0’ AL > ‘9’ NhapLai: Thông báo SAI BatDau: Nhập 1 ký tự (vào AL) KetThuc: ... T T ‘0’ < AL < ‘9’ CX 0 T KetThuc: ... Thông báo dừng nhập Bài tập z Lý thuyết: 3.1 đến 3.4 (thảo luận nhóm) z Thực hành: 3.5 đến 3.13 (kiểm tra thực hành) (Hướng dẫn: Mã ASCII 8 : quay lui, back space 10 : xuống dòng, line feed, new line) 27 : phím ESC)
Tài liệu liên quan