Непонятки с флагами переполнения и переноса

Тема в разделе "WASM.BEGINNERS", создана пользователем lcrowl, 27 янв 2007.

  1. lcrowl

    lcrowl New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2006
    Сообщения:
    72
    Добрый день. В общем, решил асм под дос выучить с помощью Абеля. Ну и на проге 2-3 задумался, когда начал смотреть в дебаге.

    Вот сама программа:

    Код (Text):
    1. stacksg segment para    stack   'Stack'
    2.         dw  32  dup(?)
    3. stacksg ends
    4. codesg  segment para    'Code'
    5. begin   proc    far
    6.         push    ds
    7.         sub ax,ax
    8.         push    ax
    9.  
    10.         mov al,30h
    11.         shl al,1
    12.         mov bl,18h
    13.         mul bl
    14.         ret
    15. begin   endp
    16. codesg  ends
    17.         end begin
    Смотрю в дебаге, вплоть до shl картина с флагами такая: NV UP EI PL ZR NA PE NC
    После shl поменялся флаг внешнего переноса(по Абелю) с NA на AC.
    До умножения AX=0060h,BX=0018h. После умножения AX=0900h,но почему выставились флаги переполнения OV и переноса CY? Смотрю у Абеля: Переполнение - указывает на переполнение старшего бита при арифметических операциях,Перенос- содержит перенос из старшего бита. В общем долго медитировал, а так понять ничего и не смог :dntknw:. Объясните плз почему выставились флаги переполнения и переноса, вроде переноса из старшего бита не было(?).
     
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    зачем медитировать?

    The OF and CF flags are cleared to 0 if the upper half of the result is 0; otherwise, they are set to 1.

    Easy Assembler Shell v3.99 Copyright(C) 1999 Roman Novgorodov
     
  3. lcrowl

    lcrowl New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2006
    Сообщения:
    72
    То есть при любом раскладе если старший байт не равен 0, то переполнение и перенос будут равны 1? Хмм, спасибо :)

    ---------------
    Только что проверил: не при любом раскладе. Как я понял, эти флаги ставились потому что я умножал на BL, а не на BX(т.е для BL как раз и было и переполнение, и перенос, т.к. ответ выходил за рамки байта). Изменил на BX - все прекрасно =), флаги не ставятся.
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494