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

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

  1. Perre

    Perre New Member

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

    .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
    Это же вроде макросы. Все компилируется как сравнение (напрмир, cmp eax,ebx) и переход на метку (например, jb)
     
  3. G13

    G13 New Member

    Публикаций:
    0
    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
    G13 мозги не в ту сторону направил, (я пытался найти в исподниках)
    Всё равно спасибо
     
  5. Y_Mur

    Y_Mur Active Member

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

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