21天学通Linux嵌入式开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第二篇 ARM嵌入式系统开发基础

第5章 ARM Cortex-M3指令集

在对ARM及最新的ARM Cortex-M3处理器有了一个大概的了解以后,我们还需要了解Cortex-M3处理器的基本指令。熟练掌握这些指令是ARM开发的基础。本章将详细讲解Cortex-M3处理器的基本指令。通过本章的学习,读者应该实现如下几个目标。

· 了解和掌握ARM Cortex-M3的数据传送指令。

· 了解和掌握ARM Cortex-M3的数据处理指令。

· 了解和掌握子程序呼叫及转移指令。

· 了解和掌握ARM Cortex-M3的隔离指令。

· 了解ARM Cortex-M3所不支持的指令。

5.1 数据传送指令

ARM处理器的基本功能之一就是数据传送。ARM Cortex-M3中的数据传送类指令可以实现两个寄存器间传送数据、寄存器与存储器间传送数据、寄存器与特殊功能寄存器间传送数据,以及把一个立即数加载到寄存器。下面详细介绍一下数据传送指令。

5.1.1 寄存器间数据传送指令

用于在寄存器间传送数据的指令是MOV。比如,如果要把寄存器R3的数据传送给寄存器R8,则写为:

    MOV R8, R3

与MOV指令相关的另一个指令是MVN,它把寄存器的内容取反后再传送。

5.1.2 存储器数据传送指令

用于访问存储器的基础指令是“加载(Load)”和“存储(Store)”。加载指令LDR把存储器中的内容加载到寄存器中,存储指令STR则把寄存器的内容存储至存储器中,传送过程中数据类型也可以变通,常用的存储器访问指令如表5-1所示。

表5-1 常用的存储器访问指令

另外,也可以采用LDM/STM指令访问多重存储器,它们相当于把若干个LDR/STR给合并起来了,有利于减少代码量,如表5-2所示。

表5-2 常用的多重存储器访问指令

5.1.3 索引数据传送指令

索引数据传送指令包括预索引和后索引两类。带预索引的数据传送可以用在多种数据类型上,并且既可用于加载,又可用于存储。常用的预索引数据传送指令如表5-3所示。

表5-3 常用的预索引数据传送指令

除了支持“预索引”,还支持“后索引”(Post-indexing)。后索引也要使用一个立即数offset,但与预索引不同的是,后索引是忠实使用基址寄存器Rd的值作为数据传送的地址的。待到数据传送后,再执行Rd←Rd+offset。其中,offset可以是负数。常用的后索引数据传送指令如表5-4所示。

表5-4 常用的后索引数据传送指令