Nhómlệnh chuyển điều khiển
• Lệnh nhảy không điều kiện
JMP
• Lệnh nhảy có điều kiện
JB / JNAE JL / JNGE
JBE / JNA JLE / JNG
JA / JNBE JG / JNLE
JAE / JNB JLE / JNL
JE/ JZ JNE/ JNZ
40 trang |
Chia sẻ: longpd | Lượt xem: 2424 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Kiến trúc máy tính phần ii hợp ngữ - chương 7 nhóm lệnh chuyển điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 7
NHÓM LỆNH CHUYỂN ĐiỀU
KHIỂN
Nhóm lệnh chuyển điều khiển
• Lệnh nhảy không điều kiện
JMP
• Lệnh nhảy có điều kiện
JB / JNAE JL / JNGE
JBE / JNA JLE / JNG
JA / JNBE JG / JNLE
JAE / JNB JLE / JNL
JE/ JZ JNE/ JNZ
Số
không
dấu
Số
có
dấu
Nhảy theo kiểu không dấu
Nhảy theo kiểu có dấu
Nhảy theo kiểu đơn
Nhóm lệnh chuyển điều khiển(t.t)
• Lệnh so sánh
CMP
• Lệnh lặp
LOOP
• Các lệnh khác
JP/JNP, JS/JNS, JO/JNO
JC / JNC, JZ/ JNZ
JCXZ
Lệnh JMP
• Dạng lệnh :
JMP shortlabel JMP mem16
JMP nearlabel JMP mem32
JMP farlabel JMP reg16
• Giải thích :
shortlabel : IP ← IP + độ dời
nearlabel : IP ← địa chỉ
farlabel : CS ← địa chỉ segment
IP ← địa chỉ offset
Lệnh JMP (t.t.)
• Dạng lệnh :
JMP shortlabel JMP mem16
JMP nearlabel JMP mem32
JMP farlabel JMP reg16
• Giải thích :
reg16 : IP ← reg16
mem16 : IP ← [địa chỉ +1,địa chỉ]
mem32 : CS ← [địa chỉ +3,địa chỉ+2]
IP ← [địa chỉ +1,địa chỉ]
Lệ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
JMP 0F008h
JMP DWORD PTR [3000h]
Lệ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
Các lệnh nhảy có điều kiện
Ví 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
Lệnh CMP
• Dạng lệnh :
CMP reg,reg CMP reg,immed
CMP mem,reg CMP mem,immed
CMP reg,mem CMP accum,immed
• Giải thích : phép so sánh thực hiện bằng cách trừ
toán hạng đích cho toán hạng nguồn, không lưu lại
kết quả mà chỉ giữ lại tác động của phép trừ lên các
cờ.
• Ví dụ :
CMP AL,8 ; AL - 8
CMP WORD PTR [1000h], 3 ; [1001h,1000h] - 3
Lệ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
LOOPE/LOOPZ
• Dạng lệnh:
LOOPE shortlabel
LOOPZ shortlabel
• Giải thích: giảm CX, lặp vòng (nhảy) nếu
CX≠0 và ZF = 1
LOOPNE/LOOPNZ
• Dạng lệnh:
LOOPNE shortlabel
LOOPNZ shortlabel
• Giải thích: giảm CX, lặp vòng (nhảy) nếu
CX≠0 và ZF = 0
Lệ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ên
trong mảng 100 byte ở địa chỉ DS:SI
MOV 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:
Lệnh lặp
Cấu trúc tuần tự
• Cú pháp:
– Lệnh 1
– Lệnh 2
– ……
– Lệnh n
Cấu trúc If – Then
Cấu trúc If – Then - Else
Cấu trúc Case
Cấu trúc lập For - Do
Cấu trúc lặp While - Do
Cấu trúc lặp Repeat - Until
Bà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.
Bà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.
Chương trình con
tên_CTC PROC
;thân chương trình con
;…
RET
tên_CTC ENDP
Gọi chương trình con:
CALL tên_CTC
Ví 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?
MAX PROC
CMP AH,AL
JA lon_hon
;den duoc day co nghia AH <=AL
MOV DL,AL
JMP ketthuc
lon_hon: MOV DL,AH
ketthuc: RET
MAX ENDP
Thử 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 day-----------------
Max PROC
;code cua chuong trinh con Max
; …..
Max ENDP
END start