S_T_A_S_ Я давно заметил такую тенденцию, в исходниках FASM'a тоже такое было. Это, конечно, хорошо, но MASM32 тоже добавляется в %INCLUDE%, а их включаемые файлы несовместимы. Хотя Никто не запрещает писатьтак: Код (Text): include 'Win32a.inc' ... include 'APIa\kernel32.inc' Но тогда вообще нет разницы, какая переменная путей окружения используется.
Есть вопросы по фасому. Почему в теле макроса идентификаторы записывают с приставкой знака "_" Что означают символы "." и ".." в начале идентификаторов. Идентификаторы- имена меток,констант, переменных,макросов и тд..
Pavia Эти вопросы уже задавались на форуме, и мной в том числе, были ответы, так что юзай поиск, должен найти..
http://www.wasm.ru/forum/index.php?action=vthread&forum=3&topic=6462&page=0 http://www.wasm.ru/forum/index.php?action=vthread&forum=3&topic=6475
Asterix Спарсибо разобрался. Вопрос как проверить существует ли глобальная метка с данным именим или нет?
> Вопрос как проверить существует ли глобальная метка с данным именим или нет? fasm предупредит при компиляции.
S_T_A_S_ Спасибо.Правдо в моем случаи это не проходит. Фасм выдоет, что код не может быть сгенерирован.
Решил проблему так. macro label name { name#.defined equ 0 } macro setlabel name { if name#.defined eq 0 name#: name#.defined equ 1 end if }
Pavia > Знакомая ошибочка Вместо "if defined" можно попробовать такой макрос: Код (Text): macro ifne arg { local ..here if defined ..here | ~ defined arg ..here: } Использовать так: Код (Text): ifne foo foo = 2 ; угадал ? ;-) end if Вместо EQU для присваивания чисел лучше использовать '=' EQU - директива препроцессора, выполняется ДО директив ассемблера (if), так что макрос setlabel не рабочий.
Привет S_T_A_S_ Если я не ошибаюсь то в переведенном тобой тутореале из тайги я нашел опечатку. "Другие обычные значения – это 10 и 13. 10 перемещает курсор в первую позицию текущей строки. 13 перемещает курсор на строку вниз (при достижении нижней границы экрана, он скроллируется вверх)." 10 - переход на новую строку, а вот 13 в начало строки. Кстати меня туториал очень порадовал! Если я не прав то поправь меня.
S_T_A_S_ Извини, но похоже ты не понял меня. Те два макроса: label и setlabel они работают и они являются решением данной проблемы, это почти тоже самое, что ты написал в следующем посте. Но у тебя более оригинально. Почему использую equ , а не "=". Потому что с равно не вышло, а вот equ работает с ifом .
Rohan Спасибо, ты прав 10 - "перевод строки", а 13 - "возврат каретки". Pavia Да, что-то я не разглядел твой макрос сходу :-( Меня смутило, что EQU внутри IF. Можно его вынести, всё равно смысл не изменит. Код (Text): macro setlabel name { if name#.defined eq 0 name: end if name#.defined equ 1 } C "=" не выходило, т.к. проверка условия осуществлялась посредством "eq", а нужно было использовать if name#.defined = 0 или просто if ~ name#.defined ЗЫ: макрос, который я приводил не мой, но он давно лежит на Θоруме (в составе моей библиотеки макросов)
Блин по твоей доке понял гораздо больше чем по учебнику Зубкова. После него в голове оставалать одна каша.
Гы, зачем всё так сложно: Код (Text): include 'ext.fi' !GUI ExitProcess \ <MessageBox \ GetForegroundWindow, \ @T 'hello!', \ @T 'Hello program', \ MB_OK> !END