Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2015, 21:40   #1
Viktor2004
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 12
По умолчанию Помогите с командой cmp

Здравствуйте уважаемые программисты.
С Новым Годом Вас всех.
Помогите пожалуйста понять следующий момент.
Как действует команда cmp r1,20h на флаг OF
Привожу 4 скриншота. 2 случая, до выполнения команды cmp и после.
В одном случае данная команда выставляет флаг OF, а в другом сбрасывает.
В обоих случаях результат сравнения больше значения 20h
В чем моя ошибка?
1.jpg
2.jpg
3.jpg
4.jpg
Viktor2004 вне форума Ответить с цитированием
Старый 01.01.2015, 22:15   #2
Viktor2004
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 12
По умолчанию

Щас только обнаружил что флаг OF после CMP переписывает в себя значение флага SF которое было перед сравнением.
Это так?
Viktor2004 вне форума Ответить с цитированием
Старый 01.01.2015, 22:31   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Команда CMP используется для сравнения двух операндов методом вычитания. После вычитания меняются значения 6 флагов: OF, SF, ZF, AF, PF, CF.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.01.2015, 05:23   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Как действует команда cmp r1,20h на флаг OF
не нашел в скринах регистра r1, если для Viktor2004 регистр R1 и регистр CL это одно и тоже, то мне его очень жаль...
значение регистра OF определяется по формуле SOp1 xor SOp2 xor CF xor SResultat, где SOp1 - знак операнда #1, SOp2 - знак операнда #2, CF - содержимое флага переноса, SResultat - знак результата, содержимое OF после CMP CL,20h будет совпадать с SUB CL,20h

внимательно просмотрел скрины, первые два рисунка CL=82h/CMP CL,20h/OF=1
вторые два рисунка BL=31h/CMP BL,20h/OF=0
1) беззнаковое вычитание 82h-20h=62h, вычитание со знаком -126-32=98 CF=0 OF=1
OF=SOp1 xor SOp2 xor SResultat xor CF = 1 xor 0 xor 0 xor 0 = 1
2) беззнаковое вычитание 31h-20h=11h, вычитание со знаком 49-32=17 CF=0 OF=0
OF=SOp1 xor SOp2 xor SResultat xor CF = 0 xor 0 xor 0 xor 0 = 0
формула OF=SOp1 xor SOp2 xor SResultat xor CF работает!

Последний раз редактировалось Stilet; 06.02.2015 в 07:41.
Mikl___ вне форума Ответить с цитированием
Старый 06.02.2015, 07:32   #5
Viktor2004
Пользователь
 
Регистрация: 14.09.2007
Сообщений: 12
По умолчанию

Спасибо большое всем ответившим.
Я забыл про эту тему потому что сам нашел причину, о которой написал во втором посте. В ассемблер влезаю только по мере крайней необходимости и по сему не знал некоторых нюансов. В частности тот факт что флаг OF после CMP переписывает в себя значение флага SF которое было перед сравнением. Как только это мне открылось, все встало на свои места.
Viktor2004 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с командой if FRATER1234 Общие вопросы C/C++ 25 28.09.2011 09:27
Как заменить cmp? VintProg Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 14.08.2011 16:40
cmp и указатели CraZZZy-GameRRR Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 08.03.2011 23:46
Проблемы с командой else. docbrain Общие вопросы Delphi 5 28.04.2010 01:53