Я наконец то осилил себя и начал изучать условные конструкции (раньше пользовался метками) и сразу возникли вопросы .if AdresRom == 0 ;выполняется, если AdresRom = 0 …. .elseif ==1 ;выполняется, если AdresRom = 1 …. .else ;выполняется в остальныхслучаях … .endif ;конец условной конструкции Но я не могу понять, как объяснить компилятору такие вещи: Если AdresRom не равно 0 Если AdresRom больше 10 (со знаком) Если AdresRom больше 10 (без знака) Если AdresRom меньше 10 (со знаком) Если AdresRom меньше 10 (без знака) Буду рад объяснению или хорошей ссылке
Это же вроде макросы. Все компилируется как сравнение (напрмир, cmp eax,ebx) и переход на метку (например, jb)
Perre, а хелп к masm32 слабо почитать? ))) \masm32\help\masm32.hlp - где-то в его недрах заныкана тема "Comparison run-time operators" Код (Text): == Равно .if a==b != Не равно .if a!=b > Больше .if a>b >= Больше или равно .if a>=b < Меньше .if a<b <= Меньше или равно .if a<=b ! НЕ логическое .if a==b ! b>c && И логическое .if a==b && b>c || ИЛИ логическое .if a==b || b>c CARRY? флаг переноса (CF) .if CARRY? OVERFLOW? флаг переполнения (OF) .if OVERFLOW? PARITY? флаг чётности (PF) .if PARITY? SIGN? флаг знака (SF) .if SIGN? ZERO? флаг нуля (ZF) .if ZERO?
Perre Для знаковых нужно явно указывать их знаковость, например: .if sdword ptr [AdresRom] < 0 или соответственно sword, sbyte или просто описать: .data AdresRom sdword -5 Тогда .code .if [AdresRom] < 0 тоже даст корректный код, иначе сравнение будет беззнаковым. Ещё для разноборазия глянь switch в masm32\macros\macros.asm и Alt_IF, может понравятся