Вопрос по ассемблеру. Помогите разобраться

Тема в разделе "WASM.ASSEMBLER", создана пользователем raccon, 15 окт 2010.

  1. raccon

    raccon New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    3
    Столкнулся с очень интересной ситуацией. Суть в следующем. Вот код на ассемблере:
    Код (Text):
    1.      mov al,81h ; = +-129
    2.      mov bl,80h ; = +-128
    3.      cmp al,bl
    4.      ja _ja    ; если al > bl... al и bl берутся как безнаковые  (1)
    5.      jg _jg    ; если al > bl... al и bl берутся как ЗНАКОВЫЕ!
    6.      jmp quit
    7.      
    8. _ja:
    9.      ; выполняется код здесь, так как 129 > 128
    10.      jmp quit
    11. _jg:
    12.      ; выполняется код здесь, так как OF = SF и ZF = 0, НО... -129 < -128 !!!!!
    13.      
    14. quit:
    Так вот. В данном коде выполнится условный переход по метке _ja (так как 129 > 128 (по состояниям флагов тоже все верно: CF = 0, ZF = 0, SF = 0 OF = 0)).
    Но, если закоментить строку (1), то переход выполнится и по метке _jg, хотя казалось бы, числа берутся как знаковые: -129 < -128, то есть перехода быть не должно, однако изходя из состояния флагов все верно: SF = OF и ZF = 0
    Если просчитать все на листочке, то все вроде бы ок. Но где же здравый смысл ? Ведь -129 < -128
    Мозги кипят уже. В чем дело то ? Или я что то упустил ?
     
  2. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    byte = -128..255 ;редактировал

    81h = -127
    80h = -128
    -127 > -128
    jg = TRUE
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Напиши простенькую прогу выводящую на экран рядом знаковое и беззнаковое представление числа - сразу увидишь что 81h это ни разу не -129 ;)
     
  4. raccon

    raccon New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    3
    Элментарно, Ватсон, блин...
     
  5. raccon

    raccon New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    3
    Спасибо.