打印
[ZLG-ARM]

ARM学习笔记_3——ARM指令集寻址方式(转)

[复制链接]
1887|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yoyowodeai|  楼主 | 2011-12-23 17:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
=>ARM指令集寻址方式可分为四大类:数据处理指令寻址,Load/Store指令的寻址,批量Load/Store指令的寻址和协处理指令寻址
=>每条ARM指令占有4个字节,典型ARM指令编码格式如下
·cond(bit[31:28]):指令执行的条件码
·type(bit[27:26]):指令类型码,00--数据处理指令以及杂类Load/Store指令,01--Load/Store指令,10--批量Load/Store指令及分支指令,11--协处理指令与软中断指令
·I(bit[25]):第二操作数类型标志码。在数据处理指令中I=1表示第二操作数是立即数,I=0表示是移位寄存器
·opcode(bit[24:21]):指令操作码
·S(bit[20]):决定指令的操作结果是否影响CPSR。
·Rn(bit[19:16]):包含第一个操作数的寄存器编码
·Rd(bit[15:12]):目标寄存器编码
·operand2(bit[11:0]):指令第二个操作数
=>ARM汇编指令语法格式:
{}{S},,
=>数据处理指令第二操作数的构成方式
·立即数方式--每个立即数由一个8位的常数进行32位循环右移偶数位得到
·寄存器方式--操作数即为寄存器的数值
·寄存器移位方式--ARM指令中移位操作包括逻辑左移LSL,逻辑右移LSR,算术左移ASL,算术右移ASR,循环右移ROR,带扩展的循环右移RRX(与C标志位有关)
=>数据处理指令寻址方式具体可分为5种类型
·第二操作数为立即数,汇编语法格式:#,例如:MOV R0,#0xFC0  ;R0<—0xFC0
·第二操作数为寄存器,汇编语法格式:,例如:ADD R0,R1,R2 ;R0<—R1+R2
·第二操作数为寄存器移位方式,且移位的位数为一个5位的立即数,汇编语法格式:,#
   例如:MOV R0,R0,LSL #n ;R0<—R0*(2^n)(n=0~31)
·第二操作数为寄存器移位方式,且移位的数值放在寄存器中,汇编语法格式:,,移位的位数由Rs的低八位决定
·第二操作数为寄存器进行RRX移位得到
=>Load/Store指令是对内存进行存储/加载数据操作的指令,根据访问的数据格式的不同,将这类指令的寻址分为字,无符号字节的Load/Store指令寻址和半字,有符号字节Load/Store指令寻址两类
·地址计算方法有
   1.寄存器间接寻址,例如LDR R0,[R1]  ;R0<—[R1]
   2.基址加变址寻址——常用于访问某基地址附近的地址单元,该寻址方法分为前变址法和后变址法,这两者区别类似于C语言里的i++和++i的区别
  LDR R0,[R1,#4]   ;R0<—[R1+4]
  LDR R0,[R1,#4]!  ;R0<—[R1+4]且R1<--R1+4
  LDR R0,[R1],#4   ;R0<—[R1]且R1<--R1+4
·字,无符号字节的Load/Store指令寻址:
   1.Addressing_mode中的偏移量为立即数,例如
  LDR R0,[R1,#4]!  ;R0<—[R1+4]且R1<--R1+4
   2.Addressing_mode中的偏移量为寄存器的值,例如
  LDR R0,[R1],R2  ;R0<—[R1]且R1<--R1+R2
   3.Addressing_mode中的偏移量通过寄存器移位得到,例如
  LDR R0,[R1],R2,LSL #2  ;R0<-[R1],R1=R1+R2*4
·半字,有符号字节寻址——这类指令可用来加载有符号字节,加载有符号半字,加载/存储无符号半字。一般称这类指令为‘杂类的Load/Store指令’。
=>批量Load/Store指令寻址方式——即通常所说的多寄存器寻址,允许一条指令最多传送16个寄存器。
·批量Load/Store指令在实现寄存器组和连续的内存单元中数据传递时,地址的变化方式有以下4种类型:
   1.后增IA:每次数据传送后地址加4
  2.先增IB:每次数据传送前地址加4
  3.后减DA  4.先减DB
·根据堆栈指针的指向位置的不同可以将堆栈分为满堆栈和空堆栈
·根据堆栈的生成方式,又可以分为递增堆栈和递减堆栈
=>协处理器加载/存储指令的寻址方式,根据内存地址的构成方式,可分为索引格式和非索引格式
·汇编语法格式如下:
  {}{L},,
   其中opcode为指令操作码,coproc为协处理器名称,addressing_mode为指令寻址模式
=>协处理器数据处理指令的寻址方式主要通过寄存器寻址

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

191

主题

1265

帖子

2

粉丝