数据定义(DataDefinition)伪指令
数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。
—DCD(DCDU)用于分配一片连续的字存储单元并用指定的数据初始化。
3、DCD(或DCDU)
语法格式:
标号DCD(或DCDU)表达式
DCD(或DCDU)伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。DCD也可用“&”代替。
用DCD分配的字存储单元是字对齐的,而用DCDU分配的字存储单元并不严格字对齐。
使用示例:
DataTestDCD4,5,6;分配一片连续的字存储单元并初始化。
举例1:
SwiFunction
DCDTASK_SW;0
DCDENTER_CRITICAL;1
DCDEXIT_CRITICAL;2
DCDISRBegin;3
DCDChangeToSYSMode;4
DCDChangeToUSRMode;5
DCD__OSStartHighRdy;6
DCDTaskIsARM;7
DCDTaskIsTHUMB;8
DCDOSISRNeedSwap;9
DCDGetOSFunctionAddr;10
DCDGetUsrFunctionAddr;11
TASK_SW
MRSR3,SPSR;保存任务的CPSR
MOVR2,LR;保存任务的PC
举例2:
语句如下:
FiqStackSpace SPACE FIQ_Stack_Legth
FiqStack DCD FiqStackSpace + FIQ_Stack_Legth
最后一条语句,DCD的后面跟FiqStackSpace + FIQ_Stack_Legth,
DCD后面的FiqStackSpace,表示一串空字符,这好理解
但是再上FIQ_Stack_Legth,就不明白了,WHY?
FiqStackSpace是标号,相当与地址,实际上就是在FiqStackSpace SPACEFIQ_Stack_Legth 这个语句给分配的空间的首地址,FiqStackSpace+ FIQ_Stack_Legth是这个地址空间的结束地址,将FiqStack指向这个地址,当做栈的顶部,该栈向下生长,长度FIQ_Stack_Legth