如果我有这个结构/部分:
MyStruct:
.Data1 dw 2
.Dats2 dw 3
times 1000 dw 1
MyStructEnd:
StructSize equ MyStructEnd - MyStruct
NASM 是否足够聪明,可以将最后一条指令中声明的字节包含在 MyStruct 的大小中,还是只包含前两个?
替换times 1000 dw 1
为dw 1
1000 次,这正是它所做的。您是否希望在扩展情况下正确计算大小?
正如其他人所说,您可以尝试一下:
MyStruct:
.Data1 dw 2
.Dats2 dw 3
times 9 dw 1
MyStructEnd:
%assign StructSize MyStructEnd - MyStruct
dw StructSize ; 00 16
%warning The size is StructSize ; The size is 22
如果您不知道这一点,您可以使用任何十六进制编辑器查看输出或使用带警告的分配来查看组装时的大小。它可以为您省去等待答案的麻烦。
我很抱歉。在 Nasm 知道之前MyStruct_size
,你必须这样做:
; this is just a "typedef"
struc MyStruct
Data1 resw 1
Data2 resw 1
padding times 1000 resw 1
endstruc
section .data
; here, we initialize it
istruc MyStruct
at Data1 dw 2
at Data2 dw 3
at padding times 1000 dw 1
iend
section .text
sub esp, MyStruct_size ; or whatever
注意:关键字中没有“t” struc
或istruc
!