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