|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.01.2015, 21:40 | #1 |
Пользователь
Регистрация: 14.09.2007
Сообщений: 12
|
Помогите с командой cmp
Здравствуйте уважаемые программисты.
С Новым Годом Вас всех. Помогите пожалуйста понять следующий момент. Как действует команда cmp r1,20h на флаг OF Привожу 4 скриншота. 2 случая, до выполнения команды cmp и после. В одном случае данная команда выставляет флаг OF, а в другом сбрасывает. В обоих случаях результат сравнения больше значения 20h В чем моя ошибка? 1.jpg 2.jpg 3.jpg 4.jpg |
01.01.2015, 22:15 | #2 |
Пользователь
Регистрация: 14.09.2007
Сообщений: 12
|
Щас только обнаружил что флаг OF после CMP переписывает в себя значение флага SF которое было перед сравнением.
Это так? |
01.01.2015, 22:31 | #3 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,342
|
Команда CMP используется для сравнения двух операндов методом вычитания. После вычитания меняются значения 6 флагов: OF, SF, ZF, AF, PF, CF.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
03.01.2015, 05:23 | #4 | |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
Цитата:
значение регистра 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. |
|
06.02.2015, 07:32 | #5 |
Пользователь
Регистрация: 14.09.2007
Сообщений: 12
|
Спасибо большое всем ответившим.
Я забыл про эту тему потому что сам нашел причину, о которой написал во втором посте. В ассемблер влезаю только по мере крайней необходимости и по сему не знал некоторых нюансов. В частности тот факт что флаг OF после CMP переписывает в себя значение флага SF которое было перед сравнением. Как только это мне открылось, все встало на свои места. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не могу разобраться с командой 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 |