当前位置:文档之家› ARM嵌入式开发实例

ARM嵌入式开发实例


车载ARM嵌入式系统实例开发课件
5
2.1 ARM指令系统简介
3、用户还可以使用DCB指令来定义一串字节常数,字节常数 也可以使用字符串的形式来定义。也可以使用DCD指令来定义 一串32位的整数。通常这两条指令被使用在汇编代码中书写 表格。用户可以通过下面这段代码来掌握这两条指令的具体 使用方法。 4、不同编译器对标志和语法可能并不完全一致。本书中所有 的代码都是基于ARM编译器的语法格式进行编写的。
车载ARM嵌入式系统实例开发课件
11
2.1 ARM指令系统简介
• 最后,需要提醒用户注意的是,绝大部分的16位Thumb指 令只能访问R0~R7寄存器;而32位的Thumb-2指令可以自由 访问R0~R15寄存器。但特别注意对寄存器R15的操作容易 出现意想不到的错误,导致代码程序跑飞等。因此,在不 是必要的情况下,不建议用户对其进行操作。
车载ARM嵌入式系统实例开发课件
8
2.1 ARM指令系统简介
2.1.3 ARM汇编指令的书写格式
在Thumb-2指令集中,有部分指令操作既可以由16位的 Thumb指令来实现,也可以由32位的ARM指令来实现。在 UAL语法中,编译器会根据指令占用的资源情况来主动确 定用哪一种指令。除此之外,用户也可以在代码通过后缀 的方式手动设定使用ARM指令或者Thumb指令,下面将详细 介绍。
车载ARM嵌入式系统实例开发课件
4
2.1 ARM指令系统简介
2、与C语言和C++类似的是,用户可以在汇编语言中通过使用 “EQU”来定义常量,然后在代码中引用自定义的符号来使用这 些预先定义好的数据。例如: ;定义常量NVIC_IRQ_SETEN0=0xE000E100 NVIC_IRQ_SETEN0 EQU 0xE000E100 ;代码行顶格写 ;定义常量NVIC_IRQ0_ENABLE =0x1 NVIC_IRQ0_ENABLE EQU 0x1 „„ LDR R0,= NVIC_IRQ_SETEN0 MOV R1,#NVIC_IRQ0_ENABLE ;将立即数传送到R1寄存器中 STR R1,[R0] ;*R0=R1
返回指令
代码在Thumb状态下运行 连接跳转并切 换状态指令
代码在ARM状态下运行
车载ARM嵌入式系统实例开发课件
2
2.1 ARM指令系统简介
值得注意的是,在Thumb-2指令集中,嵌入式处理器可以 在单一的工作模式下进行所有的指令操作,也不需要像 混合编码一样对工作模式进行来回切换,节省了系统在 时间上的“额外开销”,比传统的ARM处理器性具有以下 优点。 1. 缺省了ARM状态与Thumb状态模式切换的“额外开销”, 在节省指令空间的同时也提高了指令的执行效率; 2. 源代码文件不需要分成“按ARM指令编译”和“按Thumb 指令编译”,提高了软件开发的效率; 3. 无需进行不同状态模式的切换,在编写代码的过程中也 无需反复求证和测试究竟在何时何处切换到何种状态;
;R3= MY_NUMBER ;R4=*R3 ;R0=HELLO_TEXT ;跳转到PrintText打印寄存器R0
;定义标号MY_NUMBER ;定义标号HELLO_TEXT
车载ARM嵌入式系统实例开发课件
7
2.1 ARM指令系统简介
2.1.2 ARM汇编指令中的后缀
在汇编指令中,部分指令可以带有后缀,具体如下表所示。 汇编指令中的后缀 指令后缀 操作说明 执行操作运算后,同时根据运算的结 果更新寄存器APSR中的标志位,例 运算操作符 如: -S ADDS R0, R1 ;将R0与R1中的数值 相加,并更新寄存器APSR中的标志 位 条件判断执行语句。 EQ,NE, EQ=Equal,NE=Not Equal,LT=Less LT,GT等 Than,GT=Great Than
车载ARM嵌入式系统实例开发课件
9
2.1 ARM指令系统简介
(1)若没有对当前指令进行设定操作(无后缀),编译器 根据当前系统资源的使用情况,选择最为节省代码空间的 指令进行编译。具体的操作步骤为:编译器先以16位的 Thumb指令进行编译,以实现较少的代码存储空间。如果 无法采用Thumb指令对该指令进行编译,则再次使用ARM指 令进行编译; (2)在指令后加注.N后缀,则将指定编译器在编译代码的 过程中使用16位的Thumb指令,其中后缀.N表示Narrow, 即16位Thumb窄位指令。结合(1)中无后缀的指令来看, 在指令后加注“.N”是比较多余的。因为不管时候加上.N 后缀,编译器都会首先采用16位的Thumb指令进行编译。
车载ARM嵌入式系统实例开发课件
12
车载ARM嵌入式系统实例开发课件
6
2.1 ARM指令系统简介
LDR R3, =MY_NUMBER LDR R4, [R3] „„ LDR R0, =HELLO_TEXT BL PrintText 中的字符 „„ MY_NUMBER DCD 0x10354721 HELLO_TEXT DCB “Hello\n”
车载ARM嵌入式系统实例开发课件
3
2.1 ARM指令系统简介
2.1.1 ARM汇编语言的基本语法
1、 在ARM处理器中,汇编指令的典型语法结构如下所示: 标号 操作码 操作数1,操作数,„„ ;注释 通常情况下,第一个操作数将作为作数,并且对于 操作数的语法要求也各不相同。一般而言,立即数必须以 “#”开头,例如: MOV R0, #0x12 ;将立即数0x12送入寄存器R0 MOV R1, #’A’;将字符’A’作为立即数送入寄存器R1
第2章 ARM指令系统
• 在本章内容中,主要向读者介绍ARM指令集和Thumb指令集 以及指令的寻址方式。通过本章的学习,用户需要掌握 ARM指令系统以及具体的使用方法。 • 【本章重点】 • 1 ARM指令集; • 2 Thumb指令集; • 3 ARM指令集的寻址方式; • 【本章难点】 • 1 ARM指令集与Thumb指令集的异同; • 2 ARM指令集的寻址方式;
1
车载ARM嵌入式系统实例开发课件
第2章 ARM指令系统 2.1 ARM指令系统简介
ARM嵌入式处理器可以支持32位的ARM指令集和16位的 Thumb指令集。一般而言,在ARM嵌入式系统中,需要正确 处理好两个工作状态:32位的ARM状态和16位的Thumb状态。
ARM处理器状态模式切换
“额外开销” 代码保持在ARM 状态下运行
车载ARM嵌入式系统实例开发课件
10
2.1 ARM指令系统简介
(3)在指令后加注.W后缀,则将指定编译器在编译代码的 过程中使用32位的ARM指令,其中后缀.W表示Wide,即16 位Thumb宽位指令;用户可以对比下面几行代码,对设定 编译器的指令模式做进一步的了解。 • ADDS R0, #1 ;为节省代码空间 ,编译器自动选择使用16位Thumb指令 • ADDS.N R0, #1 ;用户通过.N后缀 指定编译器使用16位Thumb指令 • ADDS.W R0, #1 ;用户通过.W后缀 指定编译器使用32位ARM指令
相关主题