JCC

JCC

EIP的值决定cpu即将执行的指令

JMP指令

JMP指令

直接修改EIP

MOV EIP,R/IMM
;以上指令功能由JMP表示为
JMP R/IMM

CALL指令

跳转前将下一指令的地址压入栈

PUSH M1
MOV EIP,M2/R
;以上指令功能由CALL表示为
CALL M2/R

RET指令

与CALL指令相匹配,将EIP修改为栈顶所存地址

LEA ESP,[ESP+4]
MOV EIP,[ESP-4]
;简写为
RET

比较指令

CMP指令

该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中

只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1

格式:

CMP R/M,R/M/IMM	;数据宽度相同,两边不同时为内存

例:

MOV EAX,0x100
MOV ECX,0x100
CMP EAX,ECX	;观察Z位

MOV EAX,0x100
MOV ECX,0x200
CMP EAX,ECX	;观察S位,不相同时根据S位判断大小关系

TEST指令

该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位

常用来确定某个寄存器是否等于0

格式:

TEST R/M,R/M/IMM

例:

TEST EAX,EAX	;观察Z位

JCC

序号 指令 描述 英文原意 标志
1 JE
JZ
结果为零则跳转(相等时跳转) jump if zero
jump if equal
ZF=1
2 JNE
JNZ
结果不为零则跳转(不相等时跳转) jump if not zero
jump if not equal
ZF=0
3 JS 结果为负则跳转 jump if sign SF=1
4 JNS 结果为非负则跳转 jump if not sign SF=0
5 JP
JPE
结果中1的个数为偶数则跳转 jump if parity(even) PF=1
6 JNP
JPO
结果中1的个数为奇数则跳转 jump if not parity(odd) PF=1
7 JO 结果溢出了则跳转 jump if overflow OF=1
8 JNO 结果没有溢出则跳转 jump if not overflow OF=0
9 JC
JB
JNAE
小于则跳转(无符号数) jump if carry
jump if below
jump if not above equal
CF=1
10 JNC
JNB
JAE
大于等于则跳转(无符号数) jump if not carry
jump if not below
jump if above equal
CF=0
11 JBE
JNA
小于等于则跳转(无符号数) jump if below equal
jump if not above
CF=1 or ZF=1
12 JNBE
JA
大于则跳转(无符号数) jump if not below equal
jump if above
CF=0 and ZF=0
13 JL
JNGE
小于则跳转(有符号数) jump if less
jump if not greater equal
SF≠OF
14 JNL
JGE
大于等于则跳转(有符号数) jump if not less
jump if greater equal
SF=OF
15 JLE
JNG
小于等于则跳转(有符号数) jump if less equal
jump if not greater
ZF=1 or SF≠OF
16 JNLE
JG
大于则跳转(有符号数) jump if not less equal
jump if greater
ZF=0 and SF=OF
posted @ 2021-08-02 16:39  Ybitsec  阅读(485)  评论(0编辑  收藏  举报