数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。
常见的数据定义伪指令有如下几种:
DCB 用于分配一片连续的字节存储单元并用指定的数据初始化。
DCW (DCWU) 用于分配一片连续的半字存储单元并用指定的数据初始化。
DCD (DCDU) 用于分配一片连续的字存储单元并用指定的数据初始化。
DCFD (DCFDU)用于为双精度的浮点数分配一片连续的字存储单元并用指 定的数据初始化。
DCFS DCFSU) 用于为单精度的浮点数分配一片连续的字存储单元并用指 定的数据初始化。
DCQ DCQU) 用于分配一片以 8 字节为单位的连续的存储单元并用指定 的数据初始化。
SPACE 用于分配一片连续的存储单元
MAP 用于定义一个结构化的内存表首地址
FIELD 用于定义一个结构化的内存表的数据域
1. DCB
语法格式:
标号 DCB 表达式
DCB 伪指令用于分配一片连续的字节存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为 0 ~ 255 的数字或字符串。 DCB 也可用 “ = ” 代替。
使用示例:
Str DCB “ This is a test ! ” ;分配一片连续的字节存储单元并初始化。
2. DCW(或DCWU)
语法格式:
标号 DCW (或 DCWU ) 表达式
DCW (或 DCWU )伪指令用于分配一片连续的半字存储单元并用伪指令中指定的表达式初始化。
其中,表达式可以为程序标号或数字表达式。
用 DCW 分配的字存储单元是半字对齐的,而用 DCWU 分配的字存储单元并不严格半字对齐。
使用示例:
DataTest DCW 1 , 2 , 3 ;分配一片连续的半字存储单元并初始化。
3. DCD(或DCDU)
语法格式:
标号 DCD (或 DCDU )表达式
DCD(或 DCDU )伪指令用于分配一片连续的字存储单元并用伪指令中指定的 表达式初始化。其中,表达式可以为程序标号或数字表达式。DCD也可用 “ & ” 代替。
用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格 字对齐。
使用示例:
DataTest DCD 4 , 5 , 6 ;分配一片连续的字存储单元并初始化。
4. DCFD(或DCFDU)
语法格式:
标号 DCFD (或 DCFDU ) 表达式
DCFD (或 DCFDU )伪指令用于为双精度的浮点数分配一片连续的字存储单元 并用伪指令中指定的表达式初始化。每个双精度的浮点数占据两个字单元。用 DCFD 分配的字存储单元是字对齐的,而用 DCFDU 分配的字存储单元并不严格字对齐。
使用示例:
FDataTest DCFD 2E115 , -5E7 ;分配一片连续的字存储单元并初始化为指定的双精度数。
5. DCFS(或DCFSU)
语法格式:
标号 DCFS (或 DCFSU ) 表达式
DCFS (或 DCFSU )伪指令用于为单精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化。每个单精度的浮点数占据一个字单元。用 DCFS 分配的字存储单元是字对齐的,而用 DCFSU 分配的字存储单元并不严格字对齐。
使用示例:
FDataTest DCFS 2E5 , -5E - 7 ;分配一片连续的字存储单元并初始化为指定的单精度数。
6. DCQ(或DCQU)
语法格式:
标号 DCQ (或 DCQU )表达式
DCQ(或 DCQU )伪指令用于分配一片以 8 个字节为单位的连续存储区域并用 伪指令中指定的表达式初始化。
用 DCQ 分配的存储单元是字对齐的,而用 DCQU分配的存储单元并不严格字齐
使用示例:
DataTest DCQ 100 ;分配一片连续的存储单元并初始化为指定的值。
7. SPACE
语法格式:
标号 SPACE 表达式
SPACE 伪指令用于分配一片连续的存储区域并初始化为 0 。其中,表达式为要分配的字节数。
SPACE 也可用 “ % ” 代替。
使用示例:
DataSpace SPACE 100 ;分配连续 100 字节的存储单元并初始化为 0 。
8. MAP
语法格式:
MAP 表达式 { ,基址寄存器 }
MAP 伪指令用于定义一个结构化的内存表的首地址。MAP 也可用 “ ^ ” 代替。
表达式可以为程序中的标号或数学表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。
MAP 伪指令通常与 FIELD 伪指令配合使用来定义结构化的内存表。
使用示例:
MAP 0x100 , R0 ;定义结构化内存表首地址的值为 0x100 + R0 。
9. FILED
语法格式:
标号 FIELD 表达式
FIELD 伪指令用于定义一个结构化内存表中的数据域。FILED也可用“ # ” 代替。
表达式的值为当前数据域在内存表中所占的字节数。
FIELD 伪指令常与 MAP 伪指令配合使用来定义结构化的内存表。 MAP 伪指令定义内存表的首地址, FIELD 伪指令定义内存表中的各个数据域,并可以为每个数据域指定一个标号供其他的指令引用。
注意 MAP 和 FIELD 伪指令仅用于定义数据结构,并不实际分配存储单元。
使用示例:
MAP 0x100 ;定义结构化内存表首地址的值为 0x100 。
A FIELD 16 ;定义 A 的长度为 16 字节,位置为 0x100
B FIELD 32 ;定义 B 的长度为 32 字节,位置为 0x110
S FIELD 256 ;定义 S 的长度为 256 字节,位置为 0x130