Найти в Дзене
Разумный мир

Микроконтроллеры для начинающих. Часть 23. Команды проверки и сравнения

Продолжаем наше краткое знакомство с системами команд микроконтроллеров. Сегодняшняя статья будет короткой, поскольку команды проверки и сравнения, по своей сути, можно считать "излишними и необязательными". По этой причине они есть далеко не у всех микроконтроллеров. Звучит странно? Давайте попробуем разобраться. Сразу хочу уточнить, что разговор о комбинированных командах выполняющих сразу два действия, сравнения/проверки и условного перехода, будет в отдельной статье. По той простой причине, что для их понимания потребуется знание того самого условного перехода о котором я еще не рассказывал. Сравнение Необходимость сравнения двух чисел возникает часто. Проще всего узнать, какое из чисел больше можно с помощью вычитания. Если результат равен нулю, то и числа равны. Если результат отрицательный, то первое число меньше второго. А если положительный, то больше. То есть, сравнение фактически сводится в простому вычитанию. С той лишь разницей, что нам будет не нужной разность, как резуль
Оглавление

Продолжаем наше краткое знакомство с системами команд микроконтроллеров. Сегодняшняя статья будет короткой, поскольку команды проверки и сравнения, по своей сути, можно считать "излишними и необязательными". По этой причине они есть далеко не у всех микроконтроллеров. Звучит странно? Давайте попробуем разобраться.

Сразу хочу уточнить, что разговор о комбинированных командах выполняющих сразу два действия, сравнения/проверки и условного перехода, будет в отдельной статье. По той простой причине, что для их понимания потребуется знание того самого условного перехода о котором я еще не рассказывал.

Сравнение

Необходимость сравнения двух чисел возникает часто. Проще всего узнать, какое из чисел больше можно с помощью вычитания. Если результат равен нулю, то и числа равны. Если результат отрицательный, то первое число меньше второго. А если положительный, то больше.

То есть, сравнение фактически сводится в простому вычитанию. С той лишь разницей, что нам будет не нужной разность, как результат операции, будет нужной только установка флагов состояния. По этой причине и команда сравнения может считаться излишней для RISC архитектур.

И команды сравнения действительно нет в PIC, за исключением PIC18. Вместо нее предлагается использовать команды вычитания, которые мы уже рассматривали. В PIC18 тоже нет команды сравнения, но есть команды сравнения совмещенные с условным переходом (CPFSEQ, CPFSGT, CPFSLT). Эти команды, как я уже говорил, будут рассмотрены в отдельной статье.

В AVR тоже есть комбинированная команда сравнения и перехода (CPSE), но есть и команды просто сравнения:

CP - сравнение. как вы уже догадались, она просто устанавливает флаги состояния.

CPC - сравнение с учетом переноса. Аналогична команде CP, но учитывает состояние флага С до операции. Другими словами, она предназначена для сравнения многобайтовых чисел.

CPI - сравнение с константой (непосредственным операндом). Эта команда работает только с регистрами r16-r31.

В STM8 существует одна универсальная команда сравнения, но в двух вариантах:

CP - сравнение 8-битных чисел

CPW - сравнение 16-битных чисел.

Проверка

Немного реже требуется определить, какое у нас число, положительное, отрицательное, или просто ноль. Это выполняет команда проверки, или тестирования. Команда проверки просто устанавливает флаги состояния.

Но давайте подумаем. Мы же можем просто выполнить сравнение с нулем и получим тот же самый результат. А значит, отдельную команду проверки можно заменить командой сравнения. Получается, что без команды проверки вполне можно обойтись и она не является обязательной. А если нет и команды сравнения? Тогда можно воспользоваться командой вычитания и вычесть наше число из нуля. Или даже просто сменить знак числа (дополнение до двух, мы это уже рассматривали), что точно так же повлияет на флаги состояния. А можно использовать и команду сложения с нулем. Результат будет тем же.

По этой причине команда проверки есть не во всех микроконтроллерах. Так в PIC (включая PIC18) этой команды нет. Для проверки на ноль здесь предлагается использовать команду пересылки MOVF. В PIC18 эта команда может использоваться и для проверки знака числа, так как влияет и на флаг N.

В AVR есть команда

TST - проверка. Однако стоить учитывать, что эта команда сбрасывает флаг переполнения.

В STM8 тоже есть команда проверки и, как и команда сравнения, тоже в двух вариантах.

TNZ - проверка 8-битного числа

TNZW - проверка 16-битного числа.

Заключение

Вот такая короткая статья и такой простой материал. В следующий раз мы начнем знакомится с командами перехода. Это будет сложнее, но и интереснее.

До новых встреч!