Условные конструкции

Тема в разделе "WASM.BEGINNERS", создана пользователем Perre, 22 май 2007.

  1. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    Я наконец то осилил себя и начал изучать условные конструкции (раньше пользовался метками) и сразу возникли вопросы

    .if AdresRom == 0 ;выполняется, если AdresRom = 0
    ….
    .elseif ==1 ;выполняется, если AdresRom = 1
    ….
    .else ;выполняется в остальныхслучаях

    .endif ;конец условной конструкции

    Но я не могу понять, как объяснить компилятору такие вещи:
    Если AdresRom не равно 0
    Если AdresRom больше 10 (со знаком)
    Если AdresRom больше 10 (без знака)
    Если AdresRom меньше 10 (со знаком)
    Если AdresRom меньше 10 (без знака)
    Буду рад объяснению или хорошей ссылке
     
  2. TanKisT

    TanKisT New Member

    Публикаций:
    0
    Регистрация:
    21 авг 2006
    Сообщения:
    8
    Это же вроде макросы. Все компилируется как сравнение (напрмир, cmp eax,ebx) и переход на метку (например, jb)
     
  3. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    Perre, а хелп к masm32 слабо почитать? ;))))

    \masm32\help\masm32.hlp - где-то в его недрах заныкана тема "Comparison run-time operators"

    Код (Text):
    1.    ==            Равно                   .if a==b
    2.    !=            Не равно                .if a!=b    
    3.    >             Больше                  .if a>b
    4.    >=            Больше или равно        .if a>=b
    5.    <             Меньше                  .if a<b
    6.    <=            Меньше или равно        .if a<=b
    7.  
    8.    !             НЕ логическое           .if a==b ! b>c
    9.    &&            И логическое            .if a==b && b>c
    10.    ||            ИЛИ логическое          .if a==b || b>c
    11.  
    12.    CARRY?        флаг переноса (CF)      .if CARRY?
    13.    OVERFLOW?     флаг переполнения (OF)  .if OVERFLOW?
    14.    PARITY?       флаг чётности (PF)      .if PARITY?
    15.    SIGN?         флаг знака (SF)         .if SIGN?
    16.    ZERO?         флаг нуля (ZF)          .if ZERO?
     
  4. Perre

    Perre New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2007
    Сообщения:
    100
    G13 мозги не в ту сторону направил, (я пытался найти в исподниках)
    Всё равно спасибо
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Perre
    Для знаковых нужно явно указывать их знаковость, например:
    .if sdword ptr [AdresRom] < 0
    или соответственно sword, sbyte
    или просто описать:
    .data
    AdresRom sdword -5
    Тогда
    .code
    .if [AdresRom] < 0
    тоже даст корректный код, иначе сравнение будет беззнаковым.

    Ещё для разноборазия глянь switch в masm32\macros\macros.asm
    и Alt_IF, может понравятся :)