Специфичный для NASM - Раздел против [РАЗДЕЛ] - PullRequest
4 голосов
/ 08 мая 2011

Я не могу найти ничего ясного в документации NASM относительно различий между использованием Section или [SECTION] (с квадратными скобками) в вашем коде.Я знаю, что это макросы, но я вижу, что они используются почти взаимозаменяемо.Это тот случай?Другими словами,

[SECTION .text]

Эквивалентно

Section .text

?

Может ли скобка означать какой-то непонятный побочный эффект?

1 Ответ

2 голосов
/ 29 мая 2011

[SECTION .xyz] - это примитивная форма директивы section, которая просто устанавливает текущую секцию вывода, «SECTION .xyz» немного отличается, потому что работает как макрос:

SECTION .text

расширяется до двух строк

%define __SECT__ [SECTION .text] 
[SECTION .text]

, который можно использовать вместе с макросом для временного переключения секции вывода и возврата ее к исходному значению. Пример из руководства 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

Когда вы используете этот макрос, секция вывода временно устанавливается на .data примитивной формой SECTION и возвращается к своему исходному значению с помощью __ SECT __

...