Posted on 2009-10-19 21:36
S.l.e!ep.¢% 阅读(400)
评论(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位寄存器