EDN首页   博客首页

日志档案

发表于 2007-11-11 18:38:48

1

标签: 学习笔记  

ARM学习笔记

跳转指令:实现程序流程的跳转。在ARM中有两种方法可以实现程序的跳转

  1、使用专门的跳转指令(B、BL、BLX和BX),这种方法只能从当前指令向前或向后的32MB的地址空间跳转;

  2、直接向PC中写入跳转的地址,这种方法可以实现在4GB的地址空间任意跳转,在跳转之前要结合使用  MOV LR,PC 等类似指令。

B:跳转指令

BL:带返回的跳转指令

  在跳转之前寄存器R14会保存PC的当前内容,本指令是实现子程序调用的一个基本但常用的手段;

BLX:带返回和状态切换的跳转指令

  在BL的基础上有状态的切换(由ARM切换到Thumb状态);

BX:带状态切换的跳转指令

22:20 ARM的数据处理

MOV 数据传送指令

  MOV {条件}{S} 目的寄存器,源操作数

MVN 数据取反传送指令

CMP比较指令

  该指令做一次减法运算,对CPSR有影响

CMN取反比较指令

TST位测试指令

  按位进行与操作

TEQ相等测试指令

  按位进行异或操作,常用于判断两个操作数是否相等

ADD加法指令,对CPSR有影响(C、V、N、Z)

ADC带进位加法指令,对CPSR有影响(C、V、N、Z)

SUB减法指令,对CPSR有影响(C、V、N、Z)

SBC带进位减法指令,对CPSR有影响(C、V、N、Z)

2007年11月12日10:34

RSB逆向减法指令

  RSB R0,R1,R2;  R0=R2-R1

  RSB R0,R1,#256;R0=256-R1

RSC带进位(C的反码即!C)的逆向减法指令

  RSC R0,R1,R2;  R0=R2-R1-!C

AND逻辑与指令,常用于屏蔽操作数1的某些位

  AND R0,R0,#3;R0的1、3位不变,其余都清零

ORR逻辑或指令,常用于置位操作数1的某些位

EOR逻辑异或指令,常用于反转操作数1的某些位

乘法指令与乘加指令

这些指令中操作数都必须位通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器不能与操作数1相同。指令如下:

MUL 32乘法指令

   MUL R0,R1,R2;R0=R1XR2

MLA 32位乘加指令

   MLA R0,R1,R2,R3;R0=R1XR2+R3

SMULL 64 Signed x

  SMULL R0,R1,R2,R3;R0=R2XR3 L32、R1=R2XR3 H32

SMLAL 64 Signed x +

  SMLAL R0,R1,R2,R3

UMULL 64 unsigned x

   UMULL R0,R1,R2,R3

UMLAL 64 unsigned x +

  UMLAL R0,R1,R2,R3

程序状态寄存器访问指令

  MSR  S="R"

  MRS  R="S"

系统分类: ARM   |   用户分类: 嵌入式设计   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(827)    回复(2)  

投一票您将和博主都有获奖机会!

最新评论

  • linux2.8

    2007-11-11 20:50:49

    重复是学习的好方法。
    重复一下,再回复一下,也算是对原创帖子的支持。

  • aijun9801

    2007-11-11 22:19:06

    哈哈,说得是我把每天看了的都重复在博客上,以加深我记忆与理解!