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 V9架构。 在ARM...
arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构...
《ARM体系结构参考手册》是理解ARM架构的关键资源,它为开发者、硬件设计者和系统工程师提供了详尽的指令集架构(ISA)信息,以及相关的软件开发和硬件实现指南。ARM处理器广泛应用于移动设备、嵌入式系统以及数据...
ARM微处理器是一种广泛应用的处理器类型,其特点是基于RISC架构,具有低功耗、高性能、高性价比的特性。ARM微处理器的技术广泛应用于工业控制、消费类电子产品、通信系统、网络系统、无线系统等领域,市场份额在32位...
** Arm Compiler 5.06 编译器详解** Arm Compiler是ARM公司为基于ARM架构的处理器设计的一款高效、优化的编译工具链。这款编译器版本5.06是专门为开发人员针对ARM处理器进行应用程序开发而设计的,旨在提供最佳的...
KEIL ARM7/ARM9支持安装包是一款专为基于ARM7和ARM9微处理器的嵌入式系统开发设计的软件工具。它由Keil Software公司(现已被ARM Ltd收购)开发,是C51和μVision IDE的扩展,提供了一个集成的开发环境,包括编译器...
**ARM汇编语言官方手册(中文)** ARM汇编语言是针对ARM架构处理器的一种低级编程语言,广泛应用于嵌入式系统开发、移动端性能优化等领域。对于初学者来说,掌握ARM汇编语言不仅可以深入理解计算机硬件工作原理,还...
ARM-Keil Studio for VScode externsion ARM-Keil Studio for VScode externsion 是一个基于 Visual Studio Code 的扩展程序,旨在提供 ARM 开发板的开发和调试功能。该扩展程序由 Arm Limited 开发,旨在帮助...
根据文件信息,本文档是关于ARM调试接口的官方文档,特别提到了ARM Debug Interface v5版本,文档中包含有版权信息、修改历史、许可协议以及相关的ARM技术信息。下面将对这些知识点进行详细解释。 首先,文档标题...
"libreoffice arm架构安装"这一主题聚焦于在基于ARM架构的麒麟系统上安装LibreOffice,这是一款开源、免费的办公套件,与Microsoft Office兼容,提供了文字处理、电子表格、演示文稿等多种功能。 首先,我们需要...
arm-none-linux-gnueabi-gcc.exe -v Using built-in specs. COLLECT_GCC=arm-none-linux-gnueabi-gcc.exe COLLECT_LTO_WRAPPER=d:/eclipse/cross/arm-2014.05-29/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/...
**ARM Compiler Version 5.06 知识详解** ARM Compiler是ARM公司开发的一款高度优化的编译器工具链,专为ARM架构的处理器设计,用于构建高效、高性能的嵌入式软件。版本5.06是这个系列的一个重要里程碑,它在编译...
在“向日葵arm版安装包”中,特别为基于ARM架构的设备提供了定制的版本,这包括但不限于各种嵌入式系统、智能电视、路由器以及搭载了ARM处理器的Linux设备。在本文中,我们将详细探讨这款软件的功能、安装过程以及...
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 ./arm-none-linux-gnueabi-gcc -v Using built-in specs. COLLECT_GCC=./arm-none-linux-gnueabi-gcc Target: arm-none-linux-gnueabi Configured...
ARM Cortex-R52 处理器技术参考手册 ARM Cortex-R52 处理器是 ARM 公司推出的一个高性能的实时处理器,广泛应用于 automotive、industrial 和其他实时系统领域。本手册提供了 ARM Cortex-R52 处理器的技术详细信息...
### ARM System Developer's Guide 关键知识点解析 #### 核心概念与原理 **ARM处理器架构:** ARM(Advanced RISC Machines)是一种基于精简指令集计算(RISC)的低功耗架构,广泛应用于移动设备、嵌入式系统以及...
标题中的“helm-v3.5.2-linux-arm64安装包”指的是Helm软件的版本3.5.2,这是专为Linux操作系统上的ARM64架构设计的安装程序。Helm是Kubernetes(通常简称为k8s)生态系统中的一个关键组件,用于管理Kubernetes的...