-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?一.跳轉相關的標志位:
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
OF | DF | IF | TF | SF | ZF |
| AF |
| PF |
| CF |
溢 |
|
|
| 符 | 零 | 未 | 輔 | 未 | 奇 | 未 | 進 |
?條件碼:
①OF(Overflow Flag)溢出標志。溢出時為1,否則置0。
②SF(Sign Flag)符號標志。結果為負時置1,否則置0.
③ZF(Zero Flag)零標志,運算結果為0時ZF位置1,否則置0.
④CF(Carry Flag)進位標志,進位時置1,否則置0.
⑤AF(Auxiliary carry Flag)輔助進位標志,記錄運算時第3位(半個字節)產生的進位置。有進位時1,否則置0.
⑥PF(Parity Flag)奇偶標志。結果操作數中1的個數為偶數時置1,否則置0.
控制標志位:
⑦DF(Direction Flag)方向標志,在串處理指令中控制信息的方向。
⑧IF(Interrupt Flag)中斷標志。
⑨TF(Trap Flag)陷井標志,單步中斷。
二.條件跳轉的分類
(1).標志寄存器FR中有6個標志是狀態的,它反映運算結果的情況。6個狀態中除AF半進位標志外,其余5個標志可以反映10種不同的條件
故單條件跳轉指令有10種
jc??????????????????????????????CF=1;則轉移
jnc????????????????????????????CF=0;則轉移??
?
je\jz??????????????????????????ZF=1;jmp
jne\jnz??????????????????????ZF=0;jmp
?
js????????????????????????????? SF=1;jmp???????????
jns????????????????????????????SF=0;jmp
?
jo?????????????????????????????OF=1;jmp
jno???????????????????????????OF=0;jmp
?
jp\jpe???????????????????????PF=1;jmp
jnp\jpo???????????????????? PF=0;jmp
(2).無符號數條件跳轉指令
用于無符號數的條件跳轉指令如下
ja\jnbe?????????????????????大于則跳轉????????? ?>??? ?則轉移, CF?或 ZF = 0;
jae\jnb???????????????????? 大于等于則跳轉??? >=?? 則跳轉,?? CF = 0;
jna\jbe???????????????????? 小于則跳轉????????? <???? ?則轉移,? CF?或 ZF = 0;
jb\jnae???????????????????? 小于等于則跳轉??? <=?? 則跳轉,? CF = 1;
(3).帶符號數的比較
JG/JNLE?????????????????大于則跳???????????? >????? 則跳,??????? SF 或 OF 或 ZF = 0則跳?
JGE/JNL?????????????????大于等于則跳????? >=??? 則跳,??????? SF 或 OF = 0 則跳
JL/JNGE???????????????? 小于則跳?????????????<????? 則跳,??????? SF 或 OF = 1 則跳??
JLE/JNG???????????????? 小于等于則跳????? <=??? 則跳,??????? SF 或 OF 或 ZF = 1則跳
?
用帶符號數和無符號數的條件轉移指令時,必須嚴格加以區別,否則會得到錯誤的結果
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三.無條件跳轉
操作碼 | 偽碼指令 | 含義 |
EB cb | JMP rel8 | 相對短跳轉(8位),使rel8處的代碼位下一條指令 |
E9 cw | JMP rel16 | 相對跳轉(16位),使rel16處的代碼位下一條指令 |
FF /4 | JMP r/m16 | 絕對跳轉(16位),下一指令地址在r/m16中給出 |
FF /4 | JMP r/m32 | 絕對跳轉(32位),下一指令地址在r/m32中給出 |
EA cb | JMP ptr16:16 | 遠距離絕對跳轉, 下一指令地址在操作數中 |
EA cb | JMP ptr16:32 | 遠距離絕對跳轉, 下一指令地址在操作數中 |
FF /5 | JMP m16:16 | 遠距離絕對跳轉, 下一指令地址在內存m16:16中 |
FF /5 | JMP m16:32 | 遠距離絕對跳轉, 下一指令地址在內存m16:32中 |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?四.16位/32位尋址方式(fisheep譯 fisheep@sohu.com)
操作碼 | 偽碼指令 | 跳轉含義 | 跳轉類型 | 跳轉的條件(標志位) | |
0F 87 cw/cd | JA rel16/32 | 大于 | near | (CF=0 and ZF=0) | |
0F 83 cw/cd | JAE rel16/32 | 大于等于 | near | (CF=0) | |
0F 82 cw/cd | JB rel16/32 | 小于 | near | (CF=1) | |
0F 86 cw/cd | JBE rel16/32 | 小于等于 | near | (CF=1 or ZF=1) | |
0F 82 cw/cd | JC rel16/32 | 進位 | near | (CF=1) | |
0F 84 cw/cd | JE rel16/32 | 等于 | near | (ZF=1) | |
0F 84 cw/cd | JZ rel16/32 | 為0 | near | (ZF=1) | |
0F 8F cw/cd | JG rel16/32 | 大于 | near | (ZF=0 and SF=OF) | |
0F 8D cw/cd | JGE rel16/32 | 大于等于 | near | (SF=OF) | |
0F 8C cw/cd | JL rel16/32 | 小于 | near | (SF<>OF) | |
0F 8E cw/cd | JLE rel16/32 | 小于等于 | near | (ZF=1 or SF<>OF) | |
0F 86 cw/cd | JNA rel16/32 | 不大于 | near | (CF=1 or ZF=1) | |
0F 82 cw/cd | JNAE rel16/32 | 不大于等于 | near | (CF=1) | |
0F 83 cw/cd | JNB rel16/32 | 不小于 | near | (CF=0) | |
0F 87 cw/cd | JNBE rel16/32 | 不小于等于 | near | (CF=0 and ZF=0) | |
0F 83 cw/cd | JNC rel16/32 | 不進位 | near | (CF=0) | |
0F 85 cw/cd | JNE rel16/32 | 不等于 | near | (ZF=0) | |
0F 8E cw/cd | JNG rel16/32 | 不大于 | near | (ZF=1 or SF<>OF) | |
0F 8C cw/cd | JNGE rel16/32 | 不大于等于 | near | (SF<>OF) | |
0F 8D cw/cd | JNL rel16/32 | 不小于 | near | (SF=OF) | |
0F 8F cw/cd | JNLE rel16/32 | 不小于等于 | near | (ZF=0 and SF=OF) | |
0F 81 cw/cd | JNO rel16/32 | 未溢出 | near | (OF=0) | |
0F 8B cw/cd | JNP rel16/32 | 不是偶數 | near | (PF=0) | |
0F 89 cw/cd | JNS rel16/32 | 非負數 | near | (SF=0) | |
0F 85 cw/cd | JNZ rel16/32 | 非零(不等于) | near | (ZF=0) | |
0F 80 cw/cd | JO rel16/32 | 溢出 | near | (OF=1) | |
0F 8A cw/cd | JP rel16/32 | 偶數 | near | (PF=1) | |
0F 8A cw/cd | JPE rel16/32 | 偶數 | near | (PF=1) | |
0F 8B cw/cd | JPO rel16/32 | 奇數 | near | (PF=0) | |
0F 88 cw/cd | JS rel16/32 | 負數 | near | (SF=1) | |
0F 84 cw/cd | JZ rel16/32 | 為零(等于) | near | (ZF=1) |
注:一些指令操作數的含義說明:
rel8? ? ? 表示 8 位相對地址
rel16? ? 表示 16 位相對地址
rel16/32? 表示 16或32 位相對地址
r/m16? ? 表示16位寄存器
r/m32? ? 表示32位寄存器
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?另外有其他的? 在補充?? ^_^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
?
?
?