`
lobin
  • 浏览: 417270 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

 

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架构参考手册ARM V9

    ARM架构参考手册ARM V9是ARM有限公司(Arm Limited)发布的一本架构参考手册,旨在提供ARM V9架构的详细信息和指南。该手册面向 ARM V9-A 架构配置文件,旨在帮助开发者和设计者更好地理解和应用ARM V9架构。 在ARM...

    ARM Architecture Reference Manual(ARM体系结构参考手册)

    《ARM体系结构参考手册》是理解ARM架构的关键资源,它为开发者、硬件设计者和系统工程师提供了详尽的指令集架构(ISA)信息,以及相关的软件开发和硬件实现指南。ARM处理器广泛应用于移动设备、嵌入式系统以及数据...

    KEIL ARM7/ARM9支持安装包

    KEIL ARM7/ARM9支持安装包是一款专为基于ARM7和ARM9微处理器的嵌入式系统开发设计的软件工具。它由Keil Software公司(现已被ARM Ltd收购)开发,是C51和μVision IDE的扩展,提供了一个集成的开发环境,包括编译器...

    ARM汇编语言官方手册(中文).pdf,arm汇编语言手册中文版,Asm

    **ARM汇编语言官方手册(中文)** ARM汇编语言是针对ARM架构处理器的一种低级编程语言,广泛应用于嵌入式系统开发、移动端性能优化等领域。对于初学者来说,掌握ARM汇编语言不仅可以深入理解计算机硬件工作原理,还...

    Arm Compiler 5.06编译器

    ** Arm Compiler 5.06 编译器详解** Arm Compiler是ARM公司为基于ARM架构的处理器设计的一款高效、优化的编译工具链。这款编译器版本5.06是专门为开发人员针对ARM处理器进行应用程序开发而设计的,旨在提供最佳的...

    Arm debug interface.pdf

    根据文件信息,本文档是关于ARM调试接口的官方文档,特别提到了ARM Debug Interface v5版本,文档中包含有版权信息、修改历史、许可协议以及相关的ARM技术信息。下面将对这些知识点进行详细解释。 首先,文档标题...

    libreoffice arm架构安装

    "libreoffice arm架构安装"这一主题聚焦于在基于ARM架构的麒麟系统上安装LibreOffice,这是一款开源、免费的办公套件,与Microsoft Office兼容,提供了文字处理、电子表格、演示文稿等多种功能。 首先,我们需要...

    arm-2014.05-29-arm-none-linux-gnueabi

    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 version5.06

    **ARM Compiler Version 5.06 知识详解** ARM Compiler是ARM公司开发的一款高度优化的编译器工具链,专为ARM架构的处理器设计,用于构建高效、高性能的嵌入式软件。版本5.06是这个系列的一个重要里程碑,它在编译...

    向日葵arm版安装包,内含安装说明

    在“向日葵arm版安装包”中,特别为基于ARM架构的设备提供了定制的版本,这包括但不限于各种嵌入式系统、智能电视、路由器以及搭载了ARM处理器的Linux设备。在本文中,我们将详细探讨这款软件的功能、安装过程以及...

    arm,cortex R52芯片手册,0103

    ARM Cortex-R52 处理器技术参考手册 ARM Cortex-R52 处理器是 ARM 公司推出的一个高性能的实时处理器,广泛应用于 automotive、industrial 和其他实时系统领域。本手册提供了 ARM Cortex-R52 处理器的技术详细信息...

    arm-2014.05-29-arm-none-linux-gnueabi-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 System Developer's Guide.pdf

    ### ARM System Developer's Guide 关键知识点解析 #### 核心概念与原理 **ARM处理器架构:** ARM(Advanced RISC Machines)是一种基于精简指令集计算(RISC)的低功耗架构,广泛应用于移动设备、嵌入式系统以及...

    ARM_debug_interface_v5

    ### ARM Debug Interface v5 #### 概述 ARM Debug Interface v5(简称ADI v5)是一种用于调试基于ARM架构的微处理器的技术规范。该技术主要提供了两种接口:JTAG(Joint Test Action Group)接口和SWD(Serial ...

    Arm Compiler 5.06 update 7 (build 960) Lin32 -“官网最新版”Arm处理器的编译工具

    最新发布的MDK5.37已经不再安装Arm Compiler 5(ARMCC)编译器了,因为点击魔术棒后,在Target选项卡中选择编译器时,会看到missing:compiler version 5,如果要使用compiler version 5,需要自己安装。 ‌Arm ...

    helm-v3.5.2-linux-arm64安装包

    标题中的“helm-v3.5.2-linux-arm64安装包”指的是Helm软件的版本3.5.2,这是专为Linux操作系统上的ARM64架构设计的安装程序。Helm是Kubernetes(通常简称为k8s)生态系统中的一个关键组件,用于管理Kubernetes的...

    ARM资料 ARM资料 ARM资料

    ARM架构是嵌入式计算领域中的核心技术,广泛应用于智能手机、物联网设备、服务器等多个领域。这些文档的标题暗示了它们可能是ARM处理器的技术参考手册,涵盖了不同的系列和版本。下面,我们将深入探讨ARM架构的关键...

    Windows ARM Hex Converter V5.2

    **Windows ARM Hex Converter V5.2 知识点详解** Windows ARM Hex Converter V5.2 是一款专为处理ARM架构指令集的专业工具,它能够帮助程序员和开发者将ARM指令转换成Thumb指令,反之亦然。在理解这个软件之前,...

Global site tag (gtag.js) - Google Analytics