Nhóm lệnh chuyển điều khiển• Lệnh nhảy không điều kiện Số có dấu... Nhảy theo kiểu không dấu... Toán hạng nguồn trong lệnh là số có dấu để cộng thêm vào thanh ghi IP... Lệnh nhảy có điều
Trang 1Chương 7 NHÓM LỆNH CHUYỂN ĐiỀU
KHIỂN
Trang 2Nhóm lệnh chuyển điều khiển
• Lệnh nhảy không điều kiện
Số có dấu
Trang 3Nhảy theo kiểu không dấu
Trang 5Nhảy theo kiểu có dấu
Trang 6Nhảy theo kiểu đơn
Trang 7Nhóm lệnh chuyển điều khiển(t.t)
Trang 8Lệnh JMP
• Dạng lệnh :
JMP shortlabel JMP mem16 JMP nearlabel JMP mem32 JMP farlabel JMP reg16
Trang 9mem16 : IP ← [địa chỉ +1,địa chỉ]
mem32 : CS ← [địa chỉ +3,địa chỉ+2]
IP ← [địa chỉ +1,địa chỉ]
Trang 10Lệnh JMP (t.t.)
• Lệnh nhảy đến nhãn ngắn shortlabel là lệnh
nhảy tương đối Nơi đến phải nằm trong phạm
vi từ -128 đến +127 so với vị trí của lệnh nhảy Toán hạng nguồn trong lệnh là số có dấu để
cộng thêm vào thanh ghi IP
• Ví dụ : JMP SHORT 18h
Trang 11Lệnh nhảy có điều kiện
• Dạng lệnh : Jcond shortlabel
• Giải thích : Nếu thỏa điều kiện thì nhảy,
ngược lại không làm gì cả (qua lệnh kế)
• Lệnh nhảy có điều kiện dùng trạng thái các cờ
để làm điều kiện
Trang 12Các lệnh nhảy có điều kiện
Trang 13Ví dụ
MOV CX,3 ; thực hiện một vòng lặp làm 3 lần
MOV AX,0 Nhan: ADD AX,12
DEC CX JNZ Nhan ; nhảy đến lệnh tại vị trí “Nhan” nếu CX ≠ 0 MOV [3000h],AX
Trang 14cờ
• Ví dụ :
CMP AL,8 ; AL - 8
CMP WORD PTR [1000h], 3 ; [1001h,1000h] - 3
Trang 15Lệnh LOOP
• Dạng lệnh: LOOP shortlabel
• Giải thích : giảm CX, lặp (nhảy) nếu CX ≠ 0
Lặp vòng không điều kiện với CX giữ số lần lặp
• Ví dụ:
MOV CX,3 MOV AX,0 Nhan: ADD AX,12
LOOP Nhan MOV [3000h],AX
Trang 16• Dạng lệnh:
LOOPE shortlabelLOOPZ shortlabel
• Giải thích: giảm CX, lặp vòng (nhảy) nếuCX≠0 và ZF = 1
Trang 17• Dạng lệnh:
LOOPNE shortlabelLOOPNZ shortlabel
• Giải thích: giảm CX, lặp vòng (nhảy) nếuCX≠0 và ZF = 0
Trang 18Lệnh JCXZ
• Dạng lệnh : JCXZ shortlabel
• Giải thích : Nếu CX = 0 thì nhảy
• Ví dụ: tìm vị trí xuất hiện giá trị 0 đầu tiêntrong mảng 100 byte ở địa chỉ DS:SI
Trang 19MOV CX,100 MOV DI,SI DEC DI
lap: INC DI
CMP byte ptr [DI],0 LOOPNE lap
JCXZ timthay
;xử lý không tìm thấy
;….
JMP ketthuc timthay: ;xử lý ….
;…
ketthuc:
Trang 20Lệnh lặp
Trang 23Cấu trúc If – Then
Trang 25Cấu trúc If – Then - Else
Trang 27Cấu trúc Case
Trang 29Cấu trúc lập For - Do
Trang 31Cấu trúc lặp While - Do
Trang 33Cấu trúc lặp Repeat - Until
Trang 35Bài tập
1 Viết đoạn chương trình hợp ngữ tìm giá trị
lớn nhất của 2 số 16 bit nằm trong 2 thanh ghi
AX, BX Kết quả lưu vào thanh ghi DX
BTVN 1 Viết đoạn chương trình hợp ngữ tìm giá trị
lớn nhất của 3 số 16 bit nằm trong 3 thanh ghi AX,BX,CX Kết quả chứa vào thanh ghi DX.
Trang 36Bài tập (t.t.)
2.Viết chương trình chương trình nhập vào một
ký tự, cho biết ký tự này là chữ hoa, chữ
thường hay không là chữ cái
3.Viết chương trình nhập vào một chuỗi các ký
tự, in ra màn hình chuỗi mới với các ký tự
thường đổi thành các ký tự hoa
Trang 38Ví dụ
• Viết chương trình con tìm max của 2 số 8bit
– Input: AL, AH chứa 2 giá trị 8bit cần tìm
– Output: DL =MAX(AH,AL)
• Giải thuật?
Trang 39ketthuc: RET
Trang 40Thử nghiệm CTC
.Model tiny
.Code
ORG 100h start: MOV AH,5
MOV AL,7 ; thử với AH=5, AL=7 CALL max ; gọi CTC Max
INT 20h ; ket thuc chuong trinh
; -chuong trinh con dat o