Почему не работает сей код: if eax = 0 invoke MessageBox,0,addr NotValidPE,addr Caption,MB_ICONERROR end if xor eax,eax ошибка: if eax = 0 error: invalid value. как сделать чтобы if мог работать с регистрами ? не буду ж я в переменную всовывать значение, чтобы потом его проверить ифом
n1kt0 А так Код (Text): test eax,eax jz a1 xor eax,eax ret a1: invoke MessageBox,0,addr NotValidPE,addr Caption,MB_ICONERROR ret
n1kt0 в masm это пишется так Код (Text): .IF (eax == 0) invoke MessageBox,eax,addr NotValidPE,addr Caption,MB_ICONERROR .ENDIF xor eax,eax
n1kt0 Извини не внимательно прочел заголовок -- бывает -- в fasm Код (Text): .if eax = 0 invoke MessageBox,eax,addr NotValidPE,addr Caption,MB_ICONERROR .endif xor eax,eax
Не пишу на fasm, но разве там используются addr? IMHO invoke MessageBox, eax, NotValidPE, Caption, MB_ICONERROR
а чем собственно тогда отличается: if ... end if от .if .... .end if т.е все прекрасно работает, только непонятно то, что выше написал invoke MapViewOfFile,[hMapping],FILE_MAP_ALL_ACCESS,0,0,0 mov [hMap],eax if hMap = 0 invoke MessageBox,0,[FileCreateError],,MB_ICONERROR end if stdcall isValidPE,[hMap] ;Check file .if eax = 0 invoke MessageBox,eax,addr NotValidPE,addr Caption,MB_ICONERROR .endif xor eax,eax
n1kt0 По смыслу не if hMap = 0 а .if [hMap] = 0 Поищи "Flat assembler 1.67 Programmer's Manual" by Tomasz Grysztar
if / else / end if - это условное ассемблирование - т.е. по условию во время сборки некоторый код может быть вставлен или нет в код программы.