Blog. Just Blog

Многострочные комментарии в FASM

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Многострочные комментарии в FASM
Многострочные комментарии в FASM

Во время создания и тестирования программ на FASM часто случается так, что надо закомментировать большие отрезки кода. В оригинальном FASM допустимо только комментирование единичных строк программы. Такой комментарий начинается со знака ; (точка с запятой) и заканчивается с последним знаком данной строки. Во многих языках высокого уровня комментарии могут охватывать сразу несколько строк кода (например в языке C/C++, где закомментированный фрагмент находится между символами /* и */). Впервые для FASM реализацию таких комментариев сделал Николай Гайдук, но, к сожалению, первый и последний патч был изготовлен Николаем для версий FASM 1.67.*, а на на официальном форуме FASM идея также не нашла понимания со стороны автора. Я тоже однажды писал Tomasz Grysztar, чтобы он добавил многострочные комментарии в официальную версию, но ответа так и не получил. Поэтому для личного использования я внес соответствующие изменения в исходники последней версии FASM 1.71.13, может быть кому-нибудь из любителей этого языка такой вариант комментариев тоже понравится. Я же, в свою очередь, буду вносить изменения в следующие версии и выкладывать их здесь же.

Скачайте оригинальный дистрибутив Flat Assembler с офсайта, а затем замените в нем файлы FASM.EXE и FASMW.EXE на файлы из приложения:

FASM 1.73.32 с поддержкой многострочных комментариевFASM 1.73.32 с поддержкой многострочных комментариев

FASM.1.73.32.Multiline.Comments.zip (154,283 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 10533 | Комментариев: 27

Метки: Assembler, FASM
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
ManHunter (16.10.2024 в 09:58):
Обновил до версии 1.73.32
Владимир (16.02.2022 в 19:41):
Нашел
http://mikhajduk.ho.ua/RU/Preproce.html
Ещё раз спасибо за подсказку!
ManHunter (16.02.2022 в 19:07):
У Николая на сайте исходник PREPROCE.INC, по аналогии из него берутся измененные места и вставляются в исходник с офсайта FASM. Сайт не отвечает, переложил сюда: https://www.upload.ee/files/13...OCE.INC.html
Потом все это компилируется им же. Ну и я еще для эстетики немного добавляю от себя, на функционал мои правки не влияют.
Владимир (16.02.2022 в 19:01):
Дмитрий, добрый день, спасибо большое за статью и за то что подняли этот вопрос, это правильно и актуально. Многострочные комментарии ОЧЕНЬ нужны, странно что их нет в базовой комплектации.
Хочу тоже сам собрать экзешник и сделать такую возможность.
Заинтересовала вообще в целом тема исследования исходного кода FASM-a, вот недавно по этой статье прикрутил себе возможность отладки
https://www.cyberforum.ru/fasm...1248583.html
Всё работает, всё четко. Ковырять сиходный код оказалось очень интересным дело и полезным для меня как для начинающего. Хочу с комментариями тоже разобраться и поэкспериментировать. Собственно вопрос, в какую сторону копать, хотя бы направление, где в исходном коде можно вставить возможность добавления многострочных комментариев? Подскажите пожалуйста. Понимаю что исходный код Вы не будете выкладывать, дайте пожалуйста хотя бы намёк как это можно сделать самому.
Спасибо заранее.
С уважением,
Володя
Красивые коменты))) (25.01.2021 в 17:12):
macro REM text&{match ==,text}

REM::::::::::::::::::CAPTION:::::::::::::::::::::::
{
***********************BODY************************
EAX,ECX,EDX      - разрушаемые
EBX,ESI,EDI,EBP  - свободные(восстанавливаемые ОС)

.data
_text db db 13,"https://www.manhunter.ru/",10,0
_text.sz = $-_text
.code
        hFile equ ebx
        label bSize  DWORD at EBP+0x04
        invoke WriteConsole,hFile,text,[text.sz],[bSize],0
        mov   hFile, eax               
***************************************************
}

