Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: 10-й класс
Рейтинг: 720
∙ повысить рейтинг >>
AMV007
Статус: 3-й класс
Рейтинг: 145
∙ повысить рейтинг >>
Jimhucksly
Статус: 3-й класс
Рейтинг: 103
∙ повысить рейтинг >>

∙ / КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 1233 от 10.07.2009, 10:35
Администратор рассылки: Лысков Игорь Витальевич, Модератор
В рассылке: подписчиков - 427, экспертов - 62
В номере: вопросов - 1, ответов - 2

Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
оценить выпуск >>

Вопрос № 170155: Здравствуйте, эксперты. Почему последовательность команд

Код:
   
Вопрос № 170155:

Здравствуйте, эксперты.
Почему последовательность команд

Код:
mov al, -128
neg al



одновременно устанавливает флаги of и cf???

Отправлен: 05.07.2009, 10:23
Вопрос задал: Vasiliusis, Посетитель
Всего ответов: 2
Страница вопроса >>


Отвечает Олег Владимирович, Студент :
Здравствуйте, 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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает _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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке:
    оценить выпуск >>

    подать вопрос экспертам этой рассылки >>

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.5 от 08.07.2009

    В избранное