3 ARM指令集与编程

合集下载

arm原理及编程

arm原理及编程

arm原理及编程ARM原理及编程概述ARM(Advanced RISC Machines)是一种精简指令集计算机(RISC)架构,由ARM公司开发。

ARM架构具有低功耗、高性能和灵活性等特点,广泛应用于移动设备、嵌入式系统和服务器等各个领域。

本文将介绍ARM的基本原理以及相关的编程技术。

一、ARM原理1. RISC架构ARM采用RISC架构,即精简指令集计算机。

RISC架构的特点是指令集精简,指令操作简单,执行速度快,能够高效利用处理器的资源。

ARM的指令集包括数据处理指令、分支跳转指令、访存指令等,这些指令的操作对象是寄存器,而不是内存。

2. 寄存器ARM架构中有一组寄存器,用于存储指令操作的数据。

通常,ARM架构有16个通用寄存器,分别用来存储操作数、地址和中间结果等。

此外,还有一些特殊寄存器,如程序计数器(PC)、堆栈指针(SP)等。

3. 处理器模式ARM架构中有多种处理器模式,用于支持不同的操作和特权级别。

常见的模式有用户模式、系统模式和中断模式等。

不同的模式下,处理器具有不同的权限和功能,可以执行不同的指令。

4. 存储器管理单元(MMU)ARM架构中的MMU负责虚拟地址到物理地址的转换,实现内存的管理和保护。

MMU通过页表机制将虚拟地址映射到物理地址,提供了地址空间的隔离和保护功能。

二、ARM编程1. 汇编语言ARM汇编语言是一种低级语言,用于直接操作处理器的指令和寄存器。

通过编写汇编语言程序,可以实现对底层硬件的直接控制。

ARM汇编语言的语法简洁清晰,可读性强。

2. C语言C语言是一种高级语言,常用于ARM的应用程序开发。

使用C语言编程可以更方便地进行软件开发,减少对底层硬件的直接操作。

ARM提供了C编译器,可以将C语言源代码编译成与ARM架构兼容的机器码。

3. 开发工具ARM编程常用的开发工具有Keil MDK、GCC等。

Keil MDK是一款集成开发环境(IDE),提供了ARM汇编器和C编译器,方便开发者编写和调试ARM程序。

ARM编程模型和指令集介绍

ARM编程模型和指令集介绍

在汇编语言中寄存器 R3(a4) R0~R13为保存数据或 R4(v1) R5(v2) 地址值的通用寄存器。 R6(v3) 它们是完全通用的寄存 通用寄 R7(v4) 存器和 器,不会被体系结构作 程序计 R8(v5) 数器 为特殊用途,并且可用 R9(SB,v6) 于任何使用通用寄存器 R10(SL,v7) R11(FP,v8) 的指令。
快中断 (fiq) 快中断 (fiq) 中断 中断 管理 管理 中止 中止 (irq) (irq) (svc) (svc) (abt) (abt)
未定义 (und)
除用户模式外,其它模式均为特 支持高速数据传输及通 FIQ异常响应时进入此模式 权模式。ARM内部寄存器和一些 道处理 片内外设在硬件设计上只允许(或 用于通用中断处理 IRQ异常响应时进入此模式 者可选为只允许)特权模式下访问。 系统复位和软件中断响应时进 操作系统保护代码 入此模式 此外,特权模式可以自由的切换处 用于支持虚拟内存和/或 在ARM7TDMI没有大用处 理器模式,而用户模式不能直接切 存储器保护 换到别的模式。 未定义指令异常响应时进入此 支持硬件协处理器的软
所有数据操作,例如ADD,都以字为单位;
装载和保存指令可以对字节、半字和字进行操作,当装 载字节或半字时自动实现零扩展或符号扩展; ARM指令的长度刚好是1个字(分配为占用4个字节), Thumb指令的长度刚好是半字(占用2个字节)。
2.1.2 处理器工作状态

处理器状态
ARM7TDMI处理器内核使用V4T版本的ARM结 构,该结构包含32位ARM指令集和16位Thumb指 令集。因此ARM7TDMI处理器有两种操作状态: ARM状态:32位,这种状态下执行的是字方 式的ARM指令; Thumb状态:16位,这种状态下执行半字方式

《汇编语言程序设计 —基于ARM体系结构 (第4版)》教学课件—03ARM指令系统

