特定于NASM的部分-[SECTION]

in7*_*70x 5 assembly nasm

关于您的代码中使用Section或[SECTION](带有方括号)之间的区别,我似乎无法在NASM文档中找到任何清晰的地方。我知道这些是宏,但是我看到它们几乎可以互换使用。是这样吗 换句话说是

[SECTION .text]
Run Code Online (Sandbox Code Playgroud)

相当于

Section .text
Run Code Online (Sandbox Code Playgroud)

括号是否暗示一些不可思议的副作用?

谢谢

mat*_*tja 5

[SECTION .xyz]是节指令的原始形式,它只是设置当前输出节,SECTION .xyz略有不同,因为它的工作方式类似于宏:

SECTION .text
Run Code Online (Sandbox Code Playgroud)

扩展到两行

%define __SECT__ [SECTION .text] 
[SECTION .text]
Run Code Online (Sandbox Code Playgroud)

它可以与宏结合使用来临时切换输出部分,并将其切换回原始值。NASM 手册中的示例:

%macro  writefile 2+

[section .data]

%%str:        db      %2
%%endstr:

    __SECT__

    mov     dx,%%str
    mov     cx,%%endstr-%%str
    mov     bx,%1
    mov     ah,0x40
    int     0x21

%endmacro
Run Code Online (Sandbox Code Playgroud)

当您使用此宏时,输出部分会.data通过 的原始形式临时设置为SECTION,并通过__?SECT?__