-1

如果我有这个结构/部分:

MyStruct:
    .Data1 dw 2
    .Dats2 dw 3
    times 1000 dw 1
MyStructEnd:

StructSize equ MyStructEnd - MyStruct

NASM 是否足够聪明,可以将最后一条指令中声明的字节包含在 MyStruct 的大小中,还是只包含前两个?

4

2 回答 2

3

替换times 1000 dw 1dw 11000 次,这正是它所做的。您是否希望在扩展情况下正确计算大小?

正如其他人所说,您可以尝试一下:

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

如果您不知道这一点,您可以使用任何十六进制编辑器查看输出或使用带警告的分配来查看组装时的大小。它可以为您省去等待答案的麻烦。

于 2013-09-10T18:51:39.310 回答
1

我很抱歉。在 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” strucistruc

于 2013-09-10T20:41:50.437 回答