ARM指令汇编语言

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

1.9 块拷贝寻址 块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。
例: LDMIA R0,{R1-R5}; STMIA R1,{R1-R5};
第一条指令从以 R0 的值为起始地址的存储单元中取出 5 个字的数据,第二条指令将取出的 数据存入以 R1 的值为起始地址的存储单元中。实际上是多寄存器寻址的组合。
◆ 跳转指令 ◆ 数据处理指令 ◆ 程序状态寄存器(PSR)处理指令 ◆ 加载/存储指令 ◆ 协处理指令 ◆ 异常产生指令 ARM 指令集格式如下图所示:
图 2.1 ARM 指令集格式 可以看到,[31:28]:条件代码域。[27:20]:指令代码域。[19:16]:地址基址 Rn 域。[15:12]:
例如: ADDEQS R0,R1,#8; 其中操作码为 ADD,条件域 cond 为 EQ,
S 表示该指令的执行影响 CPSR 寄存器的值,目的寄存器 Rd 为 R0,第一个操作数寄存器 Rn 为 R1,第二个操作数 OP2 为立即数#8。
第 2 操作数
一、立即数控位的寄存器移位表达式 立即数控位,就是寄存器 Rm 移位的位数由立即数控制。在 RRX 移位方式不需要立即数控 位。
R5,LSR#02 表明把 R5 中的数据右移 2 位,空位补 0,把最后移出的位赋给程序状 态寄存器的 c 位。
1.4.3 ASR(Arithmetic Shift Right)算术右移 : 向右移位,移出的位丢失,最左端保持不变。
注:最后一个右移出的位存放于状态寄存器 CPSR 的 C 位中。这种移位对有符号数据使用 时可保持符号位不变。 指令格式:Rx,ASR <op1> 举例:
1.10 块拷贝寻址 块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。
例: LDMIA R0,{R1-R5}; STMIA R1,{R1-R5};
第一条指令从以 R0 的值为起始地址的存储单元中取出 5 个字的数据,第二条指令将取出的 数据存入以 R1 的值为起始地址的存储单元中。实际上是多寄存器寻址的组合。
作数的物理地址。
例:
LDR R0,[R1,#5] ; R0=[R1+5] 基址 R1,偏移量是立即数 5。
LDR R0,[R1,R2] ; R0=[R1+R2]
1.7 相对寻址 相对寻址同基址变址寻址相似,区别只是将程序计数器 PC 作为基址寄存器,指令中
的标记作为地址偏移量。
例:
BEQ process1 …… process1 ……
这种移位多用于多位数计算中。 指令格式:Rx,RRX 举例:
R2,RRX 表明 R2 内的数据向右移一位,把右侧移出的位送入状态寄存器 C 中,C 位中的值放入左侧的空位处。
注意:在各种移位方式中,假设移位位数为 n,则 n 须遵守以下规则: ASR 1≤n≤32 LSL 0≤n≤31 LSR 1≤n≤32 ROR 1≤n≤31 RRX 只右循环一位
Rm,LSL#03
本例中,移位位数为 3. 移位方式有五种: LSL n (0≤n≤31) LSR n (1≤n≤32) ASR n (1≤Βιβλιοθήκη Baidu≤32) ROR n (1≤n≤31) RRX 含进位标志 C 在内的循环右移
二、寄存器控位的寄存器移位表达式 所谓寄存器控位,就是寄存器 Rm 移位的位数由另一个寄存器 Rs 来控制,其中 Rs 为通用 寄存器,不可使用 R15。规定 0≤Rs≤31.
1.2 寄存器寻址
在寄存器寻址方式下,寄存器的值即为操作数,寄存器本身就是操作数地址。在 51 系 列单片机中,可寻址的寄存器是当前工作寄存器 R0~R7,A、B 和 DPTR。 在 ARM 系列的任一个模式,都有 R0~R14、PC、CPSR。 例:
ADD R0,R1,R2 ; R0=R1+R2
MOV R0,R1
R4,ASR#04 表明 R4 内数据向右移 4 位,符号位不变,最后移出的位也送入状态 位 C 中。
1.4.4 ROR(Rotate Right)循环右移 : 向右移位,右端移出的位填充在左端空位处。
注:最后一个右移出的位同时存放于状态寄存器 CPSR 的 C 位中。 指令格式:Rx,ROR <op1> 举例:
ARM 指令集和汇编语言程序
姓名:何瑞平 学号:201120928 专业:电路与系统
本章主要介绍以下内容:
一、ARM 寻址方式
包含 9 种: 立即数寻址 寄存器寻址 寄存器移位寻址 寄存器间接寻址 基址变址寻址 相对寻址 多寄存器寻址 块拷贝寻址 堆栈寻址 寻址空间 :51 系列是 16 位地址总线,寻址空间为:215 。ARM 系列为 32 位地址总线,寻 址空间为:231
例如:ADD 表示算术加操作指令。 {<cond>} 是指令执行的条件(可选后缀),可选项。 {S} 决定指令的操作是否影响 CPSR 的值,可选项。 <Rd> 表示目标寄存器,必有项。 <Rn> 表示包含第 1 个操作数的寄存器,当仅需要一个源操作数时可省略 <Operand2> 表示第 2 个操作数,可选项。
R4,LSL#06 表明把 R4 的值逻辑左移 6 位,空位补 0,把最后移出的位赋给程序状态 寄存器 CPSR 的 C 位。
1.4.2 LSR(Logical Shift Right)逻辑右移 : 向右移位,右侧移出的位丢失;左端空出位补 0;
注:最后一个右移出的位存放于状态寄存器 CPSR 的 C 位中。移出 n 位相当于除以 2 的 n 次幂。 指令格式:Rx,LSR <op1> 举例:
移位操作在 ARM 指令集中不作为单独的指令使用,ARM 指令集共有 5 种位移操作。
1.4 ARM 指令集的 5 种位移操作 1.4.1 LSL(Logical Shift Lef)逻辑左移 : 向左移位,左侧移出的位丢失;右端空出位补 0;
注:最后一个左移出的位存放于状态寄存器 CPSR 的 C 位中。移出 n 位相当于乘以 2 的 n 次幂。 指令格式:Rx,LSL <op1> 举例:
x86 指令集 非规整指令格式 即:非正交指令格式 二地址指令 指令隐含决定运算完毕后是否改变状态标志 状态标志位有 6 位 单一指令密度 有整数除法指令 专用条件判断指令进行程序分支 没有适合 DSP 处理的乘加指令 运算指令能够访问存储器
2.4ARM 指令格式
一条典型的 ARM 指令语法如下所示: <opcode>{<cond>}{S} <Rd>, <Rn> {,<Operand2>} 其中: <opcode > 是指令助记符,决定了指令的操作。
目标或源寄存器 Rd 域。[11:0]:地址偏移或操作寄存器、操作数区域。
ARM 指令集的基本特点 AMR 指令集有很多的未定义指令。 ARM 指令代码最高 4 位[31:28]是条件码域。ARM 指令一般把[27:20]作为指令代码域。 位[19:0]包含立即数、寄存器和偏移量等信息。 ARM 指令集为寄存器寻址安排 4 位代码,可寻址 16 个寄存器。 多数情况下,目标寄存器 Rd 的寄存器编号存放在[15:12]位域。 位[20]是重要的条件标志(S)存放位。
1.11 堆栈寻址 堆栈是一块用于保存数据的连续内存,是按先进后出(FILO)的原则存取数据的存储
区。使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向
下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。同时,根据堆栈的生成方式, 又可以分为递增堆栈和递减堆栈。
堆栈寻址用于数据栈与寄存器组之间批量数据传输。 当数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。
例:
STMFD R13!,{R0,R1,R2,R3,R4}; LDMFD R13!,{R0,R1,R2,R3,R4}
第一条指令,将 R0-R4 中的数据压入堆栈,R13 为堆栈指针; 第二条指令,将数据出栈,恢复 R0-R4 原先的值。
当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低地址生成时,称 为递减堆栈。这样就有 4 种类型的堆栈工作方式。
ARM 堆栈的几种形式 1.满栈递增方式 FA(Full Ascending) 与 51 系列的堆栈方式相同,堆栈指针指向最后入栈的数据位置。数据入栈时,堆栈指 针是增计数。 2.空栈递增方式 EA(Empty Ascending) 和满栈递增的区别在于,堆栈指针指向下一个入栈数据的位置。 3.满栈递减方式 FD(Full Descending) 堆栈指针指向最后入栈的数据,数据入栈时堆栈指针是减计数。 4.空递减方式 ED(Empty Descending) 和满栈的区别在于,堆栈指针指向下一个入栈数据的位置。
2.1 与 Thumb 指令集的区别
ARM 指令集和 Thumb 指令集具有以下共同点: ⒈较多的寄存器,可以用于多种用途。 ⒉对存储器的访问只能通过 Load/Store 指令。
2.2ARM 指令集和 Thumb 指令集的不同点:
2.3 与 x86 处理器的区别
ARM 指令集 规整指令格式 即:正交指令格式 三地址指令 由指令的附加位决定运算完毕后是否改变状态标志 状态标志位只有 4 位 有两种指令密度 无整数除法指令 大多数 ARM 指令都可以条件执行 有适合 DSP 处理的乘加指令 Load/Store 访存体系结构
二、ARM 指令集的基本特点 ARM 指令系统简介
ARM9 处理器支持两种指令集,即 32 位的 ARM 指令集和 16 位 Thumb 指令集。 ARM 微处理器的指令集是加载/存储型的,即指令集仅能处理寄存器中的数据,而且处理 结果都要放回寄存器中;而对系统存储器的访问则需要专门的加载/存储指令来完成。 ARM 指令集是特殊的指令集,32 位编码包含的信息量很大,每一条语句完成的功能很强, 在多寄存器操作指令中一次最多可以完成 16 个寄存器的数据传送。 ARM 指令集按指令功能通常分为 6 大类:
1.8 多寄存器寻址 在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。连续的寄存器间用“-”
连接,否则用“,”分隔。
例: LDMIA
R0,{R1-R5} ;R1=[R0],R2=[R0+4],R3=[R0+8]
;R4=[R0+12],R5=[R0+16]
指令中 IA 表示在执行完一次 Load 操作后,R0 自增 4。该指令将以 R0 为起始地址的 5 个字 数据分别装入 R1,R2,R3,R4,R5 中。
1.5 寄存器间接寻址 寄存器中的值为操作数的物理地址,而实际的操作数存放在存储器中。在 51 系列,可间
接寻址的寄存器有 R0、R1,DPTR。在 ARM 中,可间接寻址的寄存器有 R0~R15.
例:
STR R0,[R1] ; [R1]=R0 LDR R0,[R1] ; R0=[R1]
1.6 基址变址寻址 将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操
; R0=R1
1.3 寄存器移位寻址
寄存器移位寻址是 ARM 特有的寻址方式,其操作数由寄存器的数值做相应移位而得到。 移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表 示。 例:
ADD R0,R1,R2,ROR #5 ;R0=R1+R2 循环右移 5 位
MOV R0,R1,LSL R3 ;R0=R1 逻辑左移 R3 位
R4,ROR#03 表明把 R4 内的数据向右移 3 位,移出的位填充到左端空位处,把最 后一个右移出的位同时存放于状态寄存器的 C 位中。
1.4.5 RRX(Rotate Right extended By 1 Place) 带扩展的循环右移:
向右只移一位,左侧空位由状态寄存器 C 位填充,右侧移出的位移进位状态位 C 中
1.1 立即数寻址
在立即数寻址中,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操 作数也称为立即数。
例:
ADD R0,R1,#5; MOV R0,#0x55;
R0=R1+5 R0=0x55
其中:操作数 5,0x55 就是立即数,立即数在指令中要以“#”为前缀,后面跟实际数值。 十进制立即数表达举例:#0005、#01234; 十六进制立即数表达举例:#0x0005、#0x0FFFF;
相关文档
最新文档