Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Команда CMP
Лучшие книги по Ассемблеру
Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее... |
Команда CMP процессоров семейства i80x86 используется для сравнения двух операндов. Говоря проще, эта команда сравнивает два числа, то есть проверяет, равны эти два числа или НЕ равны.
Синтаксис команды CMP:
CMP ЧИСЛО1, ЧИСЛО2
ЧИСЛО1 может быть одним из следующих:
- Область памяти (MEM)
- Регистр общего назначения (REG)
ЧИСЛО2 может быть одним из следующих:
- Область памяти (MEM)
- Регистр общего назначения (REG)
- Непосредственное значение (например, число) (IMM)
Таким образом, комбинации ЧИСЛО1-ЧИСЛО2 могут быть следующими:
REG, MEM MEM, REG REG, REG MEM, IMM REG, IMM
Сравнение чисел в Ассемблере
Сравнение чисел в Ассемблере с помощью инструкции CMP выполняется по следующему алгоритму:
- Из ЧИСЛА1 вычитается ЧИСЛО2 (ЧИСЛО1 - ЧИСЛО2)
- Если результат равен нулю, то ЧИСЛО1 = ЧИСЛО2
- Если числа равны, то есть результат равен 0, то устанавливается флаг ZF
Остальные флаги также устанавливаются или сбрасываются в зависимости от результата.
Но нас больше всего интересует флаг ZF.
Итак, чтобы сравнить два числа в Ассемблере нам надо выполнить следующие действия:
- Выполнить команду CPM
- Прочитать флаг ZF
- Если ZF = 1, то числа равны
- Если ZF = 0, то числа НЕ равны
Ну а дальше, в зависимости от результата, мы можем выполнить переход на какую-то метку в программе. В статье об использовании инструкции JMP я рассказывал о метках и о безусловном переходе.
Для того, чтобы выполнить переход после сравнения чисел, требуется использовать одну из команд условного перехода. Но об этих команда будет рассказано в соответствующих статьях.
Пример участка программы сравнения чисел на Ассемблере приведён ниже:
MOV AL, 5 ; AL = 5 MOV AH, 5 ; AH = 5 CMP AL, AH ; AL = AH, ZF = 1 CMP AL, 6 ; AL <> 6, ZF = 0
Здесь мы сначала помещаем в регистры AL и AH два одинаковых числа (5), а затем выполняем команду CMP - сравниваем значения в регистрах AL и AH.
Так как эти значения равны, то после выполнения команды CMP флаг ZF будет установлен, то есть равен 1.
Затем мы сравниваем содержимое регистра AL с число 6. Так как в регистре AL у нас осталось число 5, то после выполнения команды CMP флаг ZF будет сброшен (то есть равен 0), так как сравниваемые значения НЕ равны.
В конце как обычно расскажу, почему эта команда ассемблера называется CMP. Это сокращение от английского слова COMPARE, которое можно перевести как “сравнить”.
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
Первые шаги в программирование
Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее... |