若干指令用于汇编当前段的值。例如:
- .byte 和 .char 指令用于将一个或多个 8 位值置于当前段的连续字节中。这些指令类似于 .word、.int 和 .long,不同之处在于每个值的宽度限制为 8 位。
- .double 指令用于计算一个或多个浮点值的双精度(64 位)IEEE 浮点表示,并将其存储在当前段的两个连续字中。.double 指令用于自动与双字边界对齐。
- .field 和 .bits 指令用于将单个值置于当前字的指定位数中。借助 .field,用户可以将多个字段打包成一个字;汇编器在填充完一个字之前不会递增 SPC。如果某个字段无法保留在当前字中剩余的空间内,.field 将插入0来填充当前字,然后将该字段置于下一个字中。.bits 指令具有类似情况,但不强制对齐到字段边界。请参阅 .field 主题和 .bits 主题。
#STDZ0728293 显示了如何将字段打包成一个字。使用以下汇编代码时,请注意:的 SPC 没有更改(这些字段被打包到同一个字中):
1 00000000 00000003 .field 3,4
2 00000000 00000083 .field 8,5
3 00000000 00002083 .field 16,7
- .float 指令用于计算一个浮点值的单精度(32 位)IEEE 浮点表示,并将其存储在当前段中与字边界对齐的字中。
- .half 和 .short 指令用于将一个或多个 16 位值置于当前段的连续 16 位字段(半字)中。这些指令用于自动与短(2 字节)边界对齐。
- .int、.long 和 .word 指令用于将一个或多个 32 位值置于当前段的连续 32 位字段(字)中。这些指令用于自动与字边界对齐。
- .string 和 .cstring 指令用于将一个或多个字符串中的 8 位字符置于当前段中。.string 和 .cstring 指令类似于 .byte,将 8 位字符置于当前段的每个连续字节中。.cstring 指令用于添加 C 所需的 NUL 字符;.string 指令不会添加 NUL 字符。
- .ubyte、.uchar、.uhalf、.uint、.ulong、.ushort 和 .uword 指令作为其各自有符号指令的无符号版本提供。这些指令主要由 C/C++ 编译器用于支持 C/C++ 中的无符号类型。
注: 用于初始化常量的指令(用在 .struct/.endstruct 序列中):当
.bits、.byte、.char、.int、.long、.word、.double、.half、.short、.string、.ubyte、.uchar、.uhalf、.uint、.ulong、.ushort、.uword、.float 和 .field 指令是 .struct/.endstruct 序列的一部分时,它们不会初始化存储器,而是会定义某个成员的大小。如需更多信息,请参阅
.struct/.endstruct 指令。
#STDZ0722185 使用以下已汇编代码比较了 .byte、.half、.word 和 .string 指令:
1 00000000 000000AB .byte 0ABh
2 .align 4
3 00000004 0000CDEF .half 0CDEFh
4 00000008 89ABCDEF .word 089ABCDEFh
5 0000000c 00000068 .string "help"
0000000d 00000065
0000000e 0000006C
0000000f 00000070