1
Bài 3:
Lnh nhy – Lnh lp
(Sơ lược v thanh ghi c)
zThanh ghi c (Flag)
zGhi nhn các thông tin điu khin, trng thái ca
CPU và kết qu thc hin lnh sau cùng.
zMi bit gi là 1 c (có tr 1: set, hoc 0: clear)
zC điu khin: IF, DF, TF
zC trng thái:
zCF (Carry flag) có tr 1 khi có nh hoc mượn t bit MSB
zZF (Zero flag) có tr 1 khi kết qu là 0
zSF (Sign flag) có tr 1 khi kết qu là âm (bit MSB là 1)
zCác lnh tính toán đều làm thay đổi c.
(Xem thêm chương 2)
z(Các thanh ghi sp xếp theo chc năng)
Lnh nhy (Jump)
zĐịnh nghĩa:
zThay đổi trt t thc hin các lnh (thay vì tun t)
zTùy thuc vào tình hung, phn ánh tr các c
zCác lnh làm thay đổi c
zCác lnh tính toán s thay đổi tr các c
zLnh CMP Đích, Ngun(Compare: So sánh)
Tương t lnh SUB nhưng không làm thay đổi tr đích
Cũng thay làm thay đổi c
Nếu Đích = Ngun, ZF = 1
Nếu Đích > Ngun, SF = 0, CF = 0
Nếu Đích < Ngun, SF = 1, CF = 1
VD: MOV AL, 10 CMP AL, 90h ; SF = 1, CF = 1
zCác lnh nhy:
(cu trúc IF ... THEN ...)
(đi sau các lnh làm thay đổi c)
zLnh nhy không điu kin:
JMP Nhãn_đích
zLnh nhy theo điu kin
Jxx Nhãn_đích
(tùy thuc tr/thái th/ghi c) nếu tha nhy đến Nhãn.
Nhy theo kết qu không du: JB, JA
Nhy theo kết qu du: JL, LG
Nhy theo giá tr c:
JE (nhy nếu bng: Equal), JZ (nhy nếu ZF=1) : ZF=1,
zXem VD (trang 56)
Chú ý: không có cu trúc IF ... THEN ... ELSE
Nhp 1 ký t. Nếu là ‘S’ hoc ‘s’ thì co Bui sáng
Nếu khác thì chào Bui chiu
;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 ; hin th S hoc C, chung INT 21h
INT 21H
;Ve DOS
AL = ‘s’
Gán Chào Chiu
LàSáng:
Gán Chào Sáng
HinTh:
Hin th Sáng
Y
2
Lnh lp (Loop)
Vòng lp thường kết thúc bng 1 lnh nhy
Các lnh nhy lp:
zLOOP Nhãn
Biến đếm ca vòng lp s là CX
Phi khi gán cho CX (s ln lp)
S gim CX và kim tra nếu CX<>0 thì quay li Nhãn
(xem VD trang 58)
Nếu mun to 2 vòng lp lng nhau, dùng lnh PUSH / POP
(xem VD trang 58)
zVD 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 / ly ra t Stack)
LOOPE/ LOOPZ
Tiếp tc lp khi CX <> 0 và ZF = 1
(Hoc kết thúc lp khi .... )
LOOPNE / LOOPNZ
Tiếp tc lp khi CX <> 0 và ZF = 0
(Hoc kết thúc lp khi .... )
VD: Nhp 1 chui ký t dài ti đa 128 hoc kết thúc bng Enter
.CODE
MOV CX, 128
KeyLoop:
MOV AH, 1
INT 21H
CMP AL, 0Dh ; Ký t va bm là Enter
LOOPNE KeyLoop
Nhp 1 ký t. Nếu là s: t 0 đến 9 thì dng
Nếu khác thì Báo nhp li, ti đa 3 ln
;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:
Nhp 1 ký t
(vào AL)
KetThuc: ...
T
T
‘0’ < AL < ‘9’
CX <> 0 T
KetThuc: ...
Thông báo dng nhp
Bài tp
zLý thuyết: 3.1 đến 3.4 (tho lun nhóm)
zThc hành: 3.5 đến 3.13 (kim tra thc hành)
(Hướng dn: Mã ASCII
8 : quay lui, back space
10 : xung dòng, line feed, new line)
27 : phím ESC)