【计算机三级嵌入式】考前学习笔记(二)——基本寻址方式、ARM指令集与伪指令介绍

ARM指令分类及指令格式

ARM处理器支持32位的ARM指令集,也支持16位的Thumb指令集,从ARMv6开始,新的ARM处理器支持16/32位的Thumb-2指令集,二ARMv7-M仅支持Thumb-2

ARM指令分类

ARM微处理器的指令集可以分为分支指令、数据处理指令、程序状态寄存器(CPSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ARM指令格式

指令基本格式

<opcode>{<cond>}{S}  <Rd>,<Rn>{<op2>}

其中<>为不可省略,{}为可以省略,opcode。cond与S之间没有分隔符,{S}与Rd之间用空格隔开
在这里插入图片描述

指令的条件域

指令的条件域:当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件地执行。当指令的执行满足条件时,指令被执行,否则指令被忽略。
每一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面与指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示"相等则跳转”,即当CPSR中的Z标志置位时发生跳转。指令的条件码见下图:
在这里插入图片描述

移位操作

在这里插入图片描述

ARM指令的寻址方式

立即寻址
立即寻址也称为立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只寻取出指令也就取到了操作数,这个操作数被称为立即数
寄存器间接寻址
寄存器间接寻址就是以寄存器中的值作为操作数地址,而操作数本身存放在存储器中,用于间接寻址的寄存器必须用[]括起来。[]可以理解为将寄存器中的内容读取为立即数
寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用一种方式,也是一种执行效率较高的寻址方式。
基址加变址寻址
基址加变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用语访问某基地址附近的地址单元
在这里插入图片描述
相对寻址
与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为及地址,指令中的地址标号作为偏移量,将两者相加后得到操作数的有效地址
堆栈寻址
堆栈是一种数据结构,按先进后出(FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈 (Descending Stack)。当堆栈由低地址向高地址生成时,称为递增堆栈;当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式。

ARM指令集

1.数据处理类指令

可以分为数据传送指令算数逻辑运算指令和比较指令等

指令格式操作备注
MOV数据传送
MVN取反传送
CMP R1,R0比较将寄存器R1的值减R0的值,根据结果设定CPSR的状态标志位
CMN反值比较
TST位测试
TEQ相等测试
ADD加法
ADC带进位加法Rd←Rn + op2 + C
SUB减法
SBC带借位减法Rd ←Rn - op2 - !C
RSB反向减法Rd ← op2 - Rn
RSC带借位反向减法
AND逻辑与
ORR逻辑或
EOR逻辑异或
BIC位清除指定位清零
MUL32位乘法只取结果的低32位
MLA32位乘加
SMULL64位有符号数乘法指令RdL ←Rm × Rx的低32位 RdH ← Rm×Rx的高32位
SMLAL64位有符号数乘加指令
UMULL64位无符号数乘法指令
UMLAL64位无符号数乘加指令

2.程序状态寄存器访问指令

MRS - 程序状态寄存器到通用寄存器的数据传送指令
格式:MRS |cond| Rd,< PSR >;PSR可以是CPSR 或者SPSR
用途:MRS指令用于将程序状态寄存器的内容传送到通用寄存器中

3.分支指令

指令名称操作备注
B转移指令一旦遇到一个B指令,处理器将立即跳转到给定的目标地址,从那里继续执行
BX带状态切换的转移指令跳转到指令中所指定的由寄存器Rn与0xFFFF FFFE 相与后的结果指示的目标地址
BL带返回的转移指令在跳转之前,会在寄存器R14中保存PC的当前值
BLX带返回且带状态切换的转移指令

4.加载/存储指令

单一数据加载存储指令

指令名称操作备注
LDR字数据加载指令从存储器中将一个32位的字数据穿送到目的寄存器中
LDRB字节数据加载指令将一个8位的字节数据传送到目的寄存器当中,同时将寄存器的高24位清零
LDRH半字数据加载指令16位数据
STR字数据存储指令将一个32位的字数据传送到存储器中
STRB字节数据存储指令8位的字节数据
STRH半字数据存储指令16位的半字数据
R→字 32位
RB→Bit字节 8位
RH→半字 16位

批量数据加载存储指令
LDM :批量数据加载指令
STM :批量护具存储指令

ARM汇编器所支持的伪指令

伪指令概念

ARM 处理器的汇编语言与C 语言等高级语言不同,它是面向机器的一种第几语言,可以直接对硬件进行操作,执行效率高,但进行复杂程序设计时难度较大
在ARM汇编语言程序中,有一些特殊的指令助记符。这些助记符与指令系统的助记符不用,没有相应的操作吗,通常称为伪指令,他们完成的操作成为伪操作,伪指令一般与编译程序有关,因此ARM汇编语言的伪指令在不同编译环境下有不同的编写形式和规则。

符号定义伪指令

在这里插入图片描述

G - global全局
L - 局部
A - 数值
L - logistics luoji
S - string字符

数据定义伪指令

在这里插入图片描述

汇编控制伪指令

在这里插入图片描述

其他伪指令

其他伪指令

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值