Mail.ruПочта0Мой Мир0ОдноклассникиВКонтактеИгры0ЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ассемблер. Команда cmp.

Nastya NasNas Знаток (334), на голосовании 8 лет назад
Есть задание из 2 вопросов:
1)Известно, что при использовании команды CMP получились флаги SF=0, OF=1, CF=1. Если операнды – числа со знаком, то можем ли мы точно сказать, что один из них меньше другого и который именно?
2)Известно, что при использовании команды CMP получились флаги SF=1, OF=1, CF=0. Если операнды – числа со знаком, то можем ли мы точно сказать, что один из них меньше другого и который именно?

Перечитала кучу инфыв про перенос и переполнение, но не могу подобрать ни 1 примера чисел, которые бы помогли ответить на эти вопросы.
Хотя предполагаю, что в 1 случае точно сказать нельзя, а во 2 получатель больше источника.
Но возможно кто-то подскажет примеры чисел для команды cmp,чтобы устанавливались флаги именно так, как описано в задании
Голосование за лучший ответ
Daniel Bovet Мыслитель (5189) 8 лет назад
искать нужно полную документацию по intel assembler, например. вот кусок древней:

CMP сравнивает указанное значение с аккумклятором и возвращает результат путем установки CF и ZF. Значения не изменяются.
ZF показывает равенство значений. Если CF не установлен, значит аккумулятор больше, чем указанное значение и наоборот. Кроме того, значение CF инвертируется, когда значения имеют разные знаки или одно из значений "complemented", лень искать перевод.
Чебуратор Мыслитель (8449) 8 лет назад
cmp это вычитание то есть sub, с тем отличием, что не воздействует на операнд приемник. CF и OF противоречат друг другу, в том смысле, что OF это переполнение для знаковых, а CF для беззнаковых чисел. Оба примера не имеют смысла, поскольку есть противоречия во флагах. В первом случае CF и OF могут быть равны, но и SF так же будет установлен, так как переполнение будет происходить в положительных числах, во втором случае все наоборот SF обязан быть ноль, поскольку после вычитания получается неотрицательное число, то есть переполнение происходит в отрицательных числах.
East RX Просветленный (24495) 8 лет назад
Для чисел со знаком флаги после выполнения "cmp x, y" интерпретируются так:

если SF != OF, то x < y;
если ZF = 1, то x = y;
если ZF = 0 и SF = OF, то x > y.
Nastya NasNasЗнаток (334) 8 лет назад
А откуда информация? И можно какой-то пример?
East RX Просветленный (24495) Информация из официальной документации от Intel (https://software.intel.com/en-us/articles/intel-sdm).
Похожие вопросы