微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM学习手札之汇编伪指令

ARM学习手札之汇编伪指令

时间:11-22 来源:互联网 点击:

DCD 和DCDU
DCD 用于分配一段字内存单元,并用伪指令中的expr 初始化。DCD 伪指令分配的内存需要字对齐,一般可用来定义数据表格或其它常数。&与DCD 同义。
DCDU 用于分配一段字内存单元,并用伪指令中的expr 初始化。DCD 伪指令分配的内存不需要字对齐,一般可用来定义数据表格或其它常数。
伪指令格式:
{label} DCD expr{,expr}{,expr}…
{label} DCDU expr{,expr}{,expr}…
其中:label 内存块起始地址标号。
expr 常数表达式或程序中的标号。内存分配字节数由expr 个数决定。
伪指令应用举例如下:
Vectors
LDR PC,ReserAddr
LDR PC,UndefinedAddr

ResetAddr DCD Reset
UndefinedAddr DCD Undefined

Reset

Undefined

DCDO
DCDO 用于分配一段字内存单元。并将每个单元的内容初始化为该单元相对于静态基址寄存器的偏移量。DCDO 伪指令作为基于静态基址寄存器R9 的偏移量分配内存单元。DCDO 伪指令分配的内存需要字对齐。
伪指令格式:
{label} DCDO expr{,expr}{,expr}…
其中:label 内存块起始地址标号。
expr 地址偏移表达式或程序中的标号。内存分配的字数由expr 个数决定。
伪指令应用举例如下:
IMPORT externsym
DCDO externsym ;分配32 位的字单元,其值为标号externsym 基于R9 的偏移

DCFD 和DCFDU
DCFD 用于分配一段双字的内存单元,并用双精度的浮点数据fpliteral 初始化。每个双精度的浮点数占据两个字单元。DCFD 伪指令分配的内存需要字对齐。
DCFDU 具有DCFD 同样的功能,但分配的内存不需要字对齐。
伪指令格式:
{label} DCFD fpliteral{,fpliteral}{,fpliteral}…
{label} DCFDU fpliteral{,fpliteral}{,fpliteral}…
其中:label 内存块起始地址标号。
fpliteral 双精度的浮点数。
伪指令应用举例如下:
DCFD 2E30,-3E-20
DCFDU -.1,1000,2.1E18

DCFS 和DCFSU
DCFS 用于分配一段字的内存单元,并用单精度的浮点数据fpliteral 初始化。每个单精度的浮点数占据一个字单元。DCFD 伪指令分配的内存需要字对齐。
DCFSU 具有DCFS 同样的功能,但分配的内存不需要字对齐。
伪指令格式:
{label} DCFS fpliteral{,fpliteral}{,fpliteral}…
{label} DCFSU fpliteral{,fpliteral}{,fpliteral}…
其中:label 内存块起始地址标号
fpliteral 单精度的浮点数。
伪指令应用举例如下:
DCFS 1.1E2,-1.3E10,0.0999

DCI
在ARM 代码中,DCI 用于分配一段字节的内存单元,用指定的数据expr 初始化。指定内存单元存放的是代码,而不是数据。
在Thumb 代码中,DCI 用于分配一段半字节的内存单元,用指定的数据expr 初始化。指定内存单元存放的是代码,而不是数据。
伪指令格式:
{label} DCI expr
其中:label 内存块起始地址标号。
expr 可为数字表达式。
DCI 伪指令和DCD 伪指令非常类似,不同之处在于DCI 分配的内存中的数据被标识为指令。可用于通过宏指令业定义处理器不支持的指令。
伪指令应用举例如下:
MACRO ;宏定义(定义NEWCMN Rd,Rn 指令)
NEWCMN $Rd,$Rm ;宏名为NEWCMN,参数为Rd 和Rm
DCI 0xe16a0e20:OR:($Rd:SHL:12):OR:$Rm
MEND

DCQ 和DCQU
DCQ 用于分配一段双字的内存单元,并用64 位的整数数据literal 初始化。DCQ 伪指令分配的内存需要字对齐。
DCQU 具有DCQ 同样的功能,但分配的内存不需要字对齐。
伪指令格式:
{label} DCQ {-}literal{,{-}{literal}}…
{label} DCQU {-}literal{,{-}{literal}}…
其中:label 内存块起始地址标号。
literal 64 位的数字表达式。取值范围为0~264-1 当literal前有“.”号时,取值范围为-263~-1 之间。
伪指令应用举例如下:
DCQU 1234,-76568798776

DCW 和DCWU
DCW 用于分配一段字的内存单元,并用指定的数据expr 初始化。DCW 伪指令分配的内存需要字对齐。
DCWU 具有DCW 同样的功能,但分配的内存不需要字对齐。
伪指令格式:
{label} DCW expr{,expr}{,expr}…
{label} DCWU expr{,expr}{,expr}…
其中:label 内存块起始地址标号。
expr 数字表达式,取值范围为-32768~65535。
伪指令应用举例如下:
DCW -592,123,6756
报告伪指令
报告伪指令用于汇编报告指示。该类伪指令如下:
断言错误:ASSERT。
汇编诊断信息显示:INFO。
设置列表选项:OPT。
插入标题:TTL 和SUBT。

ASSERT
ASSERT 为断言错误伪指令。在汇编编译器对汇编程序的第二遍扫描中,如果其中
ASSERT 条件不成立,ASSERT 伪指令将报告该错误信息。
伪指令格式:
ASSERT Logical_expr
其中:Logical_expr 用于断言的逻辑表达式
伪指令应用举例如下:
ASSERT Top<>Temp ;断言Top 不等于Temp

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top