[text.sz] - без скобок правильно(((
UDN (19.04.2016 в 02:29):
У меня в include 'win32ax.inc' прописаны:
----------------------------------------
macro comment[.]{match .,.} ; "comment" и "{" - должны быть на одной строке
                            ; иначе код будет исполняемым

macro ...[.]{match .,.}     ; аналог macro comment[.]{match .,.}

macro ..[.]{.}              ; макрос для записи кода в одну строку
----------------------------------------
comment не исполняемым блок кода { 
        ..<cmp     [msg],WM_INITDIALOG>,je      .wminitdialog
        ..<cmp     [msg],WM_COMMAND>,   je      .wmcommand
        ..<cmp     [msg],WM_CLOSE>,     je      .wmclose
}
----------------------------------------
comment исполняемым блок кода

        ..<cmp     [msg],WM_INITDIALOG>,je      .wminitdialog
        ..<cmp     [msg],WM_COMMAND>,   je      .wmcommand
        ..<cmp     [msg],WM_CLOSE>,     je      .wmclose
}

comment пример подстрочной записи кода

..<invoke GetProcessHeap>, <invoke HeapAlloc, eax, HEAP_ZERO_MEMORY,nBytes>
mov [pMem], eax
...
..<invoke GetProcessHeap>, <invoke HeapFree, eax, 0, [pMem]>
-------------------------------
user (17.12.2015 в 00:59):
наткнулся на такое решение для FASM:
;----------------------------
COMMENT fix match +,- {
COMMEND fix }
;----------------------------

;Example of usage:
COMMENT
This
is
multiple
line
comment
COMMEND
ManHunter (27.06.2015 в 01:11):
Не только Си используют такой стиль камментов, для PHP и JavaScript он тоже подходит. Лично для меня удобнее использовать везде одинаковый стиль, чем лепить всякие COMMENT и условные конструкции.
user (27.06.2015 в 01:01):
COMMENT~
.. такой вот красивый способ комментирования
применяют в Microcоft'e. Это стандартно для MASM/TASM (тут ранее упоминалось об этом). А комментарии в стиле Си смотрятся в ассемблерном тексте диковато, если честно ..
Многострочный комметарий с текстом пояснений обычно комментирую ";", макросы в редакторе нормально работают. А если это кусок кода - тогда <IF 0>..<ENDIF> - и выыглядит нормально, и всегда можно поменять на <IF 1>.
END_COMMENT~
ManHunter (08.11.2014 в 23:09):
Зачем эти извраты? Я уже давно перешел на связку sublime text + компилятор fasm с  многострочными камментами, остальное даже не вспоминаю.
Дима (08.11.2014 в 20:15):
ManHunter на мой взгляд целесообразней применять директиву rept для  комментарий:
rept 0 {
Это коментарий
}     
Вариант
if 0
fjk
end if
не очень подходит для комментарий, т.к. обрабатывается во время ассемблирования, а это значит что такой трюк не сработает:
if 0
   тут все#$_)()_ будет пропущено
end if   
а вот с rept нельзя ставить фигурные скопки
ManHunter (14.01.2014 в 06:48):
Анатолий, все эти изменения внесены.
Анатолий (27.12.2013 в 11:06):
library kernel32, 'kernel32.dll',\   ; <- всё ок.
library kernel32, 'kernel32.dll',\   /**/ <- ошибка.

Чтобы исправить, смотрим тут: http://board.flatassembler.net...t=7115#57033

п.с. было-бы круто еще запилить подсветку в FASMW для /**/ по аналогу ; (asm_syntax_colors = 0x808080). Может кто силен, пошуршите над "_key_color_comments" ? ;)
ManHunter (17.11.2013 в 10:24):
В TASM есть такое дело, знаю. Сам на нем немало килобайт в свое время скомпилил. А вот тут нет и, похоже, не предвидится :(
Александр (17.11.2013 в 01:56):
Странно, в самом древнем TASM есть директива Comment <любой знак> ... <тот же знак>. Странно, почему в FASM нет. Может все-таки где-то в дебрях мануалов есть. А можно еще использовать хороший редактор или IDE, в котором есть функция "Закомментировать/раскомментировать" выделенный фрагмент. Конечно, это для кого-угодно, но только не для ManHunter, которого хлебом не корми - дай в коде покопаться :) Удачи и спасибо за статьи.
user (25.10.2013 в 22:54):
Ну, а как же способ комментирования <IF 0>...<ENDIF>? Неужели не работает?
ManHunter (19.10.2013 в 11:08):
zummenix, "из коробки" никогда не было. Если что и было, то какие-то кустарные решения типа этого.
zummenix (19.10.2013 в 10:35):
В FASMW была же вроде возможность закомментировать выделением? Или я с чем-то путаю?
УченикЗилинского (19.10.2013 в 10:20):
Напишите клиента к базе данных, через ОлеДб, будет интересно почитать.
ManHunter (16.10.2013 в 20:11):
Тогда уж так

if 0
  тут все будет пропущено
end if
Анатолий (16.10.2013 в 19:15):
Еще можно комментировать посредством макросов, аля:

macro COMMENT [args] {
local useless
macro useless args
}

;COMMENT {
; тутки комментарий
;}

или

macro comment {
  match +,- \{
}
end_comment fix }

;comment
; и тут тоже
;end_comment

п.с.
Спасибо вам ManHunter за сайт!
Давненько листаю, и вношу в свой багаж знаний множество интересных и полезных вещей! Удачи и процветания! =)
ManHunter (16.10.2013 в 12:52):
Как-то не привык к ассемблерным IDE, но может когда-нибудь и буду использовать.
distortion (16.10.2013 в 12:49):
Между делом спрошу - почему не пользуетесь IDE к fasm? Я, к примеру, использую fresh (http://fresh.flatassembler.net/).
Grey (16.10.2013 в 12:23):
на RedASM FASM тоже нормально работает.
УченикЗилинского (16.10.2013 в 09:38):
Меня еще в универе присадили на МАСМ + РадАсм.

Видно, что Фасм тоже годный, но так лень его фишки заново узнавать учить.

Хотя это конечно ерунда по сравнению с ГнуАсмом
ManHunter (16.10.2013 в 08:43):
У меня ситуация в точности наоборот, MASM так и не признаю.
4kusN!ck (15.10.2013 в 22:47):
Я в своё время юзал MASM в связке с RedASM - хватало, и многострочные комменты вроде работали из коробки.
FASM меня тогда почему-то не заинтересовал (выбирал между MASM и FASM).

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0058 сек.) / Память: 4.5 Mb
Наверх