Команда сравнения
Таблица 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). Но для анализа регистра СХ в системе команд процессора есть спе- циальная команда, которую мы сейчас и рассмотрим.
Еще по теме Команда сравнения:
- Определение команды.
- § 4.5. Деятельность команд в организации
- СРАВНЕНИЕ
- МЕТОД СРАВНЕНИЯ.
- Признаки команды.
- Пример настройки и реабилитации в футбольной команде
- Диахронное и синхронное сравнение
- Внутреннее и внешнее сравнение
- Нормативное сравнение
- 1. Понятие и значение сравнения
- Функциональное сравнение
- Работа с другими командами
- Четыре шага по созданию эффективной команды
- Сравнение