![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 10.05.2010
Сообщений: 3
|
![]()
Перемножены 2 числа. резутьтаты после знакового умножения в первом случае такие: 1) 0000000011111111
во втором такие 2) 1111111100000000 Почему флаги OF и CF после знакового умножения устанавливаются в 1 в обоих случаях? Обясните пожалуйста? |
![]() |
![]() |
![]() |
#2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
какие числа перемножаются?
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 10.05.2010
Сообщений: 3
|
![]()
это уже результат перемножения целых чисел со знаком. Нужно определить какие будут флаги с таким результатом(это OF=1, CF=1) .
Конкретные множетели не так важны. Один из них со знаком. Я не понимаю почему флаги OF и CF после знакового умножения устанавливаются в 1 в обоих случаях? |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
cvbcvb
Внимательно читай описание команд Синтаксис команды: IMUL источник IMUL приемник, источник IMUL приемник, источник, число Назначение: Умножение чисел со знаком Команда имеет три формы, различающиеся числом операндов: 1) IMUL источник: источник (регистр или переменная) умножается на AL, АХ или ЕАХ (в зависимости от размера операнда), и результат располагается в АХ, DX:AX или EDX:EAX соответственно. 2) IMUL приемник,источник: источник (регистр или переменная) умножается на приемник (регистр), и результат заносится в приемник. 3) IMUL приемник,источник,число: источник (регистр или переменная) умножается на число, и результат заносится в приемник (регистр). Во всех трех вариантах считается, что результат может занимать в два раза больше места, чем размер источника. В первом случае приемник автоматически оказывается достаточно большим, но во втором и третьем случаях могут произойти переполнение и потеря старших бит результата. Флаги OF и CF будут равны единице, если это произошло, и нулю, если результат умножения поместился целиком в приемник (во втором и третьем случаях) или в младшую половину приемника (в первом случае). Значения флагов SF, ZF, AF и PF после команды IMUL не определены. |
![]() |
![]() |
![]() |
#5 | |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
чтобы было более понятно - процитирую Рикардо Нарваха, в переводе Aquila - "Введение в крэкинг с нуля, используя OllyDbg" - Глава 5
IMUL (умножение со знаком) Инструция IMUL - это умножение со знаком и употребляется аналогично MUL. Код:
Несмотря на сходство с инструкцией MUL, IMUL позволяет использовать больше одного операнда, что невозможно в случае с MUL. Цитата:
Код:
Код:
Пусть ESI = 401000, ESI + 74 - это адрес 401074, содержимым которого, допустим, является число C7000000. C7000000, будет умножено на FF800002, а результат данной операции будет сохранён в EBP. Калькулятор даёт нам следующий результат операции C7000000 * FF800002=C69C80018E000000. Но поскольку EBP не может вместить его полностью, то в нём остаётся только то, что поместилось, а остальное отбрасывается. EBP=8E000000. При этом флаги OF и CF будут равны единице. В третьем примере только два операнда, оба из которых перемножаются, а результат сохраняется в первый из них. Код:
Последний раз редактировалось Mikl___; 15.03.2012 в 05:35. |
|
![]() |
![]() |