Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh Các lệnh nhảy cĩ điều kiện: * Phạm vi của lệnh nhảy cĩ điều kiện: cấu trúc mã máy của lệnh nhảy cĩ điều kiện địi
Trang 1Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh
Các lệnh nhảy cĩ điều kiện:
* Phạm vi của lệnh nhảy cĩ điều kiện: cấu trúc mã máy của lệnh nhảy cĩ điều kiện địi hỏi nhãn đích phải đứng trước lệnh nhảy khơng quá 126 byte hoặc đứng sau khơng quá 127 byte
* Cĩ 3 loại lệnh nhảy cĩ điều kiện:
+ Các lệnh nhảy cĩ dấu: được dùng khi kết quả trả về là các
số cĩ dấu
+ Các lệnh nhảy khơng dấu: được dùng khi kết quả trả về là các số khơng dấu
+ Các lệnh nhảy điều kiện đơn: điều kiện phụ thuộc vào 1 cờ riêng biệt
Trang 2Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh
Các lệnh nhảy cĩ điều kiện:
* Các lệnh nhảy cĩ dấu:
JG/JNLE Nhảy nếu lớn hơn ZF=0 và SF=0F JGE/JNL Nhảy nếu lớn hơn hoặc bằng SF=0F
JL/JNGE Nhảy nếu nhỏ hơn SF<>0F
JLE/JNG Nhảy nếu nhỏ hơn hoặc bằng ZF=1 hay
SF=0F
Trang 3Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh
Các lệnh nhảy cĩ điều kiện:
* Các lệnh nhảy khơng dấu:
JA/JNBE Nhảy nếu lớn hơn CF=0 và ZF=0
JAE/JNB Nhảy nếu lớn hơn hoặc bằng CF=0
JB/JNAE Nhảy nếu nhỏ hơn CF=1
JBE/JNA Nhảy nếu nhỏ hơn hoặc bằng CF=1 hay ZF=1
Trang 4Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh
Các lệnh nhảy cĩ điều kiện:
* Các lệnh nhảy điều kiện đơn:
JE/JZ Nhảy nếu bằng/Nhảy nếu bằng 0 ZF=1
JNE/JNZ Nhảy nếu khơng bằng/Nếu khác 0 ZF=0
JNC Nhảy nếu khơng nhớ CF=0
JNO Nhảy nếu khơng tràn OF=0
JNS Nhảy nếu dấu dương SF=0
JP/JPE Nhảy nếu cờ chẵn PF=1
JNP/JPO Nhảy nếu cờ lẻ PF=0
Trang 5Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh
Các lệnh nhảy cĩ điều kiện:
Ví dụ: Viết chương trình hiển thị tồn bộ tập hợp các ký tự của hệ IBM
TITLE BAITAP4:IBM
.MODEL SMALL
.STACK 100h
CODE
END MAIN
MOV AH,4Ch
;trả quyền điều khiển INT 21h
MOV AH,2
MOV CX,256 ; số ký tự
MOV DL,0 ; NULL
PRINT_LOOP
INT 21h
INC DL
DEC CX
JNZ PRINT_LOOP
Trang 6Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh
Các lệnh nhảy cĩ điều kiện:
Lệnh CMP
Lệnh CMP dùng để so sánh giữa 2 tốn tử bằng cách lấy tốn tử đích trừ đi tốn tử nguồn
Cú pháp: CMP <đích>,<nguồn>
Chú ý:
+ Thường được sử dụng chung với lệnh nhảy cĩ điều kiện
+ CMP giống lệnh SUB nhưng tốn hạng đích khơng bị thay đổi giá trị
Ví dụ: Với AX=7FFFh, BX=0001h
JG NHAN ;nếu lớn hơn thì nhả đến nhãn NHAN
NHAN:
Trang 7Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Các lệnh điều khiển rẻ nhánh
Lệnh nhảy khơng điều kiện:
Lệnh JMP
Lệnh JMP dùng để nhảy khơng điều kiện, dùng để khắc phục giới hạn của lệnh nhảy cĩ điều kiện:
Cú pháp: JMP <đích>
Ví dụ:
MOV CX,10
TOP:
JMP EXIT ;sai nhảy đến nhãn EXIT
Trang 8Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Cấu trúc rẻ nhánh IF…THEN….ELSE
Cấu trúc rẻ nhánh IF…THEN… ELSE biểu diễn như sau:
Điều kiện
Đúng Lệnh 1
Sai
Ví dụ: Nếu AX>0 thì AX = AX-1, ngược lại (AX<=0) thì AX=AX+1
Mơ tả:
IF AX>0 THEN
AX = AX - 1 ELSE
AX = AX + 1 END IF
ENDIF_:
Lệnh 2
Trang 9Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Cấu trúc CASE
Cấu trúc rẻ nhánh CASE biểu diễn như sau:
Giá trị 1
Phát biểu
Kiểm tra giá trị
Tập lệnh 1 Tập lệnh 2 Tập lệnh k Tập lệnh
Trang 10Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Cấu trúc CASE
Ví dụ: Nếu AX>0 thì BX = 1, nếu AX<0 thì BX=-1, nếu AX=0 thì BX=0
Mơ tả:
CASE AX
<0: BX= - 1
=0: BX= 0
>0: BX= 1 END_CASE
JL NHO ;Nếu AX<0
JG LON ;Nếu AX>0
NHO: MOV BX,-1
BANG: MOV BX,0
LON: MOV BX,1
END_CASE:
Trang 11Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Cấu trúc lặp FOR
Vịng lặp FOR là cấu trúc lặp lại các dịng lệnh với số lần xác định trước, thường dùng biến đếm để điều khiển)
Đếm=0?
Lệnh
Sai
Ví dụ: Hiển thị lên màn hình 80 dấu *
Mơ tả:
FOR 80 lần DO
Hiển thị dấu * END_FOR
MOV DL,’*’
FOR_:
JCXZ SKIP
SKIP:
Khởi tạo đếm
Đếm=đếm-1
Đúng
Trang 12Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN Cấu trúc lặp WHILE
Vịng lặp WHILE phụ thuộc vào điều kiện kiểm tra ngay từ đầu Khi điều kiện cịn thỏa mãn cịn lặp
Điều kiện
Lệnh
Sai
Ví dụ: Đếm số ký tự trong một dịng
Mơ tả:
Khởi tạo bộ đếm =0 Đọc một ký tự
WHILE ký tự <>ký tự đầu dịng DO
đếm=đếm+1 đọc một ký tự END_WHILE
Đúng
Trang 13Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN
Ví dụ: Đếm số ký tự trong một dịng
WHILE_:
INC DX ;Khơng đúng Tăng đếm lên 1
INT 21h ;Đọc lại 1 ký tự
END_WHILE:
Cấu trúc lặp WHILE
Trang 14Cấu trúc lặp REPEAT
Vịng lặp REPEAT thi hành ít nhất 1 lần rồi mới kiểm tra điều kiện, nếu thỏa mãn thì tiếp tục lặp
Điều kiện
Lệnh
Đúng
Ví dụ: Đọc vào các ký tự, chỉ dừng lại khi gặp ký tự trắng
Mơ tả:
REPEAT
Đọc một ký tự UNTIL ký tự trắng
Sai
REPEAT_:
Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN
Trang 15Ví dụ: Viết chương trình cho nhập 1 ký tự từ màn hình và xuất câu thông báo chào buổi sáng, buổi trưa hay buổi chiều tương ứng với ký tự nhậpvào
là 'S', 's', 'T', 't', 'C', 'c'
.MODEL SMALL
.STACK 100h
.DATA
CBS DB "CHAO BUOI SANG$"
CBT DB "CHAO BUOI TRUA$"
CBC DB "CHAO BUOI CHIEU$"
MOV AX, @DATA MOV DS, AX
.CODE
;nhập một ký tự
MOV AH,1 INT 21h
CMP AL,’S’
JE BUOI_SANG CMP AL,’s’
JE BUOI_SANG
CMP AL,’T’
JE BUOI_TRUA CMP AL,’t’
JE BUOI_TRUA
CMP AL,’C’
JE BUOI_CHIEU CMP AL,’c’
JE BUOI_CHIEU
BUOI_SANG: LEA DX,CBS MOV AH,9 INT 21h JMP THOAT
BUOI_TRUA: LEA DX,CBT MOV AH,9 INT 21h JMP THOAT
BUOI_CHIEU: LEA DX,CBC MOV AH,9 INT 21h JMP THOAT
END
Trang 16Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN
Ví dụ: Viết chương trình hiển thị lên màn hình hình chữ nhật tơ kín dấu * với 10 cột và 5 hàng: * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * stack 100h
.data
i db -1
j db -1 code
mov ax,@data mov ds,ax
mov ah,2
for_i:
mov dl,0ah int 21h mov dl,0Dh int 21h
mov j,0 inc i cmp i,5
jl for_j jge exit
for_j:
mov dl,'*' int 21h inc j cmp j,20
jl for_j jge for_i
exit:
mov ah,4ch int 21h end
Mơ tả:
For I=1 to 5
For J=1 to 10
In(‘*’)
End_For_J
End_For_I
Trang 17Chương 2: CÁC CHỈ THỊ LOGIC VÀ ĐIỀU KHIỂN
1 Nhập vào 1 ký tự, nếu khơng phải là một số thì nhập lại, nếu là số thì in số đĩ ra màn hình
2 Nhập vào 2 ký tự số (19), Tìm số lớn nhất và số nhỏ nhất và in kết quả ra màn hình
3 Nhập vào 1 ký tự chữ thường Xuống dịng và in ra các ký tự từ a đến ký tự đĩ
4 Nhập vào 1 ký tự số (19) Tính tổng tất cả các số từ số đĩ đến 9
Viết chương trình:
BÀI TẬP