ARM 体系结构与汇编语言

这篇具有很好参考价值的文章主要介绍了ARM 体系结构与汇编语言。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RISC 指令集相对于 CISC 指令集,具有以下特点:

  • Load/Store 架构,CPU 不能直接处理内存中的数据,需要先将内存中的数据加载到寄存器中才能操作,然后将处理结果存储到内存中。
  • 固定的指令长度、单周期指令。
  • 倾向于使用更多的寄存器来存储数据,而不是使用内存中的堆栈、效率更高。

ARM 指令集和原汁原味的 RISC 相比,具有如下差异:

  • ARM 有桶型移位寄存器,单周期内可以完成数据的各种移位操作。
  • 并不是所有的 ARM 指令都是单周期的。
  • ARM 具有 16 位的 Thumb 指令集,是 32 位 ARM 指令集的压缩形式,提高了代码密度。
  • 条件执行:通过指令组合,减少了分支数目,提高了代码密度。
  • 增加了 DSP、SIMD/NEON 等指令。

ARM 处理器具有多种工作模式

为了保证计算机能长期安全稳定地运行,CPU 提供了多种工作模式和权限管理。应用程序正常运行时,处理器处于普通模式,没有权限对内存和底层硬件进行操作。应用程序如果要读写磁盘上的音频数据,驱动声卡播放音乐,往屏幕写数据显示歌词,则要首先通过系统调用或软中断进入处理器特权模式,运行操作系统内核或硬件驱动代码,才能对底层的硬件设备进行读写。

处理器模式 模式介绍
User mode 应用程序正常运行时的工作模式
FIQ mode 快速中断模式,中断优先级比 IRQ 高
IRQ mode 中断模式
Supervisor mode 管理程序模式,保护模式,复位和软中断时一般都会进入该模式
Abort mode 数据存取异常、指令读取失败时会进入该模式
Undefined mode CPU遇到无法识别、未定义的指令时,会进入该模式
System mode 可运行特权 OS 任务,切换到其他模式
Monitor mode 仅限于安全扩展

ARM 处理器中的寄存器可分为通用寄存器和专用寄存器两种

寄存器 R0~R12 属于通用寄存器,除了 FIQ 工作模式,在其他工作模式下这些寄存器都是共用的、共享的:R0~R3 通常用来传递函数参数,R4~R11 用来保存程序运算的中间结果或函数的局部变量等,R12 常用来作为函数调用过程中的临时寄存器。

在每个工作模式下均有一组 R13、R14、R15、CPSP、SPSR 寄存器,R13 又称为堆栈指针寄存器(SP),用来维护和管理函数调用过程中的栈帧变化,总是指向当前正在运行的函数的栈帧,一般不能再用作其他用途,R14 寄存器又称为链接寄存器(LR),在函数调用过程中主要用来保存上一级函数调用者的返回地址,寄存器 R15 又称为程序计数器(PC),CPU 从内存取指令执行,每取一次指令,PC 寄存器的地址自动增加。CPU 一条一条不停地取指令,程序就源源不断地一直运行下去。当前处理器状态寄存器(CPSR)主要用来表征当前处理器的运行状态,除了各种状态位、标志位,CPSR 寄存器里也有一些控制位,用来切换处理器的工作模式和中断使能控制。当 ARM处理器切换工作模式或发生异常时,程序状态保存寄存器(SPSR)用来保存当前工作模式下的处理器现场,即将 CPSR 寄存器的值保存到当前工作模式下的 SPSR 寄存器。

FIQ 模式是一种特殊的工作模式,为了快速响应中断,减少中断现场保护带来的时间开销,在 FIQ 工作模式下,ARM 处理器有自己独享的 R8~R12 寄存器。

