Posted on 2009-10-19 21:36
S.l.e!ep.¢% 閱讀(409)
評論(0) 編輯 收藏 引用 所屬分類:
Crack
第2章 基礎知識
第三節 8088 匯編跳轉
一、狀態寄存器
PSW(Program Flag)程序狀態字寄存器,是一個16位寄存器,由條件碼標志(flag)和控制標志構成,如下所示:
15
|
14
|
13
|
12
|
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)陷井標志。
二、 直接標志轉移(8位尋址)
指令格式
|
機器碼
|
測試條件
|
如...則轉移
|
|
指令格式
|
機器碼
|
測試條件
|
如...則轉移
|
JC
|
72
|
C=1
|
有進位
|
JNS
|
79
|
S=0
|
正號
|
JNC
|
73
|
C=0
|
無進位
|
JO
|
70
|
O=1
|
有溢出
|
JZ/JE
|
74
|
Z=1
|
零/等于
|
JNO
|
71
|
O=0
|
無溢出
|
JNZ/JNE
|
75
|
Z=0
|
不為零/不等于
|
JP/JPE
|
7A
|
P=1
|
奇偶位為偶
|
JS
|
78
|
S=1
|
負號
|
JNP/IPO
|
7B
|
P=0
|
奇偶位為奇
|
三、間接標志轉移(8位尋址)
指令格式
|
機器碼
|
測試格式
|
如...則轉移
|
JA/JNBE(比較無符號數)
|
77
|
C或Z=0
|
> 高于/不低于或等于
|
JAE/JNB(比較無符號數)
|
73
|
C=0
|
>= 高于或等于/不低于
|
JB/JNAE(比較無符號數)
|
72
|
C=1
|
< 低于/不高于或等于
|
JBE/JNA(比較無符號數)
|
76
|
C或Z=1
|
<= 低于或等于/不高于
|
JG/JNLE(比較帶符號數)
|
7F
|
(S異或O)或Z=0
|
> 大于/不小于或等于
|
JGE/JNL(比較帶符號數)
|
7D
|
S異或O=0
|
>= 大于或等于/不小于
|
JL/JNGE(比較帶符號數)
|
7C
|
S異或O=1
|
< 小于/不大于或等于
|
JLE/JNG(比較帶符號數)
|
7E
|
(S異或O)或Z=1
|
<= 小于或等于/不大于
|
四、無條件轉移指令
(fisheep譯 fisheep@sohu.com)
操作碼
|
偽碼指令
|
含義
|
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位寄存器