Win32ASM学习[17]:条件跳转
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?一.跳轉(zhuǎn)相關(guān)的標(biāo)志位:
| 溢 |
|
|
| 符 | 零 | 未 | 輔 | 未 | 奇 | 未 | 進 |
?條件碼:
①OF(Overflow Flag)溢出標(biāo)志。溢出時為1,否則置0。
②SF(Sign Flag)符號標(biāo)志。結(jié)果為負時置1,否則置0.
③ZF(Zero Flag)零標(biāo)志,運算結(jié)果為0時ZF位置1,否則置0.
④CF(Carry Flag)進位標(biāo)志,進位時置1,否則置0.
⑤AF(Auxiliary carry Flag)輔助進位標(biāo)志,記錄運算時第3位(半個字節(jié))產(chǎn)生的進位置。有進位時1,否則置0.
⑥PF(Parity Flag)奇偶標(biāo)志。結(jié)果操作數(shù)中1的個數(shù)為偶數(shù)時置1,否則置0.
控制標(biāo)志位:
⑦DF(Direction Flag)方向標(biāo)志,在串處理指令中控制信息的方向。
⑧IF(Interrupt Flag)中斷標(biāo)志。
⑨TF(Trap Flag)陷井標(biāo)志,單步中斷。
二.條件跳轉(zhuǎn)的分類
(1).標(biāo)志寄存器FR中有6個標(biāo)志是狀態(tài)的,它反映運算結(jié)果的情況。6個狀態(tài)中除AF半進位標(biāo)志外,其余5個標(biāo)志可以反映10種不同的條件
故單條件跳轉(zhuǎn)指令有10種
jc??????????????????????????????CF=1;則轉(zhuǎn)移
jnc????????????????????????????CF=0;則轉(zhuǎn)移??
?
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).無符號數(shù)條件跳轉(zhuǎn)指令
用于無符號數(shù)的條件跳轉(zhuǎn)指令如下
ja\jnbe?????????????????????大于則跳轉(zhuǎn)????????? ?>??? ?則轉(zhuǎn)移, CF?或 ZF = 0;
jae\jnb???????????????????? 大于等于則跳轉(zhuǎn)??? >=?? 則跳轉(zhuǎn),?? CF = 0;
jna\jbe???????????????????? 小于則跳轉(zhuǎn)????????? <???? ?則轉(zhuǎn)移,? CF?或 ZF = 0;
jb\jnae???????????????????? 小于等于則跳轉(zhuǎn)??? <=?? 則跳轉(zhuǎn),? CF = 1;
(3).帶符號數(shù)的比較
JG/JNLE?????????????????大于則跳???????????? >????? 則跳,??????? SF 或 OF 或 ZF = 0則跳?
JGE/JNL?????????????????大于等于則跳????? >=??? 則跳,??????? SF 或 OF = 0 則跳
JL/JNGE???????????????? 小于則跳?????????????<????? 則跳,??????? SF 或 OF = 1 則跳??
JLE/JNG???????????????? 小于等于則跳????? <=??? 則跳,??????? SF 或 OF 或 ZF = 1則跳
?
用帶符號數(shù)和無符號數(shù)的條件轉(zhuǎn)移指令時,必須嚴格加以區(qū)別,否則會得到錯誤的結(jié)果
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三.無條件跳轉(zhuǎn)
| 操作碼 | 偽碼指令 | 含義 |
| EB cb | JMP rel8 | 相對短跳轉(zhuǎn)(8位),使rel8處的代碼位下一條指令 |
| E9 cw | JMP rel16 | 相對跳轉(zhuǎn)(16位),使rel16處的代碼位下一條指令 |
| FF /4 | JMP r/m16 | 絕對跳轉(zhuǎn)(16位),下一指令地址在r/m16中給出 |
| FF /4 | JMP r/m32 | 絕對跳轉(zhuǎn)(32位),下一指令地址在r/m32中給出 |
| EA cb | JMP ptr16:16 | 遠距離絕對跳轉(zhuǎn), 下一指令地址在操作數(shù)中 |
| EA cb | JMP ptr16:32 | 遠距離絕對跳轉(zhuǎn), 下一指令地址在操作數(shù)中 |
| FF /5 | JMP m16:16 | 遠距離絕對跳轉(zhuǎn), 下一指令地址在內(nèi)存m16:16中 |
| FF /5 | JMP m16:32 | 遠距離絕對跳轉(zhuǎn), 下一指令地址在內(nèi)存m16:32中 |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?四.16位/32位尋址方式(fisheep譯 fisheep@sohu.com)
| 操作碼 | 偽碼指令 | 跳轉(zhuǎn)含義 | 跳轉(zhuǎn)類型 | 跳轉(zhuǎn)的條件(標(biāo)志位) | |
| 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 | 不是偶數(shù) | near | (PF=0) | |
| 0F 89 cw/cd | JNS rel16/32 | 非負數(shù) | 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 | 偶數(shù) | near | (PF=1) | |
| 0F 8A cw/cd | JPE rel16/32 | 偶數(shù) | near | (PF=1) | |
| 0F 8B cw/cd | JPO rel16/32 | 奇數(shù) | near | (PF=0) | |
| 0F 88 cw/cd | JS rel16/32 | 負數(shù) | near | (SF=1) | |
| 0F 84 cw/cd | JZ rel16/32 | 為零(等于) | near | (ZF=1) | |
注:一些指令操作數(shù)的含義說明:
rel8? ? ? 表示 8 位相對地址
rel16? ? 表示 16 位相對地址
rel16/32? 表示 16或32 位相對地址
r/m16? ? 表示16位寄存器
r/m32? ? 表示32位寄存器
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?另外有其他的? 在補充?? ^_^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Win32ASM学习[17]:条件跳转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腰椎磁共振多少钱啊?
- 下一篇: Win32ASM学习[19]:结构与联合