[应用相关] 启动代码 汇编指令的一些伪操作总结(基于RealView)

[复制链接]
2460|43
 楼主| gaoke231 发表于 2019-2-23 15:13 | 显示全部楼层 |阅读模式
本帖最后由 gaoke231 于 2019-2-23 18:29 编辑

GETINCLUDE
Get伪操作类似于C语言的include *.h 将一个源文件包含到当前源文件中,并将包含的文件在当前位置进行汇编处理。
语法格式:GET filemain
Filemain 为包含文件名称 也可以使用路径信息。

 楼主| gaoke231 发表于 2019-2-23 15:13 | 显示全部楼层
GBLA  GBLL  GBLS
GBLA  GBLL 及GBLS 定义ARM的全局变量,并将其初始化。
GBLA:定义一个全局的算术变量,将其初始化为0
GBLL:定义一个全局的逻辑变量,将其初始化为FALSE
GBLS:定义一个全局的字符串变量,将其初始化为空“”
语法格式: <gblx> variable
gblx为上述三种伪操作之一,variable为定义的变量名称。
 楼主| gaoke231 发表于 2019-2-23 15:15 | 显示全部楼层
SETA  SETL  SETS
SETA  SETL SETS 分别用于ARM程序中的算术、逻辑、串变量赋值。
语法格SETA  SET式: variable  <setx>  expr
setx为上述三种伪操作之一, variable<gblx>定义的变量名称, expr 为赋予的值。

 楼主| gaoke231 发表于 2019-2-23 15:16 | 显示全部楼层
IMPORT
IMPORT伪操作相当于C语言的extern声明,告诉编译器该符号源文件中定义,而在其它文件中定义,源文件只是引用。
语法格式:IMPORT symbol
Symbol为声明符号名称区分大小写。

你瞅啥 发表于 2019-2-23 15:38 | 显示全部楼层
stm32的汇编有gcc、iar、realview三大编译器,你说的是哪个?
 楼主| gaoke231 发表于 2019-2-23 16:41 | 显示全部楼层
你瞅啥 发表于 2019-2-23 15:38
stm32的汇编有gcc、iar、realview三大编译器,你说的是哪个?

跟这个没有关系吧
 楼主| gaoke231 发表于 2019-2-23 16:42 | 显示全部楼层
EXPORT GLOBAL
EXPORT申明一个符号可以被其它文件引用,相当于声明了全局变量。GLOBALEXPORT的同义词。
语法格式:EXPORT symbol
Symbol为声明符号名称区分大小写。

 楼主| gaoke231 发表于 2019-2-23 16:43 | 显示全部楼层
LTORG
LTORG 用于声明一个数据缓冲池的开始,在使用LDR时,常常在适当的地方加入LTORG
声明数据缓冲池,这样LDR加载的数据暂时存放在数据缓冲池内,再利用ARM加载指令读出数据。如果没有用LTORG 汇编器会在程序末尾自动声明。
语法格式:LTORG

 楼主| gaoke231 发表于 2019-2-23 16:53 | 显示全部楼层
DATA
DATA用于在代码段中使用数据

 楼主| gaoke231 发表于 2019-2-23 16:53 | 显示全部楼层
DCD DCDU
DCD用于分配一段字内存单元,且分配的内存都是字对齐的。DCDUDCD的不同在于分配的内存单元并不严格字对齐。
语法格式:{ label }  DCD  expr { expr}
其中 { label } 为可选,expr为数字表达式或者程序的标号。

你瞅啥 发表于 2019-2-23 16:55 | 显示全部楼层
gaoke231 发表于 2019-2-23 16:41
跟这个没有关系吧

关系太大了,不同编译器伪指令体系完全不一样,你不说你用的什么编译器等于什么都没有用。
 楼主| gaoke231 发表于 2019-2-23 17:08 | 显示全部楼层
AREA
AREA用于定义一个代码段或者数据段。
语法格式:AREA  setctionname {,attr}{,attr}.....
setctionname:为代码段或者数据段的名称
attr是改代码段或者数据段的属性,在AREA操作中,各属性需要用 “,”隔开。

 楼主| gaoke231 发表于 2019-2-23 17:08 | 显示全部楼层
你瞅啥 发表于 2019-2-23 16:55
关系太大了,不同编译器伪指令体系完全不一样,你不说你用的什么编译器等于什么都没有用。 ...

ARM 系列的都可以
 楼主| gaoke231 发表于 2019-2-23 17:09 | 显示全部楼层
ENTRY
指定程序的入口点
语法格式: ENTRY
一个程序包含多个源文件,但一个源文件中最多只能有一个ENTRY(可以没有ENTRY

你瞅啥 发表于 2019-2-23 17:24 | 显示全部楼层
gaoke231 发表于 2019-2-23 17:08
ARM 系列的都可以

都可以个屁!
都可以STM32的库文件就不会有2个汇编启动文件对应gcc和realview编译器了,因为iar可以用内嵌汇编做到就只有一个c文件。

你连用什么编译器都说不清楚,你这个帖子就是一文不值的废品。
你瞅啥 发表于 2019-2-23 17:31 | 显示全部楼层
查了下,撸主的东西是RealView编译器的,对于gcc和iar并不适用。
 楼主| gaoke231 发表于 2019-2-23 18:26 | 显示全部楼层
END
END 告诉编译器已经到了源程序的结尾。
语法格式: END
每一个汇编程序都包含END操作,已告诉源程序的结束。

 楼主| gaoke231 发表于 2019-2-23 18:26 | 显示全部楼层
你瞅啥 发表于 2019-2-23 17:31
查了下,撸主的东西是RealView编译器的,对于gcc和iar并不适用。

是的,是基于RealView编译器,看来我是啥也不懂
 楼主| gaoke231 发表于 2019-2-23 18:27 | 显示全部楼层
你瞅啥 发表于 2019-2-23 17:24
都可以个屁!
都可以STM32的库文件就不会有2个汇编启动文件对应gcc和realview编译器了,因为iar可以用内 ...

分享一下而已,没你知道的多
 楼主| gaoke231 发表于 2019-2-23 18:28 | 显示全部楼层
ASSERT
在编译器对汇编程序扫描中,如果ASSERT中条件不成立,ASSERT操作将报告错误信息。
语法格式: ASSERT  logical  expression
logical  expression为一个逻辑表达式或运算符,如ASSERT  :DEF  :BUS_WINDOW
其中DEF为运算符,用于判断是否定义了某个符号。
语法格式: :DEF  :X
如果X已经定义结果为真,否者为假。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1310

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部