美文网首页
8086汇编三——AT&T栈帧-汇编C混编

8086汇编三——AT&T栈帧-汇编C混编

作者: Lovell_ | 来源:发表于2019-01-15 14:53 被阅读13次

什么叫栈帧?
就是函数的调用环境。bp和sp中间那一段就是函数调用环境。

8086相关的

在AT&T环境下栈帧是有点不一样的:

1、叶子函数不会开辟空间(即减rsp)给局部变量。
叶子函数 sp不减

叶子函数:sp往上走128个字节都是他的区域"red zone"红色区域,受保护的。

2、非叶子函数才会开辟空间。
image.png image.png
3、总结

为什么叶子函数不用做sp减的操作,来开辟一段受保护的空间?
——因为叶子函数,能保证不会再调用别的函数,能保证堆栈不会被其他函数破坏。所以可以随便往里面放东西。所以sp减不减都可以放东西。可叶子函数的sp为什么不上去呢?
——为性能考虑。

为性能考虑

上部分叶子函数sp不减;下部分非叶子函数sp减,减了后最后面还要加回去。所以sp不减性能上有优势,减少了两条指令

不要小看只少了这两条指令,有些函数调用非常频繁,时时刻刻都在调用,少两条指令,也能带来性能上很大的提升。

4、混编

4.1 单独汇编文件

image.png

4.2 嵌入汇编代码(内联汇编)

嵌入汇编,实际开发中没必要这么干。只是为了看懂有些框架里面嵌入了汇编。

5、AT&T和arm汇编不一样的地方只是在于寄存器和指令的名称,其他都差不多,暂时不去碰arm汇编,因为要设计到很多东西。

相关文章

  • 8086汇编三——AT&T栈帧-汇编C混编

    什么叫栈帧?就是函数的调用环境。bp和sp中间那一段就是函数调用环境。 在AT&T环境下栈帧是有点不一样的: 1、...

  • 8086汇编(18)栈帧

    栈帧 1、栈帧(Stack Frame Layout) 就是一个函数执行的环境 包括:参数、局部变量、返回地址等1...

  • 1.汇编初识

    汇编语言常见种类: 8086汇编 (8086处理器是16bit的CPU) Win32汇编 Win64汇编 AT&T...

  • 8086汇编二——AT&T了解

    学一门汇编,学好寄存器就差不多了。 CPU就是在寄存器和内存之间捣鼓数据。 16位寄存器:AX --> AH、AL...

  • 8086汇编二——栈帧-JCC

    在bp和sp之间的,叫做一个栈帧。该函数内部做的事。 写一两句C语言代码,脑海中就要有能映射出一张内存图。 FLA...

  • AT&T汇编-函数实例

    AT&T 基于x86架构处理器汇编指令一般有2种格式:Intel汇编和AT&T汇编,通过对8086汇编的学习包括对...

  • 汇编分析&编译器优化

    汇编的种类 8086汇编(8086处理器是16bit的CPU) Win32汇编 Win64汇编 ARM汇编(嵌入式...

  • 逆向 - arm64汇编 - 第一天

    1. 汇编语言种类 8086汇编(8086处理器是16bit的CPU)Win32汇编Win64汇编ARM汇编(嵌入...

  • 十七.AT&T汇编

    之前将的都是8086汇编,现在聊一聊AT&T汇编,基本都是相同的汇编就是使用寄存器存储数据和操作内存; ios基本...

  • AT&T汇编

    参考链接 Linux下的汇编 Linux 下用汇编语言编写的代码具有两种不同的形式。第一种是完全的汇编代码,指的是...

网友评论

      本文标题:8086汇编三——AT&T栈帧-汇编C混编

      本文链接:https://www.haomeiwen.com/subject/uepedqtx.html