【问题标题】:Is NASM 'times' directive taken into account when calculating sizes?计算尺寸时是否考虑了 NASM 'times' 指令?
【发布时间】:2013-09-10 14:37:30
【问题描述】:

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

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

StructSize equ MyStructEnd - MyStruct

NASM 会足够聪明地在 MyStruct 的大小中包含最后一条指令中声明的字节还是仅包含前两个?

【问题讨论】:

标签: assembly struct size nasm


【解决方案1】:

times 1000 dw 1 替换为dw 1 1000 次,即what it does。您希望在展开的情况下正确计算大小吗?

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

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

如果您不知道这一点,您可以使用任何十六进制编辑器查看输出,或使用assignwarning 查看组装时的大小。它可以让您免去等待答案的麻烦。

【讨论】:

  • 当然会包括times。另外... Nasm 知道MyStruct_size 没有equ。我们有一本不错的手册...
  • @FrankKotler 所以有。 I did not know。谢谢你。我打算采用一种通用的方法来获取信息。
【解决方案2】:

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

注意:关键字strucistruc 中没有“t”!

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2017-12-18
    • 1970-01-01
    • 2020-01-31
    • 2021-06-14
    相关资源
    最近更新 更多