· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› IF в FASMe

Посл.отвђт Сообщенiе


Дата: Ноя 1, 2003 18:38:08

Приветствую всех!
Помогите разобраться.

Так работает:
msg_loop:
 invoke GetMessage, msg, 0, 0, 0
 or eax,eax
 jz end_loop
 invoke TranslateMessage,msg
 invoke DispatchMessage,msg
 jmp msg_loop
end_loop:
 invoke ExitProcess, [msg.wParam]


А так не работает:
msg_loop:
 invoke GetMessage, msg, 0, 0, 0
 if ~eax ; <----- тут выдаёт "invalid value"
  invoke ExitProcess, [msg.wParam]
 end if
 invoke TranslateMessage, msg
 invoke DispatchMessage, msg
jmp msg_loop


По докам вроде всё правильно.
Может просто я торможу, хелп плиз.


Дата: Ноя 1, 2003 19:25:37

if работает до компиляции, т.е. с их использованием можно определять какие куски кода засовывать в исполняемый файл.
Таким образом нельзя использовать их для проверки условий возникающих во время выполнения программы. Для этого есть макросы __IF и т.п. Они определены во включаемых файлах.


Дата: Ноя 1, 2003 22:50:23 · Поправил: 640kb

Выдержки из доков:
...
"You should note that "if" directive is processed at assembly stage and therefore it doesn't affect any preprocessor directives..."
...
if count>0
 mov cx,count
 rep movsb
end if
...

Если я правильно понимаю, то это:
if count>0
именно проверка условия возникшего во время выполнения проги.


Дата: Ноя 1, 2003 23:20:59

Нет, здесь сказано, что эта команда не влияет на директивы препроцессора, и выполняется в момент трансляции. Т.е. она не влияет на определения типа equ и fix. Эта конструкция
if count>0
mov cx,count
rep movsb
end if
скомпилирует
mov cx,count
rep movsb
только если ранее была объявлена числовая константа count больше нуля. Так если числовая константа была объявлена count = 3, то этот кусок кода попадёт в программу
mov cx,3
rep movsb
Хочу обратить внимание на то, что count это не переменная а константа.


Дата: Ноя 2, 2003 11:41:58

Спасибо, стало понятно.
В принципе я уже немного разобрался с макросами .if,
.еndif и т.д., но ещё привыкнуть нужно.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.064