您的位置 首页 汽车

ARM Cortex-M3 学习笔记(4-1)

最近在学ARMCortex-M3,找了本号称很经典的书AnDefinitiveGuidetoTheARMCortex-M3在看。这个系列学习笔记其实就是在学习这本…

最近在学ARM Cortex-M3,找了本声称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。

第四章 指令系统

根本语法

这儿介绍的汇编语法是ARM汇编器的语法,假如选用其他的汇编器,比方gcc中的as,语法是不同的。

汇编指令的典型形式如下所示:

Label

opcode operand1, operand2, … ;comment

标号是可选的,假如有,它有必要顶格写,标号后边不需要“:”。

操作码是指令的助记符,它的前面有必要有至少一个空白符。

当即数有必要以“#”最初,16进制数字一共与C言语的办法相同,比方:

MOV R0, #0x12 ; R0  0x12

运用EQU指示字来界说常数:

NVIC_IRQ_SETEN0 EQU 0xE000E100 ; 留意:常数界说有必要顶格写

NVIC_IRQ0_ENABLE EQU 0x1

LDR R0, =NVIC_IRQ_SETEN0 ;在这儿的LDR是个伪指令,它会被汇编器转换成

;一条“相对PC的加载指令”

MOV R1, #NVIC_IRQ0_ENABLE ; 把当即数传送到R1中

DCI 能够在汇编代码中刺进1 个half word (2个字节),通常用这条指令刺进汇编器不支持的指令。

DCB来界说一串字节常数

DCD来界说一串32位整数

比方下面的比如:

LDR R3, =MY_NUMBER ; R3= MY_NUMBER

LDR R4, [R3] ; R4= *R3

LDR R0, =HELLO_TEXT ; R0= HELLO_TEXT

BL PrintText ; 呼叫PrintText以显现字符串,R0传递参数

MY_NUMBER

DCD 0x12345678

HELLO_TEXT

DCB ”Hello\n”,0

指令后缀

后缀

意义

S

要求更新APSR中的相关标志,例如:

ADDS R0, R1 ; 依据加法的成果更新APSR中的标志

EQ,NE,LT,GT等

有条件地碑文指令。

EQ=Euqal, NE= Not Equal, LT= Less Than, GT= Greater Than,例如:

BEQ

一致汇编言语(UAL)

与Thumb-2指令集一起呈现的还有新的汇编语法(一致汇编言语)。运用一致汇编言语的语法,咱们能够便利的挑选当时的查办是被编译为16位的指令仍是编译为32位的指令。

ADD R0, R1 ; 运用传统的Thumb语法

ADD R0, R0, R1 ; 引进UAL后答应的等效写法(R0=R0+R1)

假如运用传统的Thumb语法,有些指令会默许地更新APSR。

假如运用UAL语法,则有必要指定S后缀才会更新。例如:

AND R0, R1 ;传统的Thumb语法

ANDS R0, R0, R1 ;等值的UAL语法(有必要有S后缀)

.W(Wide)后缀指定32位指令,.N后缀拟定选用16位指令。假如没有给出后缀,汇编器会先试着用16位指令以给代码减肥,假如不可再运用32位指令。例如:

ADDS R0, #1 ;汇编器将为了节约空间而运用16位指令

ADDS.N R0, #1 ;指定运用16位指令(N=Narrow)

ADDS.W R0, #1 ;指定运用32位指令(W=Wide)

32位的Thumb-2指令能够half word 对齐。不必word对齐使得代码中混用16位指令和32位指令变得很简单。

了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/264189.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部