寄存器的基本结构

寄存器使用规则

上面说到,out和in寄存器组用来传递和接受参数,但实际上只有%o0-o5以及%i0-i5用来存放参数,六个以上的参数存放在栈中。那么%o6,%i6和%o7,%i7用来做什么呢,先来说o7和i7,调用者在执行CALL callee时,会把当前指令的地址存放在o7中,在被调用者执行完SAVE指令后,o7就变成了i7,此时执行RET指令便会跳转到刚才调用者执行调用的条指令的地址,这样就完成了函数的返回。
而o6和i6寄存器有些特殊o6又被称为sp(stack pointer),即栈指针,i6又被称为fp(frame pointer),即帧指针,sp指向栈顶,而fp指向栈帧的起始位置,当执行SAVE指令时,o6变为i6,sp的值传给了fp,而SAVE指令又同时会执行一次加法操作,将旧sp的值加上栈帧的长度赋给新sp,这样就完成了函数调用中栈帧的开辟。

栈帧的结构

下图便是栈帧的结构
注意图中被一片空白分成了上下两部分,上面的部分用sp+偏移量来访问,下面的部分用fp-偏移量来访问。为什么是sp+偏移量,fp-偏移量?因为栈是向着低地址增长的,所以在上图中,下面是高地址,上面是低地址。
注意最接近fp的一个部分,即addressable scalar automatics,这个的意思其实就是局部变量,函数中声明的变量存放于此处
上图为一个栈的内容的例子,注意local和in寄存器的值和栈中暂存的值并不相同,这是因为许多事件都会导致寄存器的值被冲进栈中,比如许多的系统调用

窗口上溢与下溢陷阱


原版地址(需翻墙):
https://cseweb.ucsd.edu/~gbournou/CSE131/sparcstack.html

Sparc架构中的栈与寄存器相关推荐

  1. SPARC架构下的反汇编(三)——SPARC汇编语言

    1.Load&Store Architecture (存取架构) SPARC架构只能对存储在寄存器中的数据执行运算(例如算术和逻辑功能).需要使用单独的指令将数据从存储器移至寄存器(Load) ...

  2. 理解S12(X)架构中的地址映射方案

    由于在暑假匆忙接收的嵌入式项目中需要使用特别大的数组,非分页RAM的内存不够用了,没办法,硬着头皮尝试使用分页RAM,但是完全没有单片机的基础,导致极其的困难.之前写程序都是按照纯软件的思维,主要考虑 ...

  3. ARM体系架构—ARMv7-A处理器模式及寄存器

    一.ARMv7-A处理器模式 ARMv7架构支持安全扩展,如果使能了安全扩展,ARMv7-A架构分为安全模式(Secure State)和非安全模式(Non-secure State)两个世界. 在非 ...

  4. ARM架构中MMU/TLB/Cache的一些概念和寄存器

    ★★★ 个人博客导读首页-点击此处 ★★★ 相关文章 1.ARMV8-aarch64的MMU学习笔记 2.aarch64的TCR寄存器介绍 文章目录 1.MMU/Cache相关的一些基本概念 (1). ...

  5. 汇编中浮点栈寄存器st0~st7浮点计算fld压栈再计算的过程运行原理

    目录 为什么浮点数不能用普通的数学指令计算 结论 用普通的数学计算add无法实现浮点数加法.必须使用浮点数计算指令fadd来进行浮点数加法计算. fpu的概念 浮点数计算需要先用fld指令压栈用fld ...

  6. SPARC架构下的反汇编(四)——SPARC汇编语言(二)

    1.函数栈桢(stack&frame) 函数调用时栈中分配的内存块. %fp :帧指针 %sp:栈指针 具体如图: 在IDA中,每个函数前面一部分是这样的: 函数中这样使用%fp和%sp 由上 ...

  7. SPARC架构下的反汇编(一)——SPARC简介

    1. 写作目的&个人水平 之前做过SPARC架构下的反汇编项目,但资料比较少,所以写一点笔记,结合已有的资料以及个人的经验以便于查阅.总体来说就是资料的阅读理解和实际操作的经验.因为水平有限, ...

  8. gdb相关(栈和寄存器)

    GDB的常用调试命令大家可以查阅gdb手册就可以快速的上手了,在这儿就不给大家分享了,需要的可以到GDB的官网去下载手册.这里重点分享下GDB调试中的一些寄存器和栈的相关知识用于解决下列gdb调试时的 ...

  9. 如何在微服务架构中实现安全性?

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者 | Chris Richardson 网络安全已成为每个企业都面临的关键问题.几乎每天都有 ...

最新文章

  1. jmeter使用问题——将接口返回变量存储成csv文件
  2. java reference详解_Java Reference详解
  3. 20天掌握C语言,C语言零基础到项目实战,玩转C语言
  4. java程序启动后就进行了7次younggc_程序员如何优化 Java GC
  5. 2011年最后一小时
  6. img标签过滤加fs模块实现图片文件缓存
  7. python tushare
  8. 博客日历的html代码,八种精美的博客日历代码
  9. INSERT INTO SELECT FROM 的用法
  10. JS获取今天是星期几
  11. JS Base64加密解密
  12. 十问业务中台和我的答案
  13. Linux下CGroup进行CPU、内存等资源控制
  14. vue项目实现前端预览word和pdf格式文件
  15. 抖音视频真的能赚到钱吗?抖音真的有带货力吗?国仁网络资讯
  16. GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis
  17. Excel日常遇到的问题整理(持续更新)
  18. java控制台打印输出 中文乱码 解决办法
  19. UI界面布局有哪些?
  20. 今天项目报错: No operations allowed after connection closed

热门文章

  1. android emulator 安装 google play
  2. 零基础入门 Vue3 | 附高清原图
  3. matlab 椭圆参数传递,用MATLAB绘图已知椭圆参数方程
  4. 货币汇率换算器隐私协议
  5. 在Vue中使用svg格式字体图标
  6. 「BJOI 2019」排兵布阵
  7. 关于 SVN状态图标不显示的问题(只显示绿色钩匹配) 的解决方法
  8. 疫情之下春运人口回流“硬核”预测:往返这些超级网络节点城市有更大感染风险
  9. Python学习(3)计算个人所得税
  10. 2020对口高考计算机专业分数线,2020高考分数线(分数线及一分一段表)