本文主要是介绍汇编基础-JMP,CALL,JCC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
汇编基础-JMP,JCC
JMP指令
JMP指令:修改EIP的值
JMP指令只影响
了EIP,不影响堆栈和其它通用寄存器
JMP 寄存器/立即数 相当于 MOV EIP,寄存器/立即数
CALL指令
CALL指令和JMP指令都会修改EIP的值
但CALL指令会将返回地址(CALL指令的下一条指令地址)压入堆栈
因此也会引起esp的变化
RET指令
call调用跳转后执行完相关代码完要返回到call的下一条指令时使用ret指令
ret指令相当于pop eip(但是不能这么写)
CMP指令
指令格式:CMP R/M,R/M/IMM
CMP指令只改变标志寄存器的值
该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结果并不保存到第一个操作数中
只是根据相减的结果来改变ZF零标志位
的,当两个操作数相等的时候,零标志位置1;
当第一个数小于第二个数时,SF标志位
置1.
TEST指令
指令格式:TEST R/M,R/M/IMM
该指令在一定程度上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位
可以看到只要有任一操作数为0时,结果就为0
常见用法:用这个指令,可以确定某寄存器是否等于0
只有当eax=0时 eax and eax才会是0
所以
TEST EAX,EAX
观察ZF(零标志位)就可以判断EAX是否为0
JCC指令
根本上是否跳转是由各标志寄存器决定的,为了帮助理解,可以看做是根据两个操作数做cmp运算的结果来跳转。
这篇关于汇编基础-JMP,CALL,JCC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!