一、ARM介绍

1) arm汇编中,程序下一步执行哪一条指令,是根据程序计数器(PC)的值来决定。

类比于8086的CS:IP的功能。

2) 8086属于CISC(复杂指令集),每条指令长度不等,arm是RISC(精简指令集),所有指令等长(例如都为32位)。

3)ARM指令代码一般分为5个区域:

第1个域是4位[31-28]的条件码域

第2个域是[27-20],除了指令编码外,还包含几个很重要的指令特征和可选后缀的编码

第3个域是地址基址,是4位[19-16],为R0-R15共16个寄存器编码

第4个域是目标或源寄存器Rd,是4位[15:12],为R0-R15共16个寄存器编码

第5个域是地址偏移或操作寄存器、操作数区[11-0]。

ARM指令代码格式

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

格式中<>的内容必不可少,{}中的内容可省略

<opcode>是操作码,如ADD表示算数加法

{<cond>}表示指令执行的条件域,如EQ、NE等。

{S}决定指令的执行结果是否影响CPSR的值,使用该后缀则指令执行的结果影响CPSR的值,否则不影响

<Rd>表示目的寄存器

<Rn>表示第一个操作数,为寄存器

<op2>表示第二个操作数,可以是立即数、寄存器或寄存器移位操作数。

 

4)指令的可选后缀

指令中使用"S"后缀时,指令执行后程序状态寄存器的条件标志位将被刷新;不使用"S"后缀时,指令执行后程序状态寄存器的条件标志将不会发生变化。

如果指令地址表达式中不含"!"后缀,则基址寄存器的地址值不会发生变化。指令中的地址表达式中含有"!"后缀时,指令执行后,基址寄存器中的地址值将发生变化,变化的结果如下:

基址寄存器中的值(指令执行后) = 指令执行前的值 + 地址偏移量

 

posted on 2018-11-12 19:07  迷心迷  阅读(1269)  评论(0编辑  收藏  举报