当前位置:首页 > 单片机 > 单片机
[导读] 转载自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


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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