JCC学习

EIP存储的是指令地址
不能使用mov来修改EIP的值
使用jmp short(如果不超过128个字节就会加short)
jmp的作用是修改EIP(无条件修改)
jmp 寄存器/立即数
 
call指令:
        修改EIP
        push 返回地址(即call命令下一行指令的地址)(当前指令加当前指令的长度)
        
ret指令(ret指令和call指令是成对出现的)返回上一个call的下一个指令
pop eip=ret
 
cmp指令:(比较两个值)
cmp eax,ecx(其实是eax-ecx然后只改变标志寄存器)
当eax=ecx时zf为1
当sf=1时说明eax<ecx
cmp还可以使内存和寄存器比较(宽度要一样)
 
test指令:
在一定程度上和cmp指令类似,两个数值进行与操作,结果不保存,但是会改变响应标志位
常见用法:用这个指令,可以确定某寄存器是否等于0
test EAX,EAX          观察ZF位
如果EAX的二进制位中任意是1那么运算结果不为0
 
 
只看标志寄存器:
JE/JZ
结果为0则跳转(相等时跳转)
ZF=1
if(i==j);if(i==0)
JNE/JNZ
结果不为0则跳转(不相等时跳转)
ZF=0
if(i!=j);if(i!=0)
JS
结果为负则跳转
sf=1
if(i<0)
jns
结果不为负则跳
sf=0
if(i>0)
jp/jpe
结果中1的个数为偶则跳
PF=1
null
jnp/jpo
结果中1的个数为奇数则跳
PF=0
null
JO
若溢出则跳
OF=1
null
JNO
若无溢出则跳
OF=0
null
jcc是有选择的Jmp
 
posted @ 2021-07-25 21:04  无据  阅读(70)  评论(0编辑  收藏  举报