《汇编语言程序设计 —基于ARM体系结构 (第4版)》教学课件—03ARM指令系统

图3-1程序设计语言的层次结构
为了提高程序设计的效率,人们提出了汇编语言的概念。将机器码用指令助记符表示,这样就比机器语言方便得多。不过,在使用汇编语言后,虽然编程的效率和程序的可读性都有所提高,但汇编语言同机器语言非常接近,它的书写风格在很大程度上取决于特定计算机的机器指令,所以它仍然是一种面向机器的语言。 为了更好地进行程序设计,提高程序设计的效率,人们又提出了高级语言程序设计的概念。如C、JAVA等,这类高级语言对问题的描述十分接近人们的习惯,并且还具有较强的通用性。这就给程序员带来极大的方便。当然这类高级语言在执行前必须转换为汇编语言或其它中间语言,最终转换为机器语言。通常有两
3.2 ARM汇编语言
3.2.1指令和指令格式3.2.2指令的可选后缀3.2.3指令的条件执行3.2.4 ARM指令分类
3.2.1指令和指令格式
1.指令和指令系统 指令是指示计算机进行某种操作的命令 指令的集合称为指令系统。指令系统的功能强弱在很大程度上决定了这类计算机智能 的高低,它集中地反映了微处理器的硬件功能和属性。2.指令的表示方法从形式上看,ARM指令在机器中的表示格式是用32位的二进制数表示。计算机根据二 进制代码去完成所需的操作,如ARM中有一条指令为:ADDEQS R0,R1,#8;其二进制代码形式为:
3.1 指令基础
3.1.1程序设计语言的层次结构3.1.2指令周期和时序3.1.3程序的执行过程
3.1.1程序设计语言的层次结构
计算机程序设计语言的层次结构如图3-1所示,分为机器语言级、汇编语言级、高级语言级,机器语言是与计算机硬件最为密切的一种语言,它由微程序解释机器指令统。这一级也是硬件级,是软件系统和硬件系统之间的纽带。
例如:在8MHz的ARM微处理器中,一个 S 周期是125ns,而一个 N 周期 是 250ns。应当注意到这些时序不是 ARM 的属性,而是内存系统 的属性。例如,一个 8MHz的ARM微处理器可以与一个给出125ns 的 N 周期的 RAM 系统相连接。处理器的速率是 8MHz 只是简单 的意味着如果你使任何类型的周期,在长度上小于 125ns 则它不 保证能够工作。图3-2显示一种ARM存储器周期时序。

第三章 ARM指令集与编程

第三章 ARM指令集与编程

(2)ARM指令的条件码(续)
1000 1001 1010 1011 HI LS GE LT C置位且Z清0 C清0或Z置位 N等于V N不等于V 无符号高于 无符号低于或等于 有符号大于或等于 有符号小于
1100 1101 1110 1111
GT LE AL NV
Z清0且N等于V Z置位或N不等于V 任何状态 无
堆栈和块拷贝角度的多寄存器加载和存储指令映射堆栈用一般数据存取堆栈用一般数据存取l位存取位存取p位前变址位前变址后变址u位加位加减空向下生长型之前增量减空向下生长型之前增量ldmedldmib111满向下生长型之后增量ldmfdldmia101空向上生长型之前增量ldmealdmdb110满向上生长型之后增量ldmfaldmda100满向上生长型之前增量stmfastmib011空向上生长型之后增量stmeastmia001空向下生长型之前增量stmfdstmdb010满向下生长型之后增量stmedstmda000328相对寻址?相对寻址是变址寻址的一种变通由程序计数器pc提供基地址





(2) ARM指令的条件码
0000 EQ Z置位 相等/等于0
0001
0010
NE
CS/HS
Z清0
C置位
0011 0100 0101 0110 0111
CC/LO MI PL VS VC
C清0 N置位 N清0 V置位 V清0
不等 进位/无符号高于或 等于 无进位/无符号低于 负数 非负数 溢出 无溢出
逻辑移位





