DIV nguồn (Unsigned Divide)
2.3.5. Nhóm lệnh rẽ nhánh (nhảy), lặp
Việc sử dụng nhóm các lệnh nhảy có thể làm thay đổi tính tuần tự của các câu lệnh hợp ngữ.
Lệnh nhảy không điều kiện
JMP Nhãn (Uncondition Jump to Specified Destination) Nhảy (vơ điều kiện) đến đích Nhãn
Lệnh mới bắt đầu tại địa chỉ ứng với nhãn 'Nhãn'. Lệnh Jmp có thể nhảy lên (về phía địa chỉ thấp) hoặc nhảy xuống (về phía địa chỉ cao) và có thể nhảy xa được tối đa 1/2 đoạn (64Kbyte)
Lệnh này khơng tác động đến các cờ.
Lệnh nhảy có điều kiện (nhảy khi thoả mãn một số điều kiện)
Toán hạng CF ZF
đích = gốc 0 1 đích > gốc 0 0 đích < gốc 1 0
Nhắc lại một số từ tiếng Anh
A: Above (trên) Z: Zero (không) S: Signed
B: Below (dưới) G: Greater (lớn hơn) PO: Parity Old N: Not (phủ định – không) L: Less (nhỏ hơn) PE: Parity Even
E: Equal (bằng) P: Parity C: Carry (nhớ)
O: Overflow
JA/JNBE (CF+ZF = 0, so sánh không dấu) JAE/JNB/JNC (CF = 0, so sánh không dấu) JB/JC/JNAE (CF = 1, so sánh không dấu) JCXZ (CX = 0, không so sánh) JE/JZ (ZF = 1, so sánh không dấu )
JG/JNLE ((SF⊕OF)+ZF = 0, so sánh có dấu ) JGE/JNL ((SF⊕OF) = 0, so sánh có dấu ) JL/JNGE ((SF⊕OF) = 1, so sánh có dấu ) JLE/JNG ((SF⊕OF)+ZF = 1, so sánh có dấu ) JNE/JNZ (ZF = 0, so sánh khơng dấu )
JNO (OF = 0) JNP/JPO (PF = 0) JNS (SF = 0) JO (OF = 1) JP/JPE (PE = 1) JS (SF = 1)
(Chú ý: Các lệnh nhảy trên không tác động đến các cờ)
Các lệnh lặp
LOOP NHAN (Jump to Specified Label if CX<>0 after autodecrement)
Lặp lại đoạn chương trình do NHAN chỉ ra cho đến khi CX=0. Lệnh này dùng để thực hiện lặp lại đoạn chương trình trong khoảng từ NHAN đến hết lệnh LOOP NHAN cho đến khi số lần lặp CX=0. Số lần lặp CX phải được nạp sẵn từ trước. Sau mỗi lần thực hiện lệnh LOOP NHAN thì CX tự động giảm 1 (CX <= CX-1).
Lệnh này không tác động đến các cờ.
LOOPE/LOOPZ NHAN (Loop while CX<>0 and ZF=1)
Lệnh thực hiện lặp đoạn chương trình do NHAN chỉ ra cho đến khi CX=0 hoặc ZF=0. Số lần lặp CX phải được nạp từ trước. Sau mỗi lần lặp thì CX tự động giảm 1 (CX <= CX- 1).
Lệnh này không tác động đến các cờ.
LOOPNE/LOOPNZ NHAN (Loop while CX<>0 and ZF=0)
Lệnh thực hiện lặp đoạn chương trình do NHAN chỉ ra cho đến khi CX=0 hoặc ZF=1. Số lần lặp CX phải được nạp từ trước. Sau mỗi lần lặp thì CX tự động giảm 1 (CX <= CX- 1).
Lệnh này không tác động đến các cờ.
Thực hiện lặp lại lệnh đứng sau đó cho đến khi CX=0. Đây là ‘tiếp đầu ngữ’ dùng để viết trước các lệnh thao tác với chuỗi mà ta muốn lặp lại một số lần. Số lần lặp CX phải được nạp từ trước. Sau mỗi lần lặp thì CX tự động giảm 1 (CX <= CX-1).
REPE/REPZ (Repeat string instruction until CX=0 or ZF=0)
Lặp lại lệnh viết sau đó cho đến khi CX=0 hoặc ZF=0
REPNE/REPNZ (Repeat string instruction until CX=0 or ZF=1)
Lặp lại lệnh viết sau đó cho đến khi CX=0 hoặc ZF=1