ARM 的寻址方式

  • 寄存器寻址:操作数保存在寄存器中,通过寄存器名就可以直接对寄存器中的数据进行读写。MOV R1 R2; 将寄存器R2中的值传送到R1
  • 立即数寻址:ARM 指令中的操作数为一个常数,立即数以 # 为前缀,MOV R1, #0xFF
  • 寄存器偏移寻址:将第二个操作数进行移位操作并作为新的操作数。MOV R2, R1, LSL, #3; R2=R1<<3。逻辑移位和算数移位。
  • 寄存器间接寻址:LDR R1, [R2]; 将R2中的值作为地址,取该内存地址上的数据,保存到R1
  • 基址寻址:属于间接寻址的另一种形式,不同之处在于,基值寻址将寄存器中的地址与一个便宜量相加,生成一个新地址,然后基于这个新地址去访问内存。LDR R1, [FP, #2]; 将FP中的值加2作为新地址,取该地址上的值保存到R1
  • 多寄存器寻址:STM/LDM指令就属于多寄存器寻址,一次可以传输多个寄存器的值。LDMIA SP!, {R0-R2,R14}; 将内存栈中的数据依次弹出到R14、R2、R1、R0STMDB SP!, {R0-R2,R14}; 将R0、R1、R2、R14依次压入栈
  • 相对寻址:以 PC 指针作为基地址进行寻址,比如 BBLADR 指令。

重新认识编译器

一套完整的编译器工具集,不进包含编译器,还有各种各样的工具、函数库、头文件等。不同的 ARM 编译器开发商,会根据 ARM 指令集规定的标准指令去开发各自的编译器软件。目前市面上比较常见的编译器有 ARM 公司开发的 ARM GCC 编译器、IAR ARM C/C++ 编译器、开源的 GNU GCC for ARM 交叉编译器。不同的 IDE 一般都会内嵌上面三种编译器中的一种,或者 IDE 和编译器分别独立发布。市面上各种 ARM 编译器之间的唯一的区别就是汇编指令的格式有所差异,造成差异的原因是各家编译器厂商各自扩展的伪指令不同。文章来源地址https://www.toymoban.com/news/detail-601053.html

到了这里,关于ARM 体系结构与汇编语言的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARM汇编语言(2)

    ARM汇编语言是一种低级别的计算机指令集架构(ISA)语言,它是ARM处理器上的一种指令集架构,用于编写底层的系统软件,例如操作系统、驱动程序和嵌入式系统应用程序。 ARM汇编语言使用基于寄存器的指令集,其中指令操作的数据通常存储在处理器的寄存器中,而不是内存

    2024年02月02日
    浏览(57)
  • 嵌入式:ARM汇编语言程序设计基础教程

    ① 合理地分配存储器资源,将前述的目标系统‘数据结构模型’表示到各存储器单元。 ② CPU寄存器数量有限,在程序中,大多数操作都要使用寄存器;并且有的操作使用特定的寄存器(如堆栈操作使用SP/R13等),程序中要合理分配各寄存器的用途。 用计算机语言,对数据结

    2023年04月23日
    浏览(84)
  • Keil MDK配置ARM汇编/C语言混合开发环境

    1. 安装Keil MDK 安装方法这里不再说明,懂得都懂!🐶 2. 安装ARM开发包 在Keil MDK5之后,不再原生支持ARM7/9,需要自行安装软件包,链接在这,注意安装与自己MDK版本对应的那个包 我的版本是5.18,下载之后傻瓜式安装,因为它会自动检测你MDK所在的位置。 3. 新建工程 注意:选

    2024年02月02日
    浏览(57)
  • 5.10 汇编语言:汇编过程与结构

    过程的实现离不开堆栈的应用,堆栈是一种后进先出 (LIFO) 的数据结构,最后压入栈的值总是最先被弹出,而新数值在执行压栈时总是被压入到栈的最顶端,栈主要功能是暂时存放数据和地址,通常用来保护断点和现场。 栈是由 CPU 管理的线性内存数组,它使用两个寄存器 (S

    2024年02月11日
    浏览(39)
  • 用ARM进行汇编语言编程(4)带有分支的循环和条件指令执行

    ARM 编程模拟器网站地址: 在arm里也有和高级语言一样的for和while循环,可以根据条件来判断是否执行 首先我们创建一个data标签,然后在里面写一个分支,存放一些数值,然后使这些存放的数值依次相加 然后我们要将list加载到内存里 然后使用直接寻址,将r0寄存器里的值放

    2024年02月06日
    浏览(49)
  • 【ARM体系结构】之寄存器与三级流水线

    控制器:控制程序运行,进行取指令操作,并将指令给到对应的运算器执行指令。 运算器:执行汇编指令,执行指令需要的使用的数据来源于寄存器,并将执行的执行结果返回到寄存器中。 存储器:又名寄存器,用来进行数据存储。 寄存器组织图中,每个小方块就是一个寄

    2024年02月14日
    浏览(51)
  • 第二章 ARM 技术及体系结构【嵌入式系统】

    2023-7-3 14:28:36 以下内容源自《【嵌入式系统】》 仅供学习交流使用 2.1.1 ARM 体系的版本说明 2.1.2 ARM 内核的命名 2.1.3 常用 ARM 处理器系列介绍 ARM7 系列处理器包括 4 种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T 和 ARM7EJ,其中 ARM7TDMI 是目前应用最广泛的 32 位嵌入式 RISC 处理器,ARM7 系

    2024年02月12日
    浏览(57)
  • 汇编语言(32位除法、分支结构、循环结构,奇偶校验,ascii转换,功能号调用)

    1)顺序结构:编写一个32位无符号数除法的程序。要求将存放在NUM1中的32位无符号数与存放在NUM2中的16位无符号数相除,结果存放在NUM3和NUM4中。 根据题目要求,应把存放在数据段内的被除数NUM1定义为32位,除数NUM2定义为16位,商NUM3定义为16位,余数NUM4定义为16位。 2)分支

    2024年02月06日
    浏览(46)
  • 汇编语言学习笔记四

    字符是以ASCII码的形式存储的,一个字符对应着8为二进制数,2位16进制数。 所以可以得到对应的字符地址。 根据ASCII码,字符的大写和小写相差一个0010 0000,比如a对应的ASCII码是0110 0001,那么A则对应的是0100 0001,对比可以发现他们只是第5位不同,第5位为1,则是小写,否则

    2024年02月03日
    浏览(59)
  • 汇编语言学习笔记六

    CF:进位标志位,产生进位CF=1,否则为0 PF:奇偶位,如010101b,则该数的1有3个,则PF=0,如果该数的1的个数为偶数,则PF=1。 0也是偶数 ZF:在相关指令执行后(运算和逻辑指令,传送指令不影响ZF的值),其结果为0,则ZF=1,否则为0。 SF:符号标志位,如果结果为负,则SF=1,否则为

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包