LSL:逻辑左移(Logical Shift Left)。寄存器中字的低 端空出的位补0。 · LSR:逻辑右移(Logical Shift Right)。寄存器中字的 高端空出的位补0。 · ASR:算术右移(Arithmetic Shift Right)。算术移位的 对象是带符号数,在移位过程中必须保持操作数的符号 不变。若源操作数为正数,则字的高端空出的位补0。若 源操作数为负数,则字的高端空出的位补1。 · ROR:循环右移(Rotate Right)。从字的最低端移出的 位填入字的高端空出的位。 · RRX:扩展为1的循环右移(Rotate Right Extended by 1 place)。操作数右移一位,空位(位[31])用原C标志 填充。

ARM体系结构与编程

ARM体系结构与编程

ARM体系结构与编程
一、ARM体系结构
ARM(Advanced RISC Machine)是由英国ARM公司开发的一种低功耗、超低成本的处理器架构,是移动设备的首选处理器。

ARM架构的处理器有ARM7、ARM9、ARM11、 Cortex-A8 、Cortex-A15等,它们核心架构特点为以下几点:
1.保护模式。

ARM架构的处理器能够在用户模式和两个高级的保护模式之间来回切换。

2.对齐式存储。

ARM架构的处理器采用对齐方式,其二进制指令必须按照固定的位置排列,以便提高存储空间的利用率。

3.浮点处理单元。

ARM架构的处理器具有浮点数处理功能,使数值运算能够高效率地完成。

4.多级缓存。

ARM架构的处理器将原始数据复制到不同级别的快速缓存中,以便快速访问。

二、ARM程序的编程
1、ARM程序的编写
ARM程序的编写可以使用C语言编写,程序开发者需要掌握ARM架构各种中央处理器扩展指令集的使用方法,以便获得更好的效率。

2、编译ARM程序
ARM程序的编译是使用GNU的gcc编译器进行的,它可以将C语言编写的程序编译成ARM架构的机器码,并可以在ARM架构的处理器上运行。

3、调试ARM程序
ARM程序的调试使用GDB程序调试,它可以提供丰富的调试工具,可以跟踪程序执行的步骤,提供全面的程序反馈信息,可以帮助开发者快速定位程序运行出错的地方。

三、总结。

第2章ARM编程模型和指令集介绍讲述

第2章ARM编程模型和指令集介绍讲述

第3章 ARM体系结构
2.1.4 ARM处理器模式
一、处理器模式
处理器模式:处理器在执行程序时在不同时刻所处的不同情况 ARM体系结构支持7种处理器模式。 (虽然支持7种模式,但实际中并不一定都会使用到) ★ 1、User用户模式(usr) 正常程序执行模式 ★2、System系统模式(sys) 运行具有特权的操作系统任务 ★3、IRQ-外部中断模式(irq) 用于通用的中断处理,CPU的中断来自中断控制器
第3章 ARM体系结构
4、工作模式位 M0、M1、M2、M3和M4是模式位。这些位决定 处理器的工作模式。
M[4:0] 10000 10001 10010 10011 10111 11011 模式 用户 FIQ IRQ 管理 中止 未定义 可访问的寄存器
PC、R14~R0、CPSR PC、R14_fiq~R8_fiq、R7~R0、CPSR、SPSR_fiq PC、R14_irq、R13_irq、R12~R0、CPSR、SPSR_irq PC、R14_svc、R13_svc、R12~R0、CPSR、SPSR_svc PC、R14_abt、R13_abt、R12~R0、CPSR、SPSR_abt PC、R14_und、R13_und、R12~R0、CPSR、SPSR_und PC、R14~R0、CPSR
第3章 ARM体系结构
2、Thumb状态
★处理器执行16位的Thumb指令
★指令半字对齐:指令地址是2的整数倍(bit0=0 ) ★ 执行一条指令,PC值加2个字节(16位) 说明 ★1、处理器可以随时在两种工作状态之间切换。 ★ 2、ARM微处理器初始状态是ARM状态
第3章 ARM体系结构
2.1.3 ARM体系的存储器和格式

arm原理及编程

arm原理及编程ARM原理及编程ARM(Advanced RISC Machine)是一种精简指令集计算机(Reduced Instruction Set Computer,RISC)体系结构,广泛应用于移动设备、嵌入式系统以及高性能计算等领域。

ARM架构的特点是指令集精简、功耗低、性能高效,因此备受青睐。

ARM架构的核心原理是RISC,即精简指令集计算机。

相较于传统的CISC(复杂指令集计算机)架构,RISC架构通过简化指令集,提高指令的执行速度和效率。

