ARM指令系统概述

2024-06-22 05:58
文章标签 概述 arm 指令系统

本文主要是介绍ARM指令系统概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘译自Matteo Franchin的PPT《ARMv8-A A64 ISA Overview》。

寄存器

ARM共有31个通用寄存器和2个特殊寄存器,都是64位。31个通用寄存器用X0到X30来表示,两个特殊寄存器是SP和ZR。
SP是栈指针,其内容是栈底的地址,必须满足16字节对齐的条件,否则无法使用。例如:
ADD SP, SP, #8
这种用法是错误的,因为所得到的SP不满足16字节对齐的条件,造成之后的SP不可用。
ZR是0寄存器。当用作源寄存器的时候,其值恒为0,当用作目的寄存器的时候,值被抛弃,不能保存任何值。
向量和浮点寄存器。32个寄存器,向量和浮点共用,每个128位,用V0到V31来表示。不同的记号可以表示不同的长度,B表示字节,H表示半字,S表示单字,D表示双字,Q表示四字,如图1所示。


图1 不同长度数值的描述方式

系统寄存器。系统寄存器定义了处理器的上下文,通常带有后缀_ELx,表示能访问该寄存器的最低异常级别。分别对应有读(MRS)和写(MSR)系统寄存器的指令。
MRS X0, SCTLR_EL1
MSR SCTLR_EL1, X0

Load/Store指令

指令的使用

LDR和STR分别从地址中读入内容到寄存器和向地址中写入寄存器的内容。默认情况下,内容的大小由寄存器的名字决定,也可以使用后缀来指定读写较小的内容。后缀B表示字节,H表示半字,W表示单字。当写入较小的内容时,默认情况下,会对内容进行0扩展,也可以使用S来进行符号位扩展。图2中,第一条指令是把内容为8A的一个字节装入X4(64位)中,并进行符号位的扩展。第二条指令是把内容为8A的一个字节装入W4(32位)中,并进行0扩展。


图2 load指令示例

指定Load/Store指令的地址

按照从简单到复杂的分类方法,可以通过以下方式来指定访存指令的地址:从寄存器中获取地址;通过寄存器内容再加上偏移来获取地址;对偏移进行扩展、移位等运算之后,再与寄存器内容相加,获得地址。
LDR X0, [X1]                                ; 直接从寄存器X1的内容中获取地址。
LDR X0, [X1, #-8]                        ; X1的内容加上-8的偏移,得到地址。
LDR X0, [X1, X2]                         ; X!的内容和X2的内容相加得到地址。
LDR X0, [X1, W2, SXTW]          ; 对W2的内容做符号扩展,再与X1的内容相加,作为地址。
LDR X0, [X1, X2, LSL #2]          ; 把X2的内容左移2位,再与X1的内容相加,作为地址。

寻址模式

简单模式:X1的内容不会被改变,例如。
LDR X0, [X1]
LDR X0, [X1, #4]

前变址模式,X1的内容在load之前变化,例如。
LDR X0, [X1, #4]!  
等价于  
ADD X1, X1, #4
LDR X0, [X1]

后变址模式,X1的内容在load之后变化,例如。
LDR X0, [X1], #4
等价于
LDR X0, [X1]
ADD X1, X1, #4

浮点的Load/Store

浮点寄存器的Load/Store操作,通过寄存器的名称来指定写入寄存器内容的大小。B、H、S、D和Q分别代表字节、半字、单字、双字和四字。指令中不再有大小和符号扩展之类的内容,例如。
LDR  D1, [X0]           ; 从地址[X0]中取64位数值到D1寄存器中。
STR  Q0, [X0, X1]    ; 存128位的内容到地址[X0 + X1]。

Load/Store一个寄存器对

支持对整型、浮点标量和向量,要求源寄存器和目的寄存器必须具有相同的宽度,例如。
LDP W3, W7, [X0]        ; [X0] => W3, [X0 + 4 bytes] =>W7
STP Q0, Q1, [X4]        ; Q0 => [X4], Q1=>[X4 + 16 bytes]

这篇关于ARM指令系统概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083484

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

bash: arm-linux-gcc: No such file or directory

ubuntu出故障重装了系统,一直用着的gcc使用不了,提示bash: arm-linux-gcc: No such file or directorywhich找到的命令所在的目录 在google上翻了一阵发现此类问题的帖子不多,后来在Freescale的的LTIB环境配置文档中发现有这么一段:     # Packages required for 64-bit Ubuntu

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机