Многострочные комментарии в 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.Multiline.Comments.zip (154,283 bytes)
FASM.1.73.32.Multiline.Comments.zip (154,283 bytes)
Просмотров: 10533 | Комментариев: 27
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(16.10.2024 в 09:58):
Обновил до версии 1.73.32
Владимир
(16.02.2022 в 19:41):
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
Всё работает, всё четко. Ковырять сиходный код оказалось очень интересным дело и полезным для меня как для начинающего. Хочу с комментариями тоже разобраться и поэкспериментировать. Собственно вопрос, в какую сторону копать, хотя бы направление, где в исходном коде можно вставить возможность добавления многострочных комментариев? Подскажите пожалуйста. Понимаю что исходный код Вы не будете выкладывать, дайте пожалуйста хотя бы намёк как это можно сделать самому.
Спасибо заранее.
С уважением,
Володя
Хочу тоже сам собрать экзешник и сделать такую возможность.
Заинтересовала вообще в целом тема исследования исходного кода 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] - без скобок правильно(((
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]>
-------------------------------
----------------------------------------
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
;----------------------------
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~
.. такой вот красивый способ комментирования
применяют в 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 нельзя ставить фигурные скопки
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" ? ;)
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
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 за сайт!
Давненько листаю, и вношу в свой багаж знаний множество интересных и полезных вещей! Удачи и процветания! =)
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).
FASM меня тогда почему-то не заинтересовал (выбирал между MASM и FASM).
Добавить комментарий
Заполните форму для добавления комментария