Добрый день. В общем, решил асм под дос выучить с помощью Абеля. Ну и на проге 2-3 задумался, когда начал смотреть в дебаге. Вот сама программа: Код (Text): stacksg segment para stack 'Stack' dw 32 dup(?) stacksg ends codesg segment para 'Code' begin proc far push ds sub ax,ax push ax mov al,30h shl al,1 mov bl,18h mul bl ret begin endp codesg ends end begin Смотрю в дебаге, вплоть до shl картина с флагами такая: NV UP EI PL ZR NA PE NC После shl поменялся флаг внешнего переноса(по Абелю) с NA на AC. До умножения AX=0060h,BX=0018h. После умножения AX=0900h,но почему выставились флаги переполнения OV и переноса CY? Смотрю у Абеля: Переполнение - указывает на переполнение старшего бита при арифметических операциях,Перенос- содержит перенос из старшего бита. В общем долго медитировал, а так понять ничего и не смог . Объясните плз почему выставились флаги переполнения и переноса, вроде переноса из старшего бита не было(?).
зачем медитировать? 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
То есть при любом раскладе если старший байт не равен 0, то переполнение и перенос будут равны 1? Хмм, спасибо --------------- Только что проверил: не при любом раскладе. Как я понял, эти флаги ставились потому что я умножал на BL, а не на BX(т.е для BL как раз и было и переполнение, и перенос, т.к. ответ выходил за рамки байта). Изменил на BX - все прекрасно =), флаги не ставятся.