ARM处理器采用了三级流水线(Fetch、Decode、Execute),通过将指令执行分解为多个阶段,提高了指令的并行度和效率。

此外,ARM还采用了延迟槽、分支预测等技术,进一步提高了指令的执行效率。

ARM架构的编程主要是通过汇编语言和高级语言来实现。

汇编语言是一种低级语言,直接对应机器指令,可以更加精细地控制处理器的行为。

高级语言(如C语言)则是通过编译器将源代码转换为机器码,进而在ARM处理器上执行。

在ARM汇编语言中,最基本的指令包括数据处理指令、分支指令、访存指令等。

数据处理指令用于对寄存器中的数据进行运算和处理,如加法、减法、位运算等。

分支指令用于实现条件跳转和循环等控制流程,通过判断标志位的值来决定是否跳转到指定的地址。

访存指令则用于对内存进行读写操作,通过指定内存地址和寄存器来实现数据的传输。

除了汇编语言,ARM编程还可以使用高级语言进行开发。

C语言是最常用的高级语言之一,通过C语言编写的程序可以在ARM处理器上运行。

C语言提供了丰富的库函数和语法结构,使得程序的开发更加便捷和高效。

通过C语言,可以实现复杂的算法和功能,并与底层的硬件进行交互。

ARM架构的编程也可以使用汇编语言和C语言的混合编程。

通过汇编语言可以实现对处理器底层的精细控制,而通过C语言可以实现逻辑更为复杂的功能。

混合编程可以兼顾高效性和可读性,提高程序的开发效率和性能。

3ARM指令及汇编程序设计共31页文档


常量
数字常量
十进制 12,5,876,0 十六进制 0xFF,0x1 N进制 n-XXX,2-010111
字符常量
布尔常量
段定义
AREA Hello,CODE,READONLY ENTRY START MOV R7,#10
MOV R6,#5 ADD R6,R6,R7 B END
(9)FILED 语法格式:标号 FIELD 表达式
4 汇编控制伪指令
汇编控制伪指令用于控制汇编程序的执行流程, 常用的汇编控制伪指令包括以下几条: (1) IF、ELSE、ENDIF 语法格式: IF 逻辑表达式

指令序列 1

ELSE
指令序列 2
ENDIF
汇编控制伪指令(Cont.)
<>内的项是必须的
{}内的项是可选的
opcode 指令助记符,如LDR,STR等
cond 执行条件,如EQ,NE等
S 是否影响CPSR寄存器的值
Rd
目标寄存器
Rn
第一个操作数的寄存器
operand2 第二个操作数
第二个操作数
#immed_8r
常数表达式,必须是一个8位常数的偶数次循环移位 合法常量:0x3FC、0、0xF0000000、200、0xF0000001 非法常量:0x1FE、511、0xFFFF、0x1010、0xF0000010
数据常量定义伪指令
数据常量定义伪指令EQU用于为程序中的常量、 标号等定义一个等效的字符名称,类似于 C 语言 中的#define 。 EQU语法格式 : 名称 EQU 表达式 { ,类型 } ;其中 EQU 可用 “ * ” 代替。 名称为 EQU 伪指令定义的字符名称,当表达 式为 32 位的常量时,可以指定表达式的数据类 型,可以有以下三种类型: CODE16 、 CODE32 和 DATA 。

ARMCortexM3指令集

ARMCortexM3指令集⼀、跳转指令跳转指令⽤于实现程序流程的跳转,在ARM 程序中有两种⽅法可以实现程序流程的跳转:Ⅰ.使⽤专门的跳转指令。

Ⅱ.直接向程序计数器PC 写⼊跳转地址值。

通过向程序计数器PC 写⼊跳转地址值,可以实现在4GB 的地址空间中的任意跳转,在跳转之前结合使⽤ MOV LR,PC 等类似指令,可以保存将来的返回地址值,从⽽实现在4GB 连续的线性地址空间的⼦程序调⽤。

ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4 条指令:1、 B 指令B 指令的格式为:B{条件} ⽬标地址B 指令是最简单的跳转指令。

⼀旦遇到⼀个 B 指令,ARM 处理器将⽴即跳转到给定的⽬标地址,从那⾥继续执⾏。

注意存储在跳转指令中的实际值是相对当前PC 值的⼀个偏移量,⽽不是⼀个绝对地址,它的值由汇编器来计算(参考寻址⽅式中的相对寻址)。

