Необычный синтаксис fasm

Решил немного разгрузить мозги чем-то другим, отличным от рабочих вопросов. И вот мой выбор пал на тему "ассемблер" :) В свое время плотно прогал на Turbo Pascal 5.5 + TASM, но это было ооочень давно. В основном это касалось работы с видеоадаптером CGA. А когда появились EGA/VGA - актуальность начала падать. Ну это так, предисловие что-ли. Сейчас решил немного окунуться "в современность". Ассемблеров тьма, мне приглянулся fasm. Написал простенькую прогу для теста:

format PE64 console

include "C:/Tools/Fasm/INCLUDE/win64ax.inc"

.data

Message         db 'Hello World!',0
Message.length  = $ - Message
HandleFile      dq ?

.code

proc PrintFunc
  stdcall [WriteConsole], [HandleFile], Message, Message.length, 0, 0
  ret
endp

start:

  sub rsp, 40  ; резервирование в стеке (4 * 8) + 8
  and spl, -16 ; и выравнивание на 16

  stdcall [GetStdHandle], STD_OUTPUT_HANDLE
  mov [HandleFile],rax
  stdcall PrintFunc, HandleFile
  stdcall [ExitProcess],0

.end start

Где-то по докам, где-то по примерам из сети. Но обратил внимание на странное оформление секций, процедур. Вот и возник ряд вопросов:

  1. Это фишки собственных макросов fasm'а?
  2. А как такое же написать, к примеру, для nasm?
  3. А такое же, написанное для п.2 потом сам fasm компильнет?
  4. Какова ценность вот такого "синтаксиса" (вдруг потом понадобится gas'ом компилировать)?

Ответы (0 шт):