Отвечает Олег Владимирович, Студент :
Здравствуйте, Vasiliusis. CF всегда устанавливается в 1, если операнд не ноль. OF устанавливается, так как произошло знаковое переполнение: +128 не может быть представлено одним байтом, результат оказывается -128. Кстати, это единственный операнд, для которого neg устанавливает OF.
Можете сравнить установку флагов инструкцией neg al с тем, как это делала бы sub 0, al, если бы она существовала.
Удачи!
Редактирование ответа
-----
∙ Отредактировал: Цикалов Игорь Константинович, Модератор
∙ Дата редактирования: 05.07.2009, 12:33 (время московское)
----- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович, Студент
Ответ отправлен: 05.07.2009, 10:45
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 251842
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает _Ayl_, 10-й класс :
Здравствуйте, Vasiliusis.
Команда neg al выполняется как инверсия битов исходного операнда и последующего прибавления 1
Флаг CF устанавливается в случае переноса из старшего разряда Флаг OF устанавливается в случае переполнения (Фиксирует арифметическое переполнение, т.е. перенос в/из старшего (знакового) бита при знаковых арифметических операциях)
-128 представляется в двоичном коде как 10000000 После выполнения инверсии получаем: 01111111 - положительное число Прибавляя
1 получаем 10000000 - отрицательное число
В результате будут установлены флаги SF и OF (можно проверить в отладчике результат выполнения команд: mov al, -128 not al inc al или add al, 1 )
При этом, при замене neg al на эквивалентную последовательность команд флаг переноса установлен не будет. А происходит это из-за отличий выполнения команд. Как сказано в статье, указанной в приложении: ПЕРЕПОЛНЕНИЕ БЕЗ ПЕРЕНОСА (OF=1, CF=0) - тогда, ког
да производится ТОЛЬКО перенос единицы в знаковый разряд. ПЕРЕНОС С ПЕРЕПОЛНЕНИЕМ (CF=1, OF=1) - тогда,когда производится ТОЛЬКО перенос единицы из разрядной сетки.
При выполнении последовательности команд not al, inc al получается первый случай. В случае же команды NEG нет, мы не получаем второй случай, просто, по-видимому, учитывается, что числа знаковые. Потому что команда NEG как раз и предполагает то, что операнд знаковый.
Приложение:
Ответ отправил: _Ayl_, 10-й класс
Ответ отправлен: 06.07.2009, 11:17
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 251899
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.