ARM学习----指令

来源:互联网 发布:linux sqlcmd 编辑:程序博客网 时间:2024/04/28 21:44

首先,这个是为一个有汇编语言基础的人看的,我在写的过程中希望能有人来为我指点,谢谢帮助我的人。

首先是ARM的指令格式:

所有的ARM指令语句都有这样的格式:

{。。。}{。。。。}{。。。。}

分为三部分,

{symbol} {instruction | directive | pseudo-instruction} {;comment}

这里的,“{}”是指,可选,“|”是指或者。。

每条指令都是以32位二进制数进行编码的。

32位是指ARM本身是32位的处理器。自然指令也设计成32位的,并且也会兼容16位的指令,Thumb集

Thumb集是指除ARM指令集以外,ARM处理器所支持的另一个指令集。它的特点是16位的,代码密度高。

代码密度是指完成同一个功能所需要的代码量大小。

编码是指计算会为每一条汇编指令分别指定一个唯一的二进制序列。32位二进制数组成。

ARM指令的总体分类:六类。

  1. 数据处理指令
  2. Load/Store指令
  3. 跳转指令
  4. 程序状态寄存器处理指令
  5. 协处理器指令
  6. 异常产生指令

 

ARM指令使用的基本格式:

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

<opcode> :是指令码,表示这个指令的作用,

<cond>:是条件位,也就是上文提到的,<cond>它会自动判断CPSR寄存器中的值根据表格进行执行。

{S}:是置位标志,有此标志的指令,在执行后会根据结果,更新CPSR寄存器。

<Rd>:是目标寄存器,存放结果

<Rn>:第1操作数寄存器

{,<operand2>}:第2操作数

第2操作数有可能是一个立即数,也有可能是一个寄存器,这个就是下面我们要讨论的寻址问题。如何找到指令中所指的操作数,是一个大学问,也同时决定了,一个CPU的能力,和水平。也是为程序员所能提供的,操作机器的方式。

ARM的寻址方式

七种寻址方式:

立即寻址、寄存器寻址、寄存器间接寻址、基址加偏址寻址、堆栈寻址、块拷贝寻址、相对寻址。

1.立即寻址:

顾名思义就是“马上”就使用这个“”去参与指令操作,因为这个“”不用找,它就放在指令里面。同指令一起编译、解码、执行。