ARM v3及以上版本
寄存器
ARM总共有37个寄存器
ARM (v3及以上版本)包括30个通用寄存器,程序计数器(pc寄存器),CPSR,5个SPSR寄存器
通用寄存器
r0,r1,r2,r3,...,r14:这15个通用寄存器在任何时候都是可见的(这取决于当前的处理器模式)
pc
程序计数器通过以r15(或pc)的形式访问。
CPSR
The Current Program Status Register
SPSR
Saved Program Status Registers
预定义的寄存器和协处理器
所有的寄存器和协处理器是大小写敏感的。
预定义的寄存器
1、r0-r15 and R0-R15
2、a1-a4 (argument, result, or scratch registers, synonyms for r0 to r3)
3、v1-v8 (variable registers, r4 to r11)
4、sb and SB (static base, r9)
5、sl and SL (stack limit, r10)
6、fp and FP (frame pointer, r11)
7、ip and IP (intra-procedure-call scratch register, r12)
8、sp and SP (stack pointer, r13)
9、lr and LR (link register, r14)
lr寄存器存放着返回地址。
10、pc and PC (program counter, r15).
预定义的程序状态寄存器
1、cpsr and CPSR (current program status register)
2、spsr and SPSR (saved program status register).
预定义的浮点(floating-point)寄存器
1、f0-f7 and F0-F7 (FPA registers)
2、s0-s31 and S0-S31 (VFP single-precision registers)
3、d0-d15 and D0-D15 (VFP double-precision registers).
预定义的协处理器
1、p0-p15 (coprocessors 0-15)
2、c0-c15 (coprocessor registers 0-15).
处理器模式
支持7种模式
1、User
2、FIQ - Fast Interrupt Request
3、IRQ - Interrupt Request
4、Supervisor
5、Abort
6、Undefined
7、System (ARM architecture v4 and above).
惯例
在ARM汇编语言中,r13用于sp(stack pointer,栈指针寄存器)
在C/C++编译器中,r13总是用于sp(stack pointer,栈指针寄存器)
在User模式下,r14用于lr(link register),用于在调用subroutine时,存储调用后要跳转的返回地址。当然,r14也可以用作通用目的寄存器,如果返回地址保存在栈上的话。
在异常处理模式下,r14用于异常的返回地址,或者如果在异常中执行subroutine调用,用于保存subroutine的返回地址。r14也可以用作通用目的寄存器,如果返回地址保存在栈上的话。
指令集
Branch指令
Branch相关指令分为Branch(分支)和Link(连接)
B
BL
BX
BLX
ARM汇编语言
ARM汇编语言编译器主要就是ARM编译器和GNU AS编译器。
这里主要采用GNU AS编译器
和编译x86汇编语言一样,GNU AS编译器也可以用于编译ARM汇编语言。
不同的是,在x86汇编语言中,采用#注释一行,而在ARM汇编语言中,采用@注释一行。当然这也跟编译器版本有关,在老的版本中还有以!注释一行,如as86,ld86。
函数调用
ARM不像x86直接支持call/ret指令完成调用和返回。ARM没有这样的指令,只是单纯的认为是pc寄存器在执行指令间的跳转。pc寄存器就相当于x86的IP/EIP寄存器。
ARM通过Branch(分支)和Link(连接)相关指令控制pc寄存器跳转。
.globl _start .text _add: ADD r0, r0, r1 @ add r0, r1 -> r0 MOV pc, lr @ ret _start: MOV r0, #11 MOV r1, #33 BL _add
>arm-linux-androideabi-as.exe add_test.asm -o add_test.o
>arm-linux-androideabi-ld.exe add_test.o -o add_test.elf
>arm-linux-androideabi-objcopy.exe -O binary add_test.elf add_test.bin
>arm-linux-androideabi-objdump.exe -S add_test.o
add_test.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <_add>:
0: e0800001 add r0, r0, r1
4: e1a0f00e mov pc, lr
00000008 <_start>:
8: e3a0000b mov r0, #11
c: e3a01021 mov r1, #33 ; 0x21
10: eafffffa bl 0 <_add>
Arm® Architecture Registers:https://static.docs.arm.com/ddi0595/d/SysReg_xml_v85A-2019-06.pdf?_ga=2.86705496.1989740994.1564081823-1830638344.1556638170
ARM指令集:https://developer.arm.com/architectures/instruction-sets
Arm® A32/T32 Instruction Set Architecture: https://static.docs.arm.com/ddi0597/d/ISA_AArch32_xml_v85A-2019-06.pdf?_ga=2.90287706.1989740994.1564081823-1830638344.1556638170
Arm® A64 Instruction Set Architecture:https://static.docs.arm.com/ddi0596/d/ISA_A64_xml_v85A-2019-06_OPT.pdf?_ga=2.152684281.1989740994.1564081823-1830638344.1556638170
相关推荐
arm 架构下 habor安装包arm 架构下 habor安装包arm 架构下 habor安装包arm 架构下 habor安装包arm 架构下 habor安装包arm 架构下 habor安装包arm 架构下 habor安装包arm 架构下 habor安装包arm 架构下 habor安装包...
ARM架构参考手册ARM V9是由ARM有限公司(Arm Limited)发布的权威文档,它详细介绍了ARM V9架构的关键特性和技术细节,为处理器设计和应用开发提供了全面的指导。作为专注于ARM V9-A架构配置文件的文档,它对于...
Arm Compiler 5.06是由ARM公司开发的一款C/C++编译器,它是针对ARM架构处理器的专业编译工具,被广泛应用于嵌入式系统的开发中。该编译器在Keil MDK-ARM软件开发工具套件(MDK)的特定版本中是独立的组件。对于使用...
arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构...
ARM1176JZF-S是ARM公司生产的一款处理器,属于ARM11系列。ARM11是ARM公司一系列处理器的统称,这些处理器采用了32位RISC微处理器架构,主要应用在移动设备和嵌入式设备上。ARM1176JZF-S处理器是其中的一个型号,它...
但基于标题和描述中提供的信息,我们可以深入探讨关于alpine ARM版本容器镜像的相关知识点。 首先,Alpine是一种轻量级的Linux发行版,其特点在于占用资源极少,这使得它非常适合用作容器技术的基础镜像。容器技术...
在ARM平台的OpenJDK镜像中,开发者可以预期包含的指令和文件会围绕着ARM架构进行优化,确保Java应用程序在ARM处理器上能够高效运行。镜像中可能会包括针对ARM优化的Java虚拟机(JVM)实现,从而充分利用ARM硬件的...
ARM Developer Suite 介绍 ARM Developer Suite(ADS)是一整套软件开发工具,专门为嵌入式ARM设计,支持V5TEJ体系结构。下面是ARM Developer Suite的详细知识点: 概述 ARM Developer Suite 1.2(ADS 1.2)是为...
Nginx ARM版本Docker镜像通常包含了为ARM架构优化的Nginx二进制文件及其依赖库,同时也可能包含了Dockerfile,这是一个文本文件,包含了用于创建Docker镜像的所有命令。通过Dockerfile,开发者可以轻松地重新构建出...
对于使用ARM64架构的硬件环境,如基于ARM64处理器的服务器和开发板,Docker镜像提供了支持这些平台运行MinIO服务的能力。 ARM64架构,也被称为AArch64,是一种64位微处理器架构,由ARM Holdings开发。这种架构广泛...
《ARM体系结构参考手册》是理解ARM架构的关键资源,它为开发者、硬件设计者和系统工程师提供了详尽的指令集架构(ISA)信息,以及相关的软件开发和硬件实现指南。ARM处理器广泛应用于移动设备、嵌入式系统以及数据...
Linux ARM版本的JDK是Java开发工具包在基于ARM架构的Linux操作系统上的特定构建。ARM架构,全称为Advanced RISC Machines,是一种广泛应用于嵌入式系统、移动设备以及某些服务器平台的精简指令集计算机(RISC)架构...
随着技术的发展,越来越多的软件开始支持ARM架构,包括那些运行在ARM处理器上的服务器。ARM架构以其低功耗和高效率而闻名,在嵌入式系统、移动设备和某些类型的服务器中有广泛应用。Docker作为一个开源的应用容器...
在构建nginx ARM平台容器镜像时,需要考虑到ARM处理器的指令集、系统库等与x86架构的不同之处,确保nginx软件能够在ARM平台上正确安装、配置和运行。构建过程中可能会涉及交叉编译和使用特定的工具链来创建兼容的二...
Docker arm64镜像的创建就是为了确保kkfileview能够在基于ARM64架构的硬件上运行,例如基于ARM64的树莓派、某些型号的NVIDIA Jetson以及某些类型的服务器和移动设备。 构建基于arm64架构的Docker镜像通常需要在支持...
arm-2011.03-46-arm-uclinuxeabi-i686-mingw32.tar.bz2 arm-2011.03-46-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2 arm-2011.03-46-arm-uclinuxeabi.bin arm-2011.03-46-arm-uclinuxeabi.exe arm-2011.03-46-arm-...
Ubuntu 20.04 ARM64 docker镜像是一种基于ARM架构的Ubuntu 20.04版本的docker镜像,它包含了Ubuntu操作系统的所有基本软件和功能,并且专门为ARM架构的处理器进行了优化。这种镜像非常适合在基于ARM处理器的设备上...
将CentOS 7.9与ARM架构结合起来,生成针对ARM平台的容器镜像,意味着能够在ARM处理器上运行基于CentOS 7.9的应用程序。这种容器镜像对于开发者和企业而言有着诸多好处,尤其是在需要构建轻量级、高效能、高性能计算...
KEIL ARM7/ARM9支持安装包是一款专为基于ARM7和ARM9微处理器的嵌入式系统开发设计的软件工具。它由Keil Software公司(现已被ARM Ltd收购)开发,是C51和μVision IDE的扩展,提供了一个集成的开发环境,包括编译器...