第三章-Cortex-A8处理器编程(下)

六.指令系统

Cortex-A8采用ARMv7架构,包含:

1)      32位的ARM指令集

2)      16位和32位混合的Thumb-2指令集

3)      ThumbEE指令集

主要内容包括:

(一).指令格式

ARM指令的基本格式如下:<opcode> {<cond>} {S}    <Rd> ,<Rn>{,<operand2>}

其中<>号内的项是必须的,{}号内的项是可选的。各项的说明如下:

Ø  opcode:指令助记符;

Ø  cond:执行条件;

Ø  S:是否影响CPSR寄存器的值;

Ø  Rd:目标寄存器;                 

Ø  Rn:第1个操作数的寄存器;

Ø  operand2:第2个操作数;能够提高代码效率。它有如下的形式:

#immed_8r——常数表达式;该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。

MOV         R0,#1

AND R1,R2,#0x0F

Rm——寄存器方式;在寄存器方式下,操作数即为寄存器的数值。

SUB  R1, R1, R2

MOV         PC, R0

Rm,shift——寄存器移位方式;将寄存器的移位结果作为操作数,但Rm值保持不变,移位方法如下:

ADD R1,R1,R1,LSL #3        ;R1=R1+R1*8=9R1

SUB R1,R1,R2,LSR R3       ;R1=R1-(R2/2R3)                 

(二).ARM指令集

32位ARM指令集由13种基本指令类型组成,分成四大类:

1)        3种类型的存储器访问指令。用于控制存储器和寄存器之间的数据传送。第一种类型用于优化的灵活寻址及交换数据;第二种类型用于快速上下文切换;第三种类型用于交换数据。

2)        3种类型的数据处理指令,使用片内的累加器(ALU)、桶形移位器和乘法器,对寄存器完成高速数据处理操作。

3)        4种类型的分支指令,用于控制程序执行流程、指令优先级、ARM代码和Thumb代码的切换

4)        3种类型的协处理器指令,专用于控制外部协处理器。

1.      条件码

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

使用条件码“cond”可以实现高效的逻辑操作,提高代码效率。

所有的ARM指令都可以条件执行,而Thumb指令只有B(跳转)指令具有条件执行功能。如果指令不标明条件代码,将默认为无条件(AL)执行。

指令条件吗:

实例:

2.      存储器访问指令

(1)、基本指令:LDR|STR|LDM|STM {<cond>} {B} {T}<Rd>, <addressing_mode>

存储器访问指令分为单寄存器操作指令多寄存器操作指令

(2)、ARM存储器访问指令——单寄存器加载

所有单寄存器加载/存储指令可分为“字和无符号字节加载存储指令”“半字和有符号字节加载存储指令”。

LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能,就实现了程序散转。LDR/STR指令是寄存器加载/存储指令后缀B表示字节操作,后缀H表示半字操作

LDR和STR指令应用示例:(P55)

1)        加载/存储字和无符号字节指令

LDR   R2,[R5]         ;将R5指向地址的字数据存入R2

STR    R1,[R0,#0x04]   ;将R1的数据存储到R0+0x04地址,若有!,则R0就要更新

LDRB R3,[R2],#1  ;将R2指向地址的字节数据存入R3,R2=R2+1

STRB R6,[R7] 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值