無條件轉移指令
JMP
條件轉移指令
JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、
JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、
JLE / JNLE、 JCXZ
循環指令
LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE
子程序調用和返回指令
CALL、RET
中斷與中斷返回指令
INT、INTO、IRETless
段內直接短轉移:JMP SHORT OPR
執行操做:(IP) ← (IP) + 8位位移量post
段內直接近轉移:JMP NEAR PTR OPR
執行操做:(IP) ← (IP) + 16位位移量測試
段內間接轉移: JMP WORD PTR OPR
執行操做: (IP) ← (EA)spa
段間直接遠轉移:JMP FAR PTR OPR
執行操做:(IP) ← OPR 的段內偏移地址
(CS) ← OPR 所在段的段地址3d
段間間接轉移: JMP DWORD PTR OPR
執行操做: (IP) ← (EA)
(CS) ← (EA+2)blog
3.條件轉移指令get
注意:只能使用段內直接尋址的8 位位移量it
格式 | 測試條件 | ||
JZ(JE) OPR | ZF=1 | jump if zero,or equaltable 結果爲零(或相等)則轉移date |
|
JNZ(JNE) OPR | ZF=0 | ||
JS OPR | SF=1 | jump if sign 結果爲負則轉移 |
|
JNS OPR | SF=0 | ||
JO OPR | OF=1 | jump if overflow 結果溢出則轉移 |
|
JNO OPR | OF=0 | ||
JP OPR | PF=1 | jump if parity,or parity even 奇偶爲爲1則轉移 |
|
JNP OPR | PF=0 | ||
JB(JNAE,JC) OPR | CF=1 | 低於below, 或者不高於或者等於not above or equal, 或進位爲1則轉移carry |
|
JNB(JAE,JNC) OPR | CF=0 |
* 適用於地址或雙精度數低位字的比較
格式 測試條件
< JB (JNAE,JC) OPR CF = 1 jump if below (not above or equal , carry)
≥ JNB (JAE,JNC) OPR CF = 0 jump if not below ( above or equal , not carry)
≤ JBE (JNA) OPR CF∨ZF = 1 jump if below or equal (not above)
> JNBE (JA) OPR CF∨ZF = 0 jump if not below or equal (above)
* 適用於帶符號數的比較
格式 測試條件
< JL (JNGE) OPR SF∀OF = 1 less, not greater or equal
≥ JNL (JGE) OPR SF∀OF = 0
≤ JLE (JNG) OPR (SF∀OF)∨ZF = 1 less or equal, not greater
> JNLE (JG) OPR (SF∀OF)∨ZF = 0
格式 測試條件
JCXZ OPR (CX)=0
注意:
* CX 中存放循環次數
* 只能使用段內直接尋址的8 位位移量
LOOP
LOOPZ / LOOPE
LOOPNZ / LOOPNE
執行步驟:
(1) (CX) ← (CX) - 1
(2) 檢查是否知足測試條件,
如知足則(IP) ← (IP) + 8位位移量,實行循環;
不知足則 IP 不變,退出循環。
循環指令:LOOP OPR
測試條件:(CX) ≠ 0
爲零或相等時循環指令:LOOPZ(LOOPE) OPR
測試條件:ZF=1 且 (CX) ≠ 0
不爲零或不相等時循環指令:LOOPNZ(LOOPNE) OPR
測試條件:ZF=0 且 (CX) ≠ 0
段內直接近調用:CALL DST
執行操做: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (IP) + 16位位移量
段內間接近調用:CALL DST
執行操做: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (EA)
段間直接遠調用:CALL DST
執行操做: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← 偏移地址
(CS) ← 段地址
段間間接遠調用:CALL DST
執行操做: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (EA)
(CS) ← (EA+2)
段內近返回:RET
執行操做: (IP) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
段內帶當即數近返回:RET EXP
段間遠返回:RET
執行操做: (IP) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
(CS) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
段間帶當即數遠返回:RET EXP
中斷例行程序的入口地址,存放於中斷向量區。
執行操做: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (FLAGS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (TYPE*4)
(CS) ← (TYPE*4+2)
執行操做: 若OF=1,(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (FLAGS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (10H)
(CS) ← (12H)
執行操做: (IP) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
(CS) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
(FLAGS) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
注意:
* TYPE (0~255) 是中斷類型號, 隱含的類型號爲3
* INT 指令還把 IF 和 TF 置0,但不影響其它標誌位
* IRET 指令執行完,標誌位由堆棧中取出的值肯定