Проверка на переполнение

Тема в разделе "WASM.BEGINNERS", создана пользователем Llirik, 2 июл 2019.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    В Visual Studio написал такой код:
    Код (C):
    1. int main()
    2. {
    3.    int a;
    4.    int b;
    5.    UCHAR i=0;
    6.    i = 254;
    7. //   i=i+2;
    8.    _asm {
    9.      add i,2
    10.      mov eax, 0xffffffff
    11.      add eax, 2
    12.      jo aa
    13.    }
    14.    b = 0;
    15.    aa:
    16.    a = 0;
    17.    return 0;
    Подскажите, пожалуйста, почему проверка не выполняется и не происходит переход на аа?
     
    Последнее редактирование модератором: 2 июл 2019
  2. Prober

    Prober Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    32
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Llirik,
    Содержимое OF после сложения/вычитания соответствует формуле
    Overflow Flag = Sign Op1 XOR Sign Op2 XOR Sign Flag XOR Carry Flag
     
    Последнее редактирование: 3 июл 2019
  4. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Всем спасибо! Сделал так:
    Код (Text):
    1.   i = 254;
    2.    i+=3;
    3.    _asm {
    4.      jc aa
    5.      jo aa
    6.    }
    7.    b = 0;
    8.    aa:
    9.    a = 0;
    10.    return 0;
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    А зачем сразу и карри и оверфлоу проверять? Карри это переполнение беззнакового типа, оверфлоу переполнение знакового.