它是 24 位有符号数,左移两位后有符号扩展为 32 位,表⽰的有效偏移为 26 位(前后32MB 的地址空间)。

以下指令:B Label ;程序⽆条件跳转到标号Label 处执⾏CMP R1,#0 ;当CPSR 寄存器中的Z 条件码置位时,程序跳转到标号Label 处执⾏BEQ Label2、 BL 指令BL 指令的格式为:BL{条件} ⽬标地址BL 是另⼀个跳转指令,但跳转之前,会在寄存器R14 中保存PC 的当前内容,因此,可以通过将R14 的内容重新加载到PC 中,来返回到跳转指令之后的那个指令处执⾏。

该指令是实现⼦程序调⽤的⼀个基本但常⽤的⼿段。

以下指令:BL Label ;当程序⽆条件跳转到标号Label 处执⾏时,同时将当前的PC 值保存到R14 中3、 BLX 指令BLX 指令的格式为:BLX ⽬标地址BLX 指令从ARM 指令集跳转到指令中所指定的⽬标地址,并将处理器的⼯作状态有ARM 状态切换到Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。

ARM指令集

ARM指令集ARM指令的基本格式ARM指令的基本格式为:<Opcode> {<Cond>} {S} <Rd>, <Rn> { , <Opcode2> }其中,<>内的项是必需的,{}内的项是可选的。

1)Opcode项Opcode是指令助记符,即操作码,说明指令需要执⾏的操作,在指令中是必需的。

2)Cond项(command)Cond项表明了指令的执⾏的条件,每⼀条ARM指令都可以在规定的条件下执⾏,每条ARM指令包含4位的条件码,位于指令的最⾼4位[31:28]。

条件码共有16种,每种条件码⽤2个字符表⽰,这两个字符可以添加⾄指令助记符的后⾯,与指令同时使⽤。

当指令的执⾏条件满⾜时,指令才被执⾏,否则指令被忽略。

如果在指令后不写条件码,则使⽤默认条件AL(⽆条件执⾏)。

指令的条件码条件码助记符后缀标志含义0000 EQ Z置位相等equal0001 NE Z清零不相等not equal0010 CS C置位⽆符号数⼤于或等于Carry Set0011 CC C清零⽆符号数⼩于0100 MI N置位负数minus0101 PL N清零正数或零plus0110 VS V置位溢出0111 VC V清零没有溢出1000 HI C置位Z清零⽆符号数⼤于high1001 LS Z置位C清零⽆符号数⼩于或等于less1010 GE N等于V 带符号数⼤于或等于1011 LT N不等于V 带符号数⼩于least1100 GT Z清零且(N等于V)带符号数⼤于great1101 LE Z清零或(N不等于V)带符号数⼩于或等于1110 AL 忽略⽆条件执⾏all1111条件码应⽤举例:例:⽐较两个值⼤⼩,并进⾏相应加1处理,C语⾔代码为:if ( a > b ) a++;else b++;对应的ARM指令如下(其中R0中保存a 的值,R1中保存b的值):CMP R0, R1 ; R0与R1⽐较,做R0-R1的操作ADDHI R0, R0, #1 ;若R0 > R1, 则R0 = R0 + 1ADDLS R1, R1, #1 ; 若R0 <= R1, 则R1 = R1 + 1CMP⽐较指令,⽤于把⼀个寄存器的内容和另⼀个寄存器的内容或⼀个⽴即数进⾏⽐较,同时更新CPSR中条件标志位的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

