Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

2.2.4. Команды битовых и байтовых операций

Команды данной группы приведены в табл. 2.19.

Команды битовых операций ВТ, BTS, BTR, ВТС выбирают из регистра или ячейки памя­ти значение определенного бита и копируют его в признак CF. Номер бита п задается пя­тью или четырьмя младшими разрядами содержимого регистра г или непосредственного операнда \т8 (в зависимости от разрядности обрабатываемого слова r/m32 или г/т 16). При выполнении команды ВТ значение выбранного бита в исходном 16- или 32-разрядном слове остается неизменным; при выполнении BTS значение этого бита устанавливается в 1; при выполнении BTR - сбрасывается в нуль; при выполнении ВТС - инвертируется.

Команды условной установки байтов SETcc производят установку содержимого байта в регистре или ячейке памяти r/m8, указанных в команде.

Таблица 2.19

Команды сканирования битов BSF, BSR производят анализ битов операнда г/т, содержащегося в адресуемом регистре или ячейке памяти, и заносят значение п1 - номер первого встреченного бита, имеющего значение единица, в регистр-приемник г, заданный в команде. При выполнении команды BSF сканирование начинается с младшего разряда операнда, при выполнении BSR-co старшего разряда. Если операнд равен нулю (единич­ные биты отсутствуют), то устанавливается признак ZF = 1. При этом содержимое регистра-приемника будет неопределенным. Если единичный бит найден, то устанавливается ZF = 0.

Команды условной установки байта SETcc устанавливают определенное значение бай­та, который содержится в регистре или ячейке памяти г/т, указанных в команде. Условие установки байта определяется суффиксом ее, который добавляется к мнемокоду коман­ды. В соответствии с этим суффиксом команда проверяет выполнение определенного условия (ее), которое задается различными значениями признаков, установленных в ре­гистре EFLAGS. Виды проверяемых условий и соответствующие суффиксы ее указаны в табл. 2.22. Они аналогичны условиям, используемым в командах условных пересылок CMOVcc и условных переходов Jcc. Если условие выполняется (ее = 1), то все разряды адресованного байта устанавливаются в единицу (записывается OFFh), если не выпол­няется — все разряды байта сбрасываются в нуль (запись OOh).

2.2.5. Команды операций со строками символов

Команды данной группы приведены в табл. 2.20. При выполнении этих команд симво­лом является 8-, 16- или 32-разрядный операнд, являющийся элементом строки, которая представляет последовательность символов, расположенных в смежных ячейках памяти. При программировании на языке Ассемблера мнемокоды команд дополняются суффиксом В (байт), W (слово) или D (двойное слово), указывающим разрядность обрабатываемых операндов (символов).

Различаются два типа строк символов. Строка-источник обычно (по умолчанию) располагается в сегменте DS. Размещение этой строки в других сегментах (см. табл. 2.8) обеспечивается путем введения соответствующего префикса SEG перед командой обра­ботки строк символов. Относительный адрес символа в строке задается содержимым регистра SI. Полный указатель адреса для символа строки-источника имеет вид DS:[SI], если не используется префикс замены сегмента SEG. Строка-приемник всегда размещается в сегменте ES (см. табл. 2.8). Относительный адрес символа в этой строке задается содержимым регистра DI, поэтому полный указатель адреса для символа строки-приемни­ка имеет вид ES:[SI]. После выполнения очередной команды со строкой содержимое SI и DI изменяется на +1 или - 1, +2 или - 2, +4 или - 4 в зависимости от разрядности символа (8, 16 или 32). Направление изменения адресов определяется значением признака DF в реги­стре EFLAGS. Если значение DF = 0, осуществляется увеличение адреса (автоинкремент) на 1,2 или 4; если DF = 1, осуществляется его уменьшение (автодекремент).

Если перед командами отсутствует префикс повторения, то соответствующие операции выполняются только для одного символа в строке, адресуемого содержимым регистров SI, DI. Префиксы повторения REP, REPE(REPZ) и RERNE(REPNZ) обеспечивают последова­тельное выполнение команд над символами строки. При этом количество повторений определяется содержимым регистра ЕСХ или выполнением определенного условия. Так как

регистр ЕСХ имеет 32 разряда, то максимальная длина обрабатываемых строк составляет 232 символа. Префикс REP используется для последовательного выполнения команд LODS, STOS, INS, OUTS, MOVS, префиксы REPE (синоним REPZ), REPNE (сино­ним REPNZ) используются с командами CMPS и SCAS.

Команда LODS осуществляет загрузку символа из строки-источника в аккумулятор (AL, АХ или ЕАХ). Команда STOS заносит содержимое аккумулятора в качестве символа в строку-приемник. Команда MOVS пересылает символ из строки-источника в строку-приемник. При наличии префикса REP эти команды повторяются п раз, где п = (ЕСХ). В результате после выполнения команды REP LODS в аккумулятор будет помещен n-й символ строки-источ­ника, а после REP STOS содержимое аккумулятора будет введено п раз в качестве п сим­волов строки-приемника. Команда REP MOVS осуществляет пересылку п символов из строки-источника в строку-приемник.

Команды ввода-вывода символов INS и OUTS выполняют ввод символа в строку-приемник или вывод символа из строки-источника. Номер адресуемого порта задается содержимым регистра DX. Команды с префиксом REP INS и REP OUTS осуществляют ввод последовательности из п символов в строку-приемник или их вывод из строки-источ­ника. Выполнение этих команд в защищенном режиме производится, как и команд IN, OUT, в зависимости от значения уровней привилегий CPL и IOPL.

При выполнении команды сравнения CMPS происходит вычитание символа строки-приемника из символа строки-источника с установкой соответствующих признаков. Коман­да сканирования SCAS производит аналогичное вычитание символа строки-приемника из содержимого аккумулятора. Установка признаков для команд CMPS, SCAS выполняется также, как для команды СМР (см. табл. 2.17). Результат вычитания в командах CMPS, SCAS не сохраняется, поэтому эти команды используются для сравнения значений симво­лов двух строк между собой или сравнения символа строки-приемника и эталонного симво­ла, размещенного в аккумуляторе.

Наличие префикса REPE(nnn REPNZ) останавливает повторение операций при обнаружении одинаковых символов в строках (команда CMPS) или в строке-источнике и аккумуляторе (команда SCAS). Если одинаковые символы отсутствуют, то выполнение коман­ды продолжается до конца строки. Префикс REPNE (или REPNZ) останавливает выполнение команд CMPS и SCAS при обнаружении неодинаковых символов. Если все символы одинако­вы, то команды выполняются п = (ЕСХ) раз. Команда CMPS используется для поиска одина­ковых (с префиксом REPE) или различных (префикс REPNE) символов в строках. Команда SCAS с префиксом REPE(REPNZ) или REPNE (REPNZ) служит для поиска в строке-источнике символа, совпадающего или не совпадающего с заданным в аккумуляторе эталоном.

Чтобы сократить время реакции на внешние прерывания, процессор при выполнении команд этой группы может принимать и обслуживать запросы прерывания INTR после обработки каждого символа строки.