Xem mẫu

  1. (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 (cấu trúc IF ... THEN ...) CMP AL,'s' 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 ;Tra loi khac 'S' hay 's' JMP Nhãn_đích ;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 ƒ Nhảy theo giá trị cờ: ;Hien thi cau chao Hienthi: JE (nhảy nếu bằng: Equal), JZ (nhảy nếu ZF=1) : ZF=1, 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
  2. 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 ƒ LOOPNE KeyLoop (Push / Pop: đưa vào / lấy ra từ Stack) 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 BatDau: ;Nhap so lan lap vao CX Nhập 1 ký tự (vào AL) MOV CX,4 ;Vong lap nhap ky tu va kiem tra Bài tập BatDau: T ;Nhap 1 ky tu AL < ‘0’ MOV AH,1 z Lý thuyết: 3.1 đến 3.4 (thảo luận nhóm) INT 21H T ;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) 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 LOOP BatDau CX 0 MOV AH,9 MOV DX,OFFSET BaoSai2 Thông báo dừng nhập INT 21H KetThuc: ... KetThuc: KetThuc: ... ... 2
nguon tai.lieu . vn