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)

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 trang 1

Trang 1

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 trang 2

Trang 2

pdf 2 trang xuanhieu 3700
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

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:

  • pdfbai_giang_kien_truc_may_tinh_hop_ngu_bai_3_lenh_nhay_lenh_la.pdf