(10)DCI 在ARM代码中,DCI用于分配一段字对齐的内存单元,并用伪操作中的expr将其初始化;在Thumb代码中,DCI用于分配一段半字对齐的半字内存单元,并用伪操作中的expr将其初始化。 语法格式 {lable} DCI expr{,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
|