<<
>>

Команда сравнения

Команда сравнения СМР {СоМРаrе имеет интересный принцип работы. Он абсо- лютно такой же, как у команды вычитания SUB (см. главу 8). Команда СМР так же, как и команда SUB, выполняет вычитание операндов и по результатам сравнения устанавливает флаги.
Единственное, чего она не делает, — не записывает резуль- тат вычитания на место первого операнда. Синтаксис команды СМР: сmр операнд_l,операнд_2 Флаги, устанавливаемые командой СМР, можно анализировать специальными командами условного перехода. Прежде чем мы их рассмотрим, уделим немного внимания мнемонике этих команд (табл. 10.1). Понимание обозначений (элемен- тов в названии команды JСС, обозначенных нами символами «сс») при формирова- нии названия команд условного перехода облегчит их запоминание и дальнейшее практическое использование.
Таблица 10.1. Значение аббревиатур в названии команды jcc

В табл.

10.2 представлен перечень команд условного перехода для команды СМР. Не удивляйтесь тому обстоятельству, что одинаковым значениям флагов соответ- ствуют несколько разных мнемокодов команд условного перехода (они отделены друг от друга косой чертой). Разница в названии обусловлена желанием разработ-

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

Именно поэтому они сгруппированы не по названиям, а по значениям флагов (условиям), на которые они реагируют. В качестве примера применения команды CMP рассмотрим фрагмент програм- мы, который обнуляет поле pole_m длиной п байт: . data n equ 50 pole_m db n dup (?) . code ^ xor bх,bх ;bх=О ml: mov mеm[bх] ,0 inc bx сmр bx,n jne ml exit:

Так как команды условного перехода не изменяют флагов, то после одной ко- манды СMР вполне могут следовать несколько команд условного перехода. Это может быть сделано для того, например, чтобы исследовать каждую из альтерна- тивных ветвей: больше, меньше или равно: low: grt: Команды условного перехода и флаги Мнемоническое обозначение некоторых команд условного перехода отражает на- звание флага, с которым они работают, и имеет следующую структуру: первым идет символ «j» (jump — переход), вторым — либо обозначение флага, либо символ от- рицания «п», после которого стоит название флага. Такая структура команды от- ражает ее назначение. Если символа «п» нет, то проверяется состояние флага и, если он равен 1, производится переход на метку перехода. Если символ «п» при- сутствует, то проверяется состояние флага на равенство 0 и в случае успеха произ- водится переход на метку перехода. Мнемокоды команд, названия флагов и усло- вия переходов приведены в табл. 10.3. Эти команды можно использовать после любых команд, изменяющих указанные флаги.

Таблица 10.3. Команды условного перехода и флаги

Если внимательно посмотреть на табл. 10.2 и 10.3, видно, что многие команды условного перехода в них эквивалентны, так как в них анализируются одинаковые флаги. В листинге i0.1 приведен пример программы, производящей в строке симво- лов длиной п байт замену строчных букв английского алфавита прописными.

Для осмысленного рассмотрения этого примера вспомним ASCII-коды, соответствую- щие этим буквам (см. главу 6). Строчные и прописные буквы в таблице ASCII упо- рядочены по алфавиту. Строчным буквам соответствует диапазон кодов 61h-7ah, прописным — 41h-5аh. Для того чтобы понять идею, лежащую в основе алгоритма преобразования, достаточно сравнить представления соответствующих прописных и строчных букв в двоичном виде: a-0110 0001.,.z-0111 1010 А - 0100 0001...Z - 0101 1010 Как видно из приведенного двоичного представления, для выполнения преоб- разования между строчными и прописными буквами достаточно всего лишь ин- вертировать 5-й бит.
Листинг 10.1. Смена регистра символов

Обратите внимание на строку 25 листинга. Команда DEC уменьшает значение регистра СХ на 1. Когда это значение станет равным 0, процессор по результату операции декремента установит флаг ZF. Команда в строке 26 анализирует состоя- ние этого флага и, пока он не равен 1 (см. табл. 10.3), передает управление на мет- ку ml. Заметьте, что на место этой команды можно было бы поставить команду JNЕ (см. табл. 10.2). Но для анализа регистра СХ в системе команд процессора есть спе- циальная команда, которую мы сейчас и рассмотрим.

<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Команда сравнения:

  1. Определение команды.
  2. § 4.5. Деятельность команд в организации
  3. СРАВНЕНИЕ
  4. МЕТОД СРАВНЕНИЯ.
  5. Признаки команды.
  6. Пример настройки и реабилитации в футбольной команде
  7. Диахронное и синхронное сравнение
  8. Внутреннее и внешнее сравнение
  9. Нормативное сравнение
  10. 1. Понятие и значение сравнения
  11. Функциональное сравнение
  12. Работа с другими командами
  13. Четыре шага по созданию эффективной команды
  14. Сравнение