Ассемблер и программирование для IBM PC


          

Команды обработки строк


------------------------------------------------------------

Команды обработки строк

Цель: Ообъяснить назначение специальных цепочечных команд, используемых для обработки символьных данных.

ВВЕДЕНИЕ ------------------------------------------------------------

Команды, показанные в предыдущих главах, оперировали одним байтом, или одним словом за одно выполнение. Часто, однако, бывает необходимо переслать или сравнить поля данных, которые превышают по длине одно слово. Например, необходимо сравнить описания или имена для того, чтобы отсортировать их в восходящей последовательности. Элементы такого формата известны как строковые данные и могут являтся как символьными, так и числовыми. Для обработки строковых данных ассемблер имеет пять команд обработки строк:

MOVS переслать один байт или одно слово из одной области памяти в другую;

LODS загрузить из памяти один байт в регистр AL или одно слово в регистр AX;

STOS записать содержимое регистра AL или AX в память;

CMPS сравнить содержимое двух областей памяти, размером в один байт или в одно слово;

SCAS сравнить содержимое регистра AL или AX с содержимым памяти.

Префикс REP позволяет этим командам обрабатывать строки любой длины.

СВОЙСТВА ОПЕРАЦИЙ НАД СТРОКАМИ ------------------------------------------------------------

Цепочечная команда может быть закодирована для повторяю щейся обpаботки одного байта или одного слова за одно выполнение. Например, можно выбрать "байтовую" команду для обработки строки с нечетным числом байт или "двухбайтовую" команду для обработки четного числа байт. Ниже перечислены регистры, участвующие в цепочечных командах (для однобайтовых и двухбайтовых вариантов). Предположим, что регистры DI и SI содержат необходимые адреса:

Команда Операнды Байт Слово MOVS DI,SI MOVSB MOVSW LODS AL,SI или AX,SI LODSB LODSW

Ассемблер для IBM PC. Глава 11 242

STOS DI,AL или DI,AX STOSB STOSW CMPS SI,DI CMPSB CMPSW SCAS DI,AL или DI,AX SCASB SCASW

Например, можно кодировать операнды для команды MOVS, но опустить их для MOVSB и MOVSW. Эти команды предполагают, что pегистры DI и SI содержат относительные адреса, указывающие на необходимые области памяти (для загрузки можно использо вать команду LEA). Регистр SI обычно связан с регистром сегмента данных - DS:SI. Регистр DI всегда связан с регистром дополнительного сегмента - ES:DI. Следовательно, команды MOVS, STOS, CMPS и SCAS требуют инициализации регистра ES (обычно адресом в регистре DS).



Содержание  Назад  Вперед