ARM处理器的堆栈和函数调用,以及与Sparc的比较

主要内容来自以下网址。该网站是个学习ARM汇编的好地方。计划将该篇文章翻译过来,并和Sparc对比。

https://azeria-labs.com/functions-and-the-stack-part-7/

ARM和Sparc比较

之前整理的Sparc的原理,Sparc V8 汇编指令、寄存器窗口、堆栈、函数调用https://www.cnblogs.com/yanhc/p/12255886.html

关于函数调用的跳转执行

ARM跳转有BL指令,Branch Link(Saves (PC+4) in LR and jumps to function),即首先将跳转指令的下一条指令地址保存在LR寄存器中,以便调用函数返回时能找到返回地址,然后执行跳转。

对于Sparc处理器,在执行call label时,会将PC拷贝到o7(r15,address of call instruction),call指令本身叫call and link,其中link与ARM中BL的link是一个意思,即保存一个调用函数的链接。不同的是ARM保存的是跳转指令的下一条指令地址,Sparc保存的是跳转指令地址,这没关系,对于Sparc来说,只需在返回的时候+4即可得到下一条要执行的地址,即返回的地址。

关于函数调用时的frame pointer,fp保存

对于ARM,r11为fp。在调用callee函数中,会

(1)将fp和lr压入堆栈push {r11, lr},

(2)让fp=sp,add r11, sp, #0,

(3)sp减去栈帧长度,sub sp, sp, #16。

对于Sparc,fp=i6,sp=o6。在调用callee函数中,执行save %sp, -1024, %sp时,寄存器窗口会旋转,从而做了

(1)将fp和lr压入堆栈(当前未使用的寄存器窗口发挥了部分堆栈的作用),

(2)让fp=sp(fp=i6,sp=o6,以及寄存器窗口旋转方向,完成了fp=sp操作),

(3)sp减去栈帧长度(save有add的作用)。

原文地址:https://www.cnblogs.com/yanhc/p/12628421.html

时间: 2024-10-17 23:02:48

ARM处理器的堆栈和函数调用,以及与Sparc的比较的相关文章

ARM处理器的寄存器,ARM与Thumb状态,7中运行模式

** ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 分类: 嵌入式 ARM处理器工作模式一共有 7 种 : USR  模式    正常用户模式,程序正常执行模式 FIQ模式(Fast Interrupt Request)     处理快速中断,支持高速数据传送或通道处理 IRQ模式     处理普通中断 SVC模式(Supervisor)     操作系统保护模式,处理软件中断swi  reset ABT  中止(Abort mode){数据.指令}    处理存储器故障.实现虚拟

ARM处理器寄存器

参考:ARM Architecture Reference Manual的39页 1.ARM处理器寄存器纵览 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器(R13和R13_svc不是同一个寄存器),6个为状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式.但在任何时候,通用寄存器R14-R0.程序计数器PC.一个状态寄存器都是可访问的. 1.1.通用寄存器     R0-R15     R13_svc.R14_svc

[国嵌笔记][021-022][ARM处理器工作模式]

[ARM处理器工作模式] 处理器工作模式 1.User(urs):用户模式,linux应用程序运行在用户模式 2.FIQ(fiq):快速中断模式 3.IRQ(irq):中断模式 4.Supervisor(svc):系统保护模式,linux内核运行在系统保护模式 5.Abort(abt):异常模式 6.Undefined(und):未定义指令模式 7.System(sys):系统模式 [ARM寄存器详解] ARM寄存器(37个) 通用寄存器(31个) 1.未分组通用寄存器(R0-R7) 2.分组通

[基于Android的ARM汇编语言系列]之四:ARM处理器的寻址方式

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 处理器的寻址方式是通过指令给出的地址码字段来寻找真实操作数地址的方式,ARM处理器支持9中寻址方式. 一 立即寻址 立即寻址指令后面的地址码部分为立即数(常量或常数),立即寻址多用于给寄存器赋值. 举例 MOV RO, #1234 指令执行后,R0=1234. 二 寄存器寻址 寄存器寻址中,操作数在寄存

[ARM] ARM处理器寻址方式

ARM处理器寻址方式 寻址方式是处理器根据指令给出的地址码字段来寻找物理地址的方式. 1.立即寻址 立即寻址也称为立即数据寻址,在立即寻址中的操作码字段后面的地址码部分就是操作数据本身,在数据包含在指令当中,取出指令就取出了立即数. ADD     R0,R0,#1 MOV    R0,#0X3FF 2.寄存器寻址 在寄存器寻址中,操作数的值在寄存器中,就是利用指令中的地址码字段指出的寄存器中的数值作为操作数,指令执行时直接取出寄存器值操作,这种寻址方式是各类微处理器经常采用的一种方式,也是一种

ARM处理器工作模式

++++++++++++++++++++++++++++++++++++++++++ 本文转载自mr_raptor的专栏,感谢mr_raptor大神. http://blog.csdn.net/mr_raptor/article/details/6556157 ++++++++++++++++++++++++++++++++++++++++++ 1.1 ARM处理器工作模式 CPU的模式可以简单的理解为当前CPU的工作状态,比如:当前操作系统正在执行用户程序,那么当前CPU工作在用户模式,这时网

基于ARM处理器的反汇编器软件简单设计及实现

写在前面 2012年写的,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性进行验证,对那些直接与CPU 相关的目标代码进行安全性分析: 涉及的主要内容 分析ARM处理器指令的特点,以及编译以后可执行的二进制文件代码的特征: 将二进制机器代码经过指令和数据分开模块的加工处理: 分解标识出指令代码和数据代码: 然后将指令代码反汇编并加工成易于阅读的汇编指令形式的文件: 下面给出个示例

ARM处理器的7种处理器模式

ARM处理器和51单片机不同,arm处理器有不同的模式,而单片机只有一种模式,这也说明了arm处理器的功能要比51单片机的功能要强大的多. arm处理器的7种模式分别是: 用户模式(usr).系统模式(sys).快速中断模式(fiq).中断模式(irq).中止模式(abt).未定义指令模式(und).管理模式(svc) 上述的7中处理器模式中,还可分类为特权模式,异常模式. 特权模式:除了用户模式之外的所有模式都是特权模式.在其他模式下都可以修改模式位来切换至不同的模式,而用户模式下不允许修改模

DSP处理器和ARM处理器的区别以及各自应用在那些领域

由于工作经常接触到各种多核的处理器,如TI的达芬奇系列芯片拥有1个DSP核3个ARM核.那么DSP处理器和ARM处理器各自有什么区别,各自适合那些领域? DSP:digital signal processor数字信号处理器,也指digital signal process数字信号处理,有自己指令集.DSP处理器的特点如下: 有专门的的硬件乘法器,能进行大量的乘法操作,与通用的MCU处理器不同,通用的MCU在执行乘法操作时是通过软件编程的方式的来实现的,通常需要几十甚至上百个时钟周期,而DSP处