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

知识目录

  • ARM指令分类及指令格式
    • ARM指令分类
    • ARM指令格式
      • 指令基本格式
      • 指令的条件域
    • 移位操作
  • ARM指令的寻址方式
  • ARM指令集
    • 1.数据处理类指令
    • 2.程序状态寄存器访问指令
    • 3.分支指令
    • 4.加载/存储指令
  • ARM汇编器所支持的伪指令
    • 伪指令概念
      • 符号定义伪指令
      • 数据定义伪指令
      • 汇编控制伪指令
      • 其他伪指令

ARM指令分类及指令格式

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

ARM指令分类

ARM微处理器的指令集可以分为分支指令、数据处理指令、程序状态寄存器(CPSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类
【计算机三级嵌入式】考前学习笔记(二)——基本寻址方式、ARM指令集与伪指令介绍_第1张图片
【计算机三级嵌入式】考前学习笔记(二)——基本寻址方式、ARM指令集与伪指令介绍_第2张图片
【计算机三级嵌入式】考前学习笔记(二)——基本寻址方式、ARM指令集与伪指令介绍_第3张图片

ARM指令格式

指令基本格式

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

其中<>为不可省略,{}为可以省略,opcode。cond与S之间没有分隔符,{S}与Rd之间用空格隔开
【计算机三级嵌入式】考前学习笔记(二)——基本寻址方式、ARM指令集与伪指令介绍_第4张图片

指令的条件域

指令的条件域:当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件地执行。当指令的执行满足条件时,指令被执行,否则指令被忽略。
每一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面与指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示"相等则跳转”,即当CPSR中的Z标志置位时发生跳转。指令的条件码见下图:
【计算机三级嵌入式】考前学习笔记(二)——基本寻址方式、ARM指令集与伪指令介绍_第5张图片

移位操作

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

ARM指令的寻址方式

立即寻址
立即寻址也称为立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只寻取出指令也就取到了操作数,这个操作数被称为立即数
寄存器间接寻址
寄存器间接寻址就是以寄存器中的值作为操作数地址,而操作数本身存放在存储器中,用于间接寻址的寄存器必须用[]括起来。[]可以理解为将寄存器中的内容读取为立即数
寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用一种方式,也是一种执行效率较高的寻址方式。
基址加变址寻址
基址加变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用语访问某基地址附近的地址单元
【计算机三级嵌入式】考前学习笔记(二)——基本寻址方式、ARM指令集与伪指令介绍_第7张图片
相对寻址
与基址变址寻址方式相类似,相对寻址以程序计数器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 位清除 指定位清零
MUL 32位乘法 只取结果的低32位
MLA 32位乘加
SMULL 64位有符号数乘法指令 RdL ←Rm × Rx的低32位 RdH ← Rm×Rx的高32位
SMLAL 64位有符号数乘加指令
UMULL 64位无符号数乘法指令
UMLAL 64位无符号数乘加指令

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汇编语言的伪指令在不同编译环境下有不同的编写形式和规则。

符号定义伪指令

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

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

数据定义伪指令

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

汇编控制伪指令

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

其他伪指令

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

你可能感兴趣的:(计算机三级嵌入式,学习,arm,arm开发,嵌入式硬件)