03_x86汇编指令二(push,pop,call,ret)
2020-06-06 07:41
92 查看
举例这些指令做了什么
1.push指令
- pushl %eax
将eax数值压入栈中,可分解为: - subl $4, %esp ——> esp = esp - 4
- movl %eax, (%esp) ——> *(int32_t *)esp = eax
2.popl指令
- pop %eax
将eax数值弹出栈,可分解为: - movl (%esp), %eax ——> eax = *(int32_t *)esp
- addl $4, %esp ——> esp = esp + 4
3.call指令
- call 0x12345
调用0x12345这个地址,可分解为: - pushl %eip ——> 将cpu下一条要执行的指令压入栈中
- movl $0x12345, %eip ——> eip = 0x12345
注意:CPU下一条指令将会从地址0x12345中取。
4.ret指令
- ret
返回call之前的地址,可分解为: - popl %eip ——> 将call压入栈的指令弹出赋给eip
相关文章推荐
- Push, Pop, call, leave 和 Ret 指令图解
- Push, Pop, call, leave 和 Ret 指令图解
- 查找pop pop ret call dword ptr [esp+nn]指令的方法
- 汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程
- call 和 ret 指令
- call、ret、retf 指令详解
- [置顶] 4000 2017-11-15 深刻理解堆栈及PUSH POP指令
- PUSHA/PUSHAD POPA/POPAD 指令详解
- PUSH、POP和XCHG指令
- push、pop指令
- 第十章 Call 和 Ret 指令
- push、pop指令
- 基于8086CPU微处理器的汇编学习之PUSH、POP指令
- push、pop指令
- 8086汇编语言自学经验分享 push,pop指令执行时,sp怎么变
- 汇编语言王爽第六部分(数据传输指令,mov,push,pop,pushf,popf)
- push、pop指令
- push、pop指令
- 跳转指令 jmp、call、ret、retf
- push、pop指令