(10)DCI
在ARM代码中,DCI用于分配一段字对齐的内存单元,并用伪操作中的expr将其初始化;在Thumb代码中,DCI用于分配一段半字对齐的半字内存单元,并用伪操作中的expr将其初始化。
语法格式
{lable} DCIexpr{,expr}…
其中:{lable}为可选的标号;expr可以为数字表达式。
使用说明
DCI伪操作和DCD伪操作非常类似,不同之处在于,DCI分配的内存中数据被标识为指令,可用于通过宏指令来定义处理器指令系统不支持的指令。
在ARM代码中,DCI为了保证分配是字对齐的,可能在分配的第一个内存单元前插入最多3字节的填补字节。在Thumb代码中,DCI为了保证分配的内存时半字对齐的,可能在分配的第一个内存单元前插入1字节的填补字节。
示例21 用DCI伪操作分配内存单元举例
MACRO ;宏指令
Newinstr $Rd,$Rm
DCI 0xE16F0F10:OR($Rd:SHL:12):OR:$Rm ;这里存放的是指令
MEND
(11)DCQ及DCQU
DCQ用于分配一段以双字(8字节)为单位的内存,分配的内存要求必须字对齐,并用伪操作中的64位的整数数据初始化。DCQU与DCQ的不同之处在于,DCDQ分配的内存单元并不严格字对齐。
语法格式
{lable} DCQ{U}{—}literal{,{—}literal }…
其中:{lable}是一个标号,是可选的,literal为64位的数字表达式,可选正负号,其取值范围为0~2的64次幂减1.当在literal前加上“—”时,literal的取值范围为—2的63次幂减1~—1.在内存中,2的64次幂减n与—n具有相同的表达形式,这是因为数据在内存中都是以补码的形式表示的,
使用说明
DCQ伪操作为了保证分配的内存是字对齐的,可能在分配的第一个内存单元前插入多达3字节的填补字节。DCQU分配飞内存单元则不需要字对齐。
示例22 用DCQ、DCQU伪操作分配内存单元举例
AREA MiscData,DATA,READWRITE ;定义数据段,属性为可读/写
Data0 DCQ—100,2_101 ;2_101指的是二进制的101
Data1 DCQU1000,—100000000
DCQU number+4 ;number必须是已定义过的数字表达式
(1) DCW及DCWU
DCW用于分配一段半字的半字内存单元,并用伪操作中的expr初始化。DCWU与DCW的不同之处在于,DCWU分配的内存单元并不严格半字对齐。
语法格式
{lable} DCW{U}expr(,expr)…
其中:{lable}为可选的标号;expr为数字表达式,其取值范围为—32768~65535.
使用说明
DCW伪操作为了保证分配的内存是半字对齐的,可能在分配的第一个内存单元前插入1字节的填补字节。DCWU分配的内存单元则不需要半字对齐。
示例23 用DCW伪操作分配内存单元举例。
Data DCW —235,748,2246
DCW num+8