我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 指令寄存器 >

ARM处理器寄存器和汇编指令系统

归档日期:06-28       文本归类:指令寄存器      文章编辑:爱尚语录

  ARM体系结构支持7种处理器模式,分别是:用户、FIQ、IRQ、管理、中止(abort)、未定义和系统模式。除了用户模式外,其余都称之为特权模式。除了用户和系统模式外,其余都称之为异常模式。

  ARM处理器总共有37个寄存器:包括31个通用寄存器、包括程序计数器(PC)、和6个状态寄存器。这些寄存器在不同模式下,不能被同时看到,有些名称是重叠的。分为三类:不分组寄存器,分组寄存器和程序计数器

  每一个访问的物理寄存器取决于当前的处理器模式,有些是共用的,而有些事分离的。具体可以查询相关资料。

  CPSR只有一个,代表了当前的程序状态。而每个异常模式都有独立的一个SPSR,用于保存CPSR的状态。

  包括有寄存器寻址、立即寻址、寄存器移位寻址、寄存器间寻址、变址寻址、多寄存器寻址、堆栈寻址、块复制寻址和相对寻址

  几乎所有的ARM指令都可以包含一个可选的条件码,句法中以{cond}来标识。可用的条件码如下面所示。几乎所有的ARM数据处理指令均可以根据执行结果来选择是否更新条件码标志,即在指令中包含后缀S。

  cond 就是上面所说的条件码,因此指令可以变成LDREQ或STRNE类似的名称,表示满足某些条件时该条指令才会执行。

  B 可选后缀,表示传送Rd的最低有效字节,就是所谓的无符号字节传送,字节加载的时候是用0来扩展到32位的。

  T 可选后缀,即使处理器是在特权模式下,存储系统也将访问看成是处理器在用户模式下。不能和前索引偏移一起使用。

  Rn 存储器的基址寄存器。若指令是带写回的前索引或后索引(后索引都是写回的),则Rd和Rn不能相同

  label 程序相对偏移表达式。label必须是当前指令的+-4KB范围内

  3.3)LDR和STR(双字)加载两个相邻的存储器和存储两个相邻的寄存器,语法如下:

  Rd 加载或存储寄存器其中一个,另一个是R(d+1)。但Rd必须是偶数寄存器,且不能是R14。

  Rn 除非指令为零偏移,或不带写回的前索引,否则Rn不允许与Rd和R(d+1)相同

  3.4)LDM和STM 加载多个寄存器或存储多个寄存器,可以传送R0~R15的任何组合

  Rm Rm的内容存储到存储器。如果Rm和Rd的相同,则是交换寄存器和存储器的内容

  Rn Rn的内容指定要进行数据交换的存储器的地址。 Rn必须和Rm和Rd不同

  4.1)灵活的第二操作数,在数据处理指令中会经常出现第二操作数,即Operand2,它有如下的两种可能形式。

  immed_8r 取值为数字常量的表达式。常量必须对应8位位图在32位字中被循环移位偶数位(0,2,4,6,...,28,30)后的值

  Rm 存储第二操作数数据的寄存器,可以用各种方法对寄存器中的位图进行移位或循环移位,操作结果用于Operand2

  type Rs 其中type为上面ASR、LSL、LSR、ROR中的一种;Rs为提供移位量的寄存器,仅使用最低有效字节

  SBC 从Rn的值中减去Operand2的值,若进位标志是清零的,则结果减去1

  CMP比较大小,从Rn中减去Operand2的值,但丢弃结果,更新标志位,指令的主要目的是更新标志位

  Rm 操作数寄存器。CLZ对Rm中的前导零的个数进行计数,结果放在Rd中,若Rm全为0,则结果为32

  MLA 将Rm和Rs相乘,再加上Rn的值,将最低有效32位结果放在Rd中

  UMULL 将Rm和Rs中的值解释为无符号整数。将两数相乘,并将结果的最低32位放RdLo中,高32位放RdHi中

  UMLAL 将Rm和Rs中的值解释为无符号整数。将两数相乘,并将结果加回到RdLo和RdHi的64位无符号整数上。

  SMULL 将Rm和Rs中的值解释为有符号补码整数。将两数相乘,并将结果的最低32位放RdLo中,高32位放RdHi中

  SMLAL 将Rm和Rs中的值解释为有符号补码整数。并将结果加回到RdLo和RdHi的64位无符号整数上。

  label 是程序相对偏移表达式。两条指令都会令程序转移到label上,而BL还会将原来的下一条指令地址保存在R14上

  7.3)MSR 将立即数或通用寄存器的内容加载到CPSR或SPSR的指定区域

  即是用当前PC的值,去减去某一个适当的值(编译器自动计算),从而得到expr这个标号的相对地址,将这个标号的相对于当前pc的偏移地址存储到register中。正是因为这样,这条指令才是一条伪指令,这样的好处是可以绕过程序入口地址的影响,而始终能跳转到准确的地址,因为B这样的跳转指令是跳转到绝对地址上的,而ADR可以获取到一个相对于当前PC的地址,所以用处非常大。

本文链接:http://f-taiken.net/zhilingjicunqi/147.html