打印
[应用相关]

启动代码 汇编指令的一些伪操作总结(基于RealView)

[复制链接]
1744|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为声明符号名称区分大小写。

使用特权

评论回复
5
你瞅啥| | 2019-2-23 15:38 | 只看该作者
stm32的汇编有gcc、iar、realview三大编译器,你说的是哪个?

使用特权

评论回复
6
gaoke231|  楼主 | 2019-2-23 16:41 | 只看该作者
你瞅啥 发表于 2019-2-23 15:38
stm32的汇编有gcc、iar、realview三大编译器,你说的是哪个?

跟这个没有关系吧

使用特权

评论回复
7
gaoke231|  楼主 | 2019-2-23 16:42 | 只看该作者
EXPORT GLOBAL
EXPORT申明一个符号可以被其它文件引用,相当于声明了全局变量。GLOBALEXPORT的同义词。
语法格式:EXPORT symbol
Symbol为声明符号名称区分大小写。

使用特权

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

使用特权

评论回复
9
gaoke231|  楼主 | 2019-2-23 16:53 | 只看该作者
DATA
DATA用于在代码段中使用数据

使用特权

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

使用特权

评论回复
11
你瞅啥| | 2019-2-23 16:55 | 只看该作者
gaoke231 发表于 2019-2-23 16:41
跟这个没有关系吧

关系太大了,不同编译器伪指令体系完全不一样,你不说你用的什么编译器等于什么都没有用。

使用特权

评论回复
12
gaoke231|  楼主 | 2019-2-23 17:08 | 只看该作者
AREA
AREA用于定义一个代码段或者数据段。
语法格式:AREA  setctionname {,attr}{,attr}.....
setctionname:为代码段或者数据段的名称
attr是改代码段或者数据段的属性,在AREA操作中,各属性需要用 “,”隔开。

使用特权

评论回复
13
gaoke231|  楼主 | 2019-2-23 17:08 | 只看该作者
你瞅啥 发表于 2019-2-23 16:55
关系太大了,不同编译器伪指令体系完全不一样,你不说你用的什么编译器等于什么都没有用。 ...

ARM 系列的都可以

使用特权

评论回复
14
gaoke231|  楼主 | 2019-2-23 17:09 | 只看该作者
ENTRY
指定程序的入口点
语法格式: ENTRY
一个程序包含多个源文件,但一个源文件中最多只能有一个ENTRY(可以没有ENTRY

使用特权

评论回复
15
你瞅啥| | 2019-2-23 17:24 | 只看该作者
gaoke231 发表于 2019-2-23 17:08
ARM 系列的都可以

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

你连用什么编译器都说不清楚,你这个帖子就是一文不值的废品。

使用特权

评论回复
16
你瞅啥| | 2019-2-23 17:31 | 只看该作者
查了下,撸主的东西是RealView编译器的,对于gcc和iar并不适用。

使用特权

评论回复
17
gaoke231|  楼主 | 2019-2-23 18:26 | 只看该作者
END
END 告诉编译器已经到了源程序的结尾。
语法格式: END
每一个汇编程序都包含END操作,已告诉源程序的结束。

使用特权

评论回复
18
gaoke231|  楼主 | 2019-2-23 18:26 | 只看该作者
你瞅啥 发表于 2019-2-23 17:31
查了下,撸主的东西是RealView编译器的,对于gcc和iar并不适用。

是的,是基于RealView编译器,看来我是啥也不懂

使用特权

评论回复
19
gaoke231|  楼主 | 2019-2-23 18:27 | 只看该作者
你瞅啥 发表于 2019-2-23 17:24
都可以个屁!
都可以STM32的库文件就不会有2个汇编启动文件对应gcc和realview编译器了,因为iar可以用内 ...

分享一下而已,没你知道的多

使用特权

评论回复
20
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

粉丝