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
2 trang |
Chia sẻ: thanhle95 | Lượt xem: 493 | Lượt tải: 1
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)