JCC

跳地址

JMP

修改eip的值,让程序下一步执行JMP修改EIP的地址

格式:JMP 寄存器/立即数==MOV EIP,寄存器/立即数

注:只影响EIP

CALL

PUSH 地址B

MOV EIP,地址A/寄存器  ==CALL 地址A/寄存器

复制下一个地址,在修改EIP的值

eg:

运行

执行命令后,call下一个指令的地址入栈,ESP减四,EIP被修改

下一个指令地址算法:现地址+指令的字节数(如图有五个字节)

所以call下一个指令地址为004183D7

RETURN

JE、JZ

实质是看标志寄存器的Z位,Z位为1,就跳到相应的地址

 结果为零则跳转

格式:JE  地址

JNE,JNZ

 看标志寄存器的z位,z位为零,就跳转到相应的地址。

结果不为零则跳转

JS

实质是标志寄存器的s位,S位为1就跳转到相应的地址

 结果为负责跳转

JNS

S位为零,就跳转到相应地址

结果为非负则跳转

JP,JPE

P位为1,则跳转到相应地址

结果中1的个数为偶数则跳转

JNP,JPO

P位为零,则跳转到相应地址

结果中1的个数为奇数则跳转

JO

  O位为1,则跳转到相应地址

结果溢出则跳转

JNO

 O位为零,则跳转到相应地址

结果没有溢出则跳转

JB,JNAE

C位为1则跳转到相应地址

小于则跳转(无符号数)

JNB,JAE

C位为零,则跳转到相应地址

大于等于则跳转(无符号数)

JBE,JNA

C位为一或者z位为一

小于等于则跳转,(无符号数)

JNBE,JA

C位和z位都为零(无符号数)

大于则跳转

JL,JNGE

S位和o位不相等

 小于则跳转(有符号数)

JNL,JGE

S位和o位相等

大于等于则跳转(有符号数)

JLE,JNG

Z位=1 或者 s和o位不相等

小于等于则跳转(有符号数)

JNLE,JG

 Z位等于零,并且s和o位相等

大于则跳转(有符号数)

只改变标志寄存器

CMP

做减法运算,结果不保存,但改变标志寄存器里的值,其余不变

格式:CNP      R/M,R/M/IMM

①代码

运行时EAX,ECX值不变,P 和Z位改变。

③代码

一个寄存器直接与内存比较,只要宽度一样

用途:1)比较两个操作数是否相等———Z位

           2)第一位数是否比第二位数大———S位

TEST

  两个数值进行与操作,结果不保存,但是会改变相应标志位。

 

 

posted @ 2024-06-05 22:14  雨里青山隐  阅读(61)  评论(0编辑  收藏  举报