当前位置:首页 > 单片机 > 单片机
[导读] 转载自http://blog.csdn.net/qqliyunpeng/article/details/48791487一、伪指令 的含义: 伪指令是编译器支持的指令,不是硬件芯片支持的指令。 编译器在编译时,会把伪指令转化对应的芯片支持的指令。

转载自http://blog.csdn.net/qqliyunpeng/article/details/48791487


一、伪指令 的含义:

伪指令是编译器支持的指令,不是硬件芯片支持的指令。

编译器在编译时,会把伪指令转化对应的芯片支持的指令。

伪指令集包括:伪操作和伪指令

二、伪操作:1. 数据定义(Data Definition)伪操作:

数据定义伪操作一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。

常见的数据定义伪操作有如下几种:

.byte 单字节定义 .byte 0x12,’a’,23

.short 定义2字节数据 .short 0x1234,65535

.long /.word 定义4字节数据 .word 0x12345678

.quad 定义8字节 .quad 0x1234567812345678

.float 定义浮点数 .float 0f3.2

.string/.asciz/.ascii 定义字符串 .ascii “abcd”,

注意:.ascii伪操作定义的字符串需要每行添加结尾字符 '',其他不需要

例子:

int val = 0x11223344;

val:

.word 0x11223344

注意:

1--变量的定义放在,stop后,.end前

2--标号是地址的助记符,标号不占存储空间。

2. 汇编控制伪操作:

(1).if .else .endif ---- 类似c语言里的条件编译

汇编控制伪操作用于控制汇编程序的执行流程

.if、.else .endif伪操作能根据条件的成立与否决定是否执行某个指令序列。

当.if后面的逻辑表达式为真,则执行.if后的指令序列,否则执行.else后的指令序列;

.if、.else、.endif伪指令可以嵌套使用。

.if logical-expressing

.else

.endif

(2).macro,.endm --- 类似c语言里的宏函数

macro伪操作可以将一段代码定义为一个整体,称为宏指令。

然后就可以在程序中通过宏指令多次调用该段代码。

其中,$标号在宏指令被展开时,标号会被替换为用户定义的符号。

宏操作可以使用一个或多个参数,当宏操作被展开时,这些参数被相应的值替换。

语法格式:

.macro {$label} 名字{$parameter{,$parameter}…}

……..code

.endm

注意:先定义后使用

.macro func1

mov r1,#1

mov r2,#2

mov r3,#3

.endm

func1

func1

func1

3.杂项伪操作:

.arm .arm 定义一下代码使用ARM指令集编译

.thumb .thumb 定义一下代码使用Thumb指令集编译

.section .section expr 定义一个段。expr可以使.text .data. .bss

.text .text {subsection} 将定义符开始的代码编译到代码段

.data .data {subsection} 将定义符开始的代码编译到数据段,初始化数据段

.bss .bss {subsection} 将变量存放到.bss段,未初始化数据段

.align .align{alignment}{,fill}{,max} 通过用零或指定的数据进行填充来使当前位置与指定边界对齐

.align 4 --- 16字节 2的4次

.align (4) --- 4字节

.org .org offset{,expr} 指定从当前地址加上offset开始存放代码,

并且从当前地址到当前地址加上offset之间的内存单元,用零或指定的数据进行填充

_start 汇编程序的缺省入口是_ start标号,用户也可以在连接脚本文件中用ENTRY标志指明其它入口点.

.global/ .globl :用来声明一个全局的符号

.end 文件结束

.include 格式:.include “filename”

包含指定的头文件, 可以把一个汇编常量定义放在头文件中

.equ 格式:.equ symbol, expression

把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间.(c语言的 #define)

#define PI 3.1415 == .equ PI, 3.1415


三、伪指令:

关键点:伪指令在编译时会转化为对应的ARM指令

1.ADR伪指令: --把标签所在的地址加载到寄存器中

ADR伪指令为小范围地址读取伪指令,使用的相对偏移

范围:当地址值是字节对齐 (8位)时,取值范围为-255~255,

当地址值是字对齐(32位)时,取值范围为-1020~1020。

语法格式:

ADR{cond} register,label

ADR R0, lable

2. ADRL伪指令: --将中等范围地址读取到寄存器中

ADRL伪指令为中等范围地址读取伪指令。使用相对偏移

范围:当地址值是字节对齐时,取值范围为-64~64KB;

当地址值是字对齐时,取值范围为-256~256KB

语法格式:

ADRL{cond} register,label

ADRL R0,lable

3. LDR伪指令: LDR伪指令装载一个32位的常数和一个地址到寄存器。

语法格式:

LDR{cond} register,=[expr|label-expr]

LDR R0,=0XFFFF0000

注意:

(1)ldr伪指令和ldr指令区分

ldr r1,=val @ r1 = val 是伪指令

ldr r2,val @ r1 = *val 是 arm指令

.val

.word 0x11223344

(2)怎么取用ldr伪指令实现长跳转

ldr pc,=32位地址

(3)编码中解决立即数的问题

用arm伪指令ldr

0x999 不是立即数,

ldr r0,=0x999


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