Tải bản đầy đủ (.pdf) (2 trang)

Bài giảng Kiến trúc máy tính và hợp ngữ: Bài 3 - Huỳnh Tổ Hạp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (176.98 KB, 2 trang )

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

Cờ điều khiển: IF, DF, TF
Cờ trạng thái:

z

z

z
z
z

Mỗi bit gọi là 1 cờ (có trị 1: set, hoặc 0: clear)

CF (Carry flag) có trị 1 khi có nhớ hoặc mượn từ bit MSB
ZF (Zero flag) có trị 1 khi kết quả là 0
SF (Sign flag) có trị 1 khi kết quả là âm (bit MSB là 1)


Các lệnh tính toán đều làm thay đổi cờ.
(Xem thêm chương 2)
z

Lệnh nhảy (Jump)
z

(Các thanh ghi sắp xếp theo chức năng)

z

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ờ
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)
ƒ
ƒ
ƒ
ƒ
ƒ

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,

Xem VD (trang 56)
Chú ý: không có cấu trúc IF ... THEN ... ELSE
z

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'
;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

Y

AL = ‘s’

Gán Chào Chiều

LàSáng:
Gán Chào Sáng
HiểnThị:
Hiển thị Sáng

1


Lệnh lặp (Loop)
ƒ

Vòng lặp thường kết thúc bằng 1 lệnh nhảy

z

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 CX<>0 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)

I = 256

....

I=I–1
Y

I <> 0

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)

BatDau:
Nhập 1 ký tự

(vào AL)
AL < ‘0’

AL > ‘9’

T

T

‘0’ < AL < ‘9’
NhapLai:
Thông báo SAI
CX <> 0

T

Thông báo dừng nhập
KetThuc:
KetThuc:
... ...

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:
...

ƒ

ƒ

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
...

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

Bài tập
z
z

Lý thuyết: 3.1 đến 3.4 (thảo luận nhóm)
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)

2



×