若干指令用于汇编当前段的值。例如:
- .byte 和 .char 指令用于将一个或多个 8 位值置于当前段的连续 16 位字中。这些指令类似于 .word、.int 和 .long,不同之处在于每个值的宽度限制为 8 位。
- .field 和 .bits 指令用于将单个值置于当前字的指定位数中。借助 .field,用户可以将多个字段打包成一个字;汇编器在填充完一个字之前不会递增 SPC。如果某个字段无法保留在当前字中剩余的空间内,.field 将插入0来填充当前字,然后将该字段置于下一个字中。.bits 指令具有类似情况,但不强制对齐到字段边界。请参阅 .field 主题和 .bits 主题。
图 5-1 显示了如何将字段打包成一个字。使用以下汇编代码时,请注意:的 SPC 没有更改(这些字段被打包到同一个字中):
1 000000 0003 .field 3, 3
2 000000 0008 .field 8, 6
3 000000 0010 .field 16, 5
- .float 和 .xfloat 指令用于计算一个浮点值的单精度(32 位)IEEE 浮点表示,并将其存储在当前段中与字边界对齐的字中。
- .int 和 .word 指令用于将一个或多个 16 位值置于当前段的连续 16 位字段(字)中。.int 和 .word 指令用于自动与字边界对齐。
- .long 和 .xlong 指令用于将一个或多个 32 位值置于当前段的连续 32 位字段(字)中。.long 指令用于自动与字边界对齐。
- .xldouble 指令用于计算双精度浮点值的双精度(64 位)IEEE 浮点表示,并将其存储到当前段中与字边界对齐的连续 32 位字段(字)中。请注意,.double 指令不是同义词,不推荐使用。
- .string 、.cstring 和 .pstring 指令用于将一个或多个字符串中的 8 位字符置于当前段中。.string 和 .cstring 指令类似于 .byte,将 8 位字符置于当前段的每个连续16 位字中。.cstring 指令用于添加 C 所需的 NUL 字符;.string 指令不会添加 NUL 字符。借助 .pstring 指令,数据被打包,以便每个字包含两个 8 位字节。
- .ubyte、.uchar、.uint、.ulong、和 .uword 指令作为其各自有符号指令的无符号版本提供。这些指令主要由 C/C++ 编译器用于支持 C/C++ 中的无符号类型。
注: 用于初始化常量的指令(用在 .struct/.endstruct 序列中):当
.bits、.byte、.char、.int、.long、.word、.ubyte、.uchar、.uint、.ulong、.uword、.string、.pstring、.float、.xfloat、.xldouble 和 .field 指令是 .struct/.endstruct 序列的一部分时,它们不会初始化存储器,而是会定义某个成员的大小。如需更多信息,请参阅
.struct/.endstruct 指令。
图 5-2 使用以下已汇编代码比较了 .byte、.word、.long 和 .string 指令:
1 000000 00AB .byte 0ABh
2 000001 CDEF .word 0CDEFh
3 000002 CDEF .long 089ABCDEFh
000003 89AB
4 000004 0068 .string "help"
000005 0065
000006 006C
000007 0070