101816 100C16 1000 16
R9'
STMDA R9! , {R0 , R1 , R5}
STMDB R9! , { R0 , R1 , R5 }
2.7 堆栈寻址
堆栈是一种按特定顺序进行存取的存储区。“后进先 出”(LIFO)。栈指针所指定的存储单元就是堆栈的 栈顶。存储器堆栈可分为两种:
ARM对堆栈的使用一般用多寄存器传送指令,是一种有效
的保存处理器状态和多字节传送的有效方式。ARM硬件中的堆
栈分为以下四种类型: ①满向上生长型(FA):堆栈按高地址方向生长,当前堆栈指 针指向最高有效值; ②空向上生长型(EA) :堆栈按高地址方向生长,当前堆栈 指针指向第一个空值; ③满向下生长型(FD) :堆栈按低地址方向生长,当前堆栈 指针指向最低有效值; ④空向下生长型(ED) :堆栈按低地址方向生长,当前堆栈 指针指向第一个空值。
若R3~R9保存的是有用的值,就应该把它们压进堆栈进 行保存。即 STMFD R13!,{R3-R9} ; 存储寄存器到堆栈 。。。。。。 LDMFD R13!,{R3-R9} ; 从堆栈恢复 其中第一条和最后一条指令的“FD”表明是满递减堆栈寻 址方式。
堆栈和块拷贝角度的多寄存器加载和 存储指令映射
后索引寻址。基址不带偏移作为传送的地址,传 送后自动索引。 LDR R0,[R1],#4 ; R0= [R1] ; R1= R1+4
基址加索引寻址有时指令指定一个基址寄存器, 再指定另一个寄存器(索引),其值作为偏移加 到基址上形成存储器地址。例如指令: LDR R0,[R1,R2] ; R0= [R1+R2]
1.4.2 ARM指令的条件码(续)
1000 1001 1010 1011 1100 1101 1110 1111 HI LS GE LT GT LE AL NV C置位且Z清0 C清0或Z置位 N等于V N不等于V Z清0且N等于V Z置位或N不等于V 任何状态 无 无符号高于 无符号低于或等于 有符号大于或等于 有符号小于 有符号大于 有符号小于或等于 总是(always) 从不(never)
注:AL是默认的,NV不建议使用。
目录
1. 2. 3. 4. 5. 6. 7. 8. 总体介绍:指令分类,特点,格式,条件码 ARM 指令寻址方式 数据处理指令:数据传输指令,算术指令,逻辑指令,比较指令,乘 法指令,前导零计数 程序状态访问指令 跳转指令 单数据访存指令 多数据访存指令 其它指令:信号量操作指令,异常中断产生指令,协处理器指令
·向上生长:即向高地址方向生长,称为递增堆栈 (ascending stack)。 ·向下生长:即向低地址方向生长,称为递减堆栈 (descending stack)。
堆栈指针指向最后压入堆栈的有效数据项,称为满 堆栈(full stack)。堆栈指针指向下一个数据项放入 的空位置,称为空堆栈(empty stack)。
1.2 指令特点
所有指令都是32bit。 大多数指令都在单周期内完成。 所有指令都可以条件执行。 load/store体系结构。 指令集可以通过协处理器扩展
1.3 ARM指令的格式
31 28 27 25 24 21 20 19 16 15 12 11 8 7 0
Cond
001
Opcode S
Rn
2.6块拷贝寻址
ARM支持两种不同角度的块寻址机制,两者都映射到相同的 基本指令——多寄存器传送指令。多寄存器传送指令可以用于 把一块数据从存储器的某一位置拷贝到另一位置;基于数据是 存储在基址寄存器的地址之上还是之下,地址是在存储第1个 值之前还是之后增加还是减少。 下 图说明了4种不同情况的多字节传送指令传送前后的内存 变化,以及使用自动寻址时如何修改基址寄存器。指令执行前 的基寄存器是R9 ,指令执行后的基寄存器是R9’。
每一个操作数寄存器和结果寄存器都在指令中独立指出,即: ARM指令采用3地址模式:<Operation> Rd, Rn, Rm
3.2 四种寻址方式和s后缀
31 28 27 25 24 Cond 00X 21 20 19 16 15 S Rn Rd 11 8 7 #rot 11 #immed_8 4 00000000 11 8 7 Rs 11 #immed_5 0000 7 6 4 3 shift Rm 4 3 Rm 0 3 Rm 0 0 12 11 8 7 第 2 操作数 0 0
1.4.1 ARM指令的条件域
EQ/NE: 等于/不等于(equal / not equal) HS/LO: 无符号数高于或等于/无符号数小于(higher or same/lower) HI/LS: 无符号数高于/无符号数低于或等于(higher/lower or same) GE/LT: 有符号数大于或等于/有符号数小于(greater or equal / less than) GT/LE: 有符号数大于/有符号数小于或等于(greater than / less or equal) MI/PL: 负/非负 VS/VC: 溢出/不溢出(overflow set / overflow clear) CS/CC: 进位/无进位(carry set / carry clear)
1. 2. 3.
4. 5. 6. 7. 8.
1 总体介绍
指令分类、特点、格式、条件码
1.1 指令分类
ARM指令集总体分为6类指令
数据处理指令:数据传输指令,算术指令,逻辑指令,比较指 令,乘法指令,前导零计数。 程序状态访问指令:mrs和msr。 跳转指令:b和bl。 访存指令:单数据访存指令,多数据访存指令,信号量操作指 令。 异常中断产生指令:swi和bkpt。 协处理器指令。
P位 堆栈用 一般数据存取 L位 存取 前变址/后 变址
U位 加/减
空向下生长型(之前增量) 满向下生长型(之后增量) 空向上生长型(之前增量) 满向上生长型(之后增量) 满向上生长型(之前增量) 空向上生长型(之后增量) 空向下生长型(之前增量) 满向下生长型(之后增量)
LDMED
LDMIB
1
1
移位操作过程
移位操作
在任何数据处理指令中,第二寄存器操作数可以 有应用该操作数的移位操作. 逻辑移位
LSL:逻辑左移字的最小位空位清零
LSR:逻辑右移字的最大位空位清零.
移位操作 (cont’d)
算术移位
ASR: 正数的ASR= LSR
循环移位: ROR, RRX
2.4 寄存器间接寻址
指令中的地址码给出某一通用寄存器的编号。在被指定的 寄存器中存放操作数的有效地址,而操作数则存放在存储单元 中,即寄存器为地址指针。 LDR R0,[R1] ; R0 =[R1] STR R0,[R1] ; [R1] = R0 寄存器间接寻址使用一个寄存器(基址寄存器)的值作为 存储器的地址。
3 数据处理指令
数据传输指令:mov和mvn 算数指令:add、adc、sub、sbc,rsb和rsc 逻辑指令:and、orr、eor和bic 比较指令:cmp、cmn、tst和teq
3.1 数据处理指令的特点
所有的操作数要么来自寄存器,要么来自立即数,不会来自内 存。 如果有结果,则结果一定是为32位宽,并且放在一个寄存器 中,不会写入内存。(有一个例外:长乘法指令产生64位结 果)
R9' R5 R1 R0
101816 100C16 100016
R9'
R5 R1 R0
101816 100C16 100016
R9
R9
STMIA R9! , {R0 , R1 , R5}
STMIB R9! , { R0 , R1 , R5 }
101816 R9 R5 R1 R0 100C16 100016 R9 R9' R5 R1 R0
ARM指令系统与编程
石秀民 shixiumin@
1-Dec, 2006
目录
总体介绍:指令分类,特点,格式,条件码 ARM 指令寻址方式 数据处理指令:数据传输指令,算术指令,逻辑指 令,比较指令,乘法指令,前导零计数 程序状态访问指令 跳转指令 单数据访存指令 多数据访存指令 其它指令:信号量操作指令,异常中断产生指令, 协处理器指令
Rd
Operand2
<Opcode>{<cond>}{s} <Rd>, <Rn>, <Operand2> Cond:指令的条件码。 Opcode:指令操作码。 S:操作是否影响cpsr。 Rn:包含第一个操作数的寄存器编码。 Rd:目标寄存器编码。 Operand2:第2操作数。
1.3 ARM指令的格式(续)
2.5 变址寻址
变址寻址就是将基址寄存器的内容与指令中给 出的位移量相加,形成操作数有效地址。变址寻 址用于访问基址附近的存储单元,包括:
基址加偏移 基址加索引寻址。 寄存器间接寻址是偏移量为0的基址加偏移寻址。
基址加偏移寻址中的基址寄存器包含地址,需加(或减) (最大4 KB)的偏移来计算访问的地址。 LDR R0,[R1,#4] ; R0 =[R1+4] 这是前索引寻址方式。 带自动索引的前索引寻址。 LDR R0,[R1,#4]! ; R0= [R1+4] ; R1 =R1+4 “!”符号表明指令在完成数据传送后应该更新基址寄存器
1.4 ARM指令的条件执行
几乎所有的ARM指令可包含一个可选的条 件码,只有在cpsr中的条件标志位满足指定 的条件时,指令才会被执行。不符合条件 的代码依然占用一个时钟周期(相当于一 个NOP指令)。
if ( (a == b) && (c == d) ) { e++; } // r0, r1, r2, r3, r4 : a, b, c, d, e cmp r0, r1 cmpeq r2, r3 addeq r4, r4, #1
相关文档
最新文档