FASM (расшифровывается как Flat Assembler - Ассемблер Плоского Режима) - это крайне необычный транслятор с экзотичными возможностями.
Что же такое FASM? Это ассемблер с предельно упрощенным синтаксисом, качественным кодогенератором,
мощным макропроцессором и гибкой системой управления за форматом выходных файлов.
Плюсы FASM в том, что он может генерировать очень маленький код, имеет офигенный простой синтаксис(из всех ассемблеров) и вобще по моему ничего круче еще не придумали.
Из недостатков можно выделить несовместимость с MASM/TASM но это по моему не нужно.

Итак, приведем самую простую программу на FASM, которая выводит сообщение: "Fuck you, Windows".

Minimal.asm

format PE GUI 4.0                     ;формат EXE файла
include 'C:\FASM\include\win32ax.inc' ;подключаем макросы

.code

  start:                                                                                                                  ;начало метки Start
invoke invoke  MessageBox,HWND_DESKTOP,"Fuck you, Windows","Minimal",MB_OK  ;выводит Message Box с текстом "Fuck you, Windows", заголовком "Minimal" и кнопочкой OK
invoke ExitProcess,0                                                                                              ;завершает прогу

.end start                                                                                                              ;конец метки Start

Попробуем усовершенствовать нашу программу, чтоб она могла посчитать (135+200-56):2 и вывести это в сообщение.

Minimal2.asm

;Итак нам надо чтобы наша программа посчитала (135+200-56):2 и вывела результат.
;Вместо переменных используются регистры процессора или ячейки памяти.
;Код который посчитает нам результат этих вычислений:

format PE GUI 4.0                             ;формат EXE файла
include 'C:\FASM\include\win32ax.inc' ;подключаем макросы

.code

  start:                       ;начало метки Start
                                 ;посчитаем выражение (135+200-56):2
        mov eax,135      ;заносим в регистр eax значение 135
        add eax,200       ;прибавляем к eax 200
        sub eax,55         ;отнимаем от результата 56
        mov bl,2            ;заносим делитель в BL
        div bl                 ;делим EAX на BL

        ;Результат получаем в eax. В ASCII число преобразуем так:
        invoke wsprintf,ebx,szformat,eax

        invoke  MessageBox,HWND_DESKTOP,"Fuck you, Windows","Minimal2",MB_OK    ;выводит Message Box с текстом "Fuck you, Windows", заголовком "Minimal2" и кнопочкой OK
        invoke  MessageBox,HWND_DESKTOP,ebx,"Minimal2",MB_OK                             ;выводит Message Box с числом "140", заголовком "Minimal2" и кнопочкой OK
        invoke  ExitProcess,0                                                                                       ;завершает прогу

.end start                    ;конец метки Start

szformat db "%u",0      ; эта строка нужна чтобы правильно отобразилось число           

Фуух))) Можете спокойно скопировать и наслаждатся своей первой программой на FASM. Можете подставлять различные числа и проверить какое число посчитает прога.
Вобщем, эксперементируйте!!!

FASM Tutorial by Dr.Lithium/minor9k
E-mail: spectrum53@yandex.ru