操作系统是怎么工作的——函数的堆栈框架/嵌入式代码

本文详细介绍了函数堆栈的工作原理,包括函数调用时的堆栈框架建立及撤除过程,并通过具体的汇编指令进行了说明。此外,还介绍了嵌入式汇编的基本格式及其使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.函数堆栈框架

1.1框架模型

image

call指令:

1)将eip中的下一条指令的地址A保存在栈顶;

2)设置eip指向被调用程序的代码处。

ret指令:将地址A恢复到eip中

这样就将函数的调用变为顺序执行的指令流。

1.2框架形成

image

初始堆栈

1)call xxx(函数),执行call时, cs : eip原来的值指向call下一条指令,该值被保存到栈顶,然后cs : eip的值,指向xxx的入口地址。

image

cs:eip被压栈

2)进入xxx

第一条指令: pushl %ebp

image

上级函数的基地址压栈

第二条指令: movl %esp, %ebp

image

在原来堆栈的地址空间,创建了新的函数调用堆栈

函数体中的常规操作,可能会压栈、出栈
3)退出xxx

movl %ebp,%esp

popl %ebp

image

执行此命令后ebp指向原来的地址

ret

 

image

cs:eip出栈

2.嵌入式汇编

2.1格式

asm(

汇编语句模板:

输出部分:

输入部分:

破坏格式描述部分);

即格式为asm(“statements”:Output_regs:input_regs:clobbered_regs);

注:

image

2.2例子

image

注:%1,%2指输入输出部分,第一个编号为0,第二个编号为1……,因此%1代表c(寄存器ecx),%(寄存器edx)

转载于:https://www.cnblogs.com/boyiliushui/p/5406060.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值