|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 19, 2004 16:34:30 Сабж собственно имеет место быть, если да то где можно почитать об этом ? |
|
|
Дата: Июл 19, 2004 16:39:38 |
|
|
Дата: Июл 19, 2004 16:48:40 Нашел немножко здесь http://www.wasm.ru/article.php?article=macrocmd но хотелось бы побольше примеров. intuit Спасибо, я посмотрю, что-то мне эта страничка напоминает, уж не Юров ли. |
|
|
Дата: Июл 19, 2004 18:14:20 · Поправил: Asterix intuit Там tasm в общем-то, жалко :-( Хотя многое совпадает и то что мне было нужно я нашёл :-) Забыл, есть ведь help к masm32.. |
|
|
Дата: Июл 19, 2004 18:28:02 Кстати, S_T_A_S_, а что там по поводу условной компиляции в FASM ? |
|
|
Дата: Июл 19, 2004 21:31:57 · Поправил: S_T_A_S_ Asterix Это конечно не совсем относится к первоначальной теме про MASM :) В FASM условная компиляция присутствует. Например, когда используешь макрос proc, ф-ция будет включена в экзешник, только если где-то есть её вызов (call / invoke) Если же она не используется, то откомпилирована не будет, это очень удобно. С примерами туго :( Официальный Programmer's Manual - там раздел на один экран. (2.2.2 Conditional assembly) Кое-что есть в "FASM Preprocessor Tutorial by vid", 7. Условный препроцессинг. Основная проблема с которой можно столкнуться при переходе с MASM - в FASM IF/ELSE IF/END IF относятся именно к компилятору (ассемблеру) (в MASM по-видимому к препроцессору). Т.е. работает для условной компиляции мнемоник и всяких db/dd Поэтому IF'ы не влияют на выполнение таких директив препроцессора как EQU и FIX или определения макросов и структур. Код if 0 foo equ 0 end if будет всё равно задавать foo значение 0. Для того, что бы это обойти, Privalov написАл специальный макрос:
macro define name { name fix defined }; TO DO
macro ifdef name, condmacro, elsemacro
{
macro ifdef#name _% elsemacro %_
macro ifdef#defined _% condmacro %_
ifdef#name
purge ifdef#defined, ifdef#name
}
Т.е. если где-то указать: define yes то при обработке ifdef yes, first, second будет выполнен макрос first, если не указывать define, то second Если нужен какой-то конкретный пример, напиши, попробую придумать. |
|
|
Дата: Июл 19, 2004 22:30:45 меня вот что интересует, в masm как оказалось я могу сделать следующее: определить константу, например, DEBUG equ 1 а в коде написать следующее IF DEBUG invoke MessageBox, .., .., .., .. ENDIF Т.е. если DEBUG == TRUE, то код с MsgBox попадёт в программу. Есть то же самое в FASM ? |
|
|
Дата: Июл 19, 2004 22:54:24 Уже проверил, это работает и в fasm :) DEBUG = 1 if DEBUG xor eax, eax end if |
|
|
Дата: Июл 20, 2004 04:27:47 S_T_A_S_ В качестве параметров condmacro и elsemacro передаются названия макросов с параметрами? |
|
|
Дата: Июл 20, 2004 07:33:35 У меня как-то был набор ASSERT-ов для TASM32 сделанный через условную компиляцию - как в "C". Или вот ещё неплохое макро для единого исходного кода (UNICODE/ANSI):
UnicodeApi macro api
IFDEF UNICODE
api TextEqu <api&W>
extern api&W : proc
ELSE
api TextEqu <api&A>
extern api&A : proc
ENDIF
endm
UnicodeApi CreateWindowEx
UnicodeApi GetWindowLong
UnicodeApi ...
...
call api, ...
...
|
|
|
Дата: Июл 20, 2004 14:07:27 pas Можно и с параметрами, но тода нужно так: ifdef yes, <first 0,1,2,3,4,5>, <second 6,7,8> |
|
|
Дата: Июл 20, 2004 18:20:19 S_T_A_S_ Спасибо. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073 |