Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Строковые операции




В ПК под строкой понимается последовательность соседних байтов или слов. В связи с этим все строковые команды имеют две разновидности ­для работы со строками из байтов (в мнемонику операций входит буква B) и для работы со строками из слов (в мнемонику входит - W).

Имеются следующие операции над строками:

- пересылка элементов строк (в память, из памяти, память-память);

- сравнение двух строк;

- просмотр строки с целью поиска элемента, равного заданному.

Каждая из этих операций выполняется только над одним элементом строки, однако одновременно происходит автоматическая настройка на следующий или предыдущий элемент строки. Имеются специальные команды повторения (REP и др.), которые заставляют следующую за ними строковую команду многократно повторяться (до 2^16 раз), в связи с чем такая па­ра команд позволяет обработать всю строку, причем намного быстрее, чем запрограммированный цикл.

Кроме того, строки можно просматривать вперед (от их начала к кон­цу) и назад. Направление просмотра зависит от флага направления DF, значение которого можно менять с помощью команд STD (DF:=1) и CLD (DF:=0). При DF=0 все последующие строковые команды программы просмат­ривают строки вперед, а при DF=1 - назад.

В строковых командах операнды явно не указываются, а подразумева­ются. Если команда работает с одной строкой, то адрес очередного, об­рабатываемого сейчас элемента строки задается парой регистров DS и SI или парой ES и DI, а если команда работает с двумя строками, то адрес элемента одной из них определяется парой DS:SI, а адрес элемента дру­гой - парой ES:DI. После выполнения операции значение регистра SI и/или DI увеличивается (при DF=0) или уменьшается (при DF=1) на 1 (для байтовых строк) или на 2 (для строк из слов).

Начальная установка всех этих регистров, а также флага DF должна быть выполнена до начала операции над строкой. Если сегментный регистр DS уже имеет нужное значение, тогда загрузить регистр SI можно с по­мощью команды

LEA SI,<начальный/конечный адрес строки>

Если же надо загрузить сразу оба регистра DS и SI, тогда можно вос­пользоваться командой

LDS SI,m32

которая в регистр SI заносит первое слово, а в регистр DS - второе слово из двойного слова, имеющего адреc m32 (таким образом, по адресу m32+2 должен храниться сегмент, а по адресу m32 - смещение начального или конечного элемента строки). Начальную загрузку регистров ES и DI обычно осуществляют одной командой

LES DI,m32

которая действует аналогично команде LDS.

Перечислим вкратце строковые команды ПК:

- LODSB или LODSW - команда загрузки элемента строки в аккумулятор пересылает в регистр AL или AX очередной элемент строки, на который указывает пара DS:SI, после чего увеличивает (при DF=0) или уменьшает (при DF=1) регистр SI на 1 или 2.

- STOSB или STOSW - команда записи аккумулятора в строку заносит со­держимое регистра AL или AX в тот элемент строки, на который указывает пара ES:DI, после чего изменяет регистр DI на 1 или 2.

- MOVSB или MOVSW - команда пересылки строк считывает элемент первой строки, определяемый парой DS:SI, в элемент второй строки, определяе­мый парой ES:DI, после чего одновременно меняет регистры SI и DI.

- CMPSB или CMPSW - команда сравнения строк сравнивает очередные элементы строк, указываемые парами DS:SI и ES:DI, и результат сравне­ния (равно, меньше и т.п.) фиксирует во флагах, после чего меняет реги­стры SI и DI.

- SCASB или SCASW - команда сканирования строки сравнивает элемент строки, адрес которого задается парой ES:DI, со значением регистра AL или AX и результат сравнения фиксирует в флагах, после чего меняет со­держимое регистра DI.

Перед любой строковой командой можно поставить одну из двух ко­манд, называемую "префиксом повторения", который заставит многократно повториться эту строковую команду. Число повторений (обычно это длина строки) должно быть указано в регистре CX. Префикс повторения REPZ (синонимы - REPE, REP) сначала заносит 1 во флаг нуля ZF, после чего, постоянно уменьшая CX на 1, заставляет повторяться следующую за ним строковую команду до тех пор, пока в CX не окажется 0 или пока флаг ZF не изменит свое значение на 0. Другой префикс повторения REPNZ (сино­ним - REPNE) действует аналогично, но только вначале устанавливает флаг ZF в 0, а при изменении его на 1 прекращает повторение стро­ковой команды.

Пример. Пусть надо переписать 10000 байтов, начиная с адреса A в другое место памяти, начиная с адреса B. Если оба этих имени относятся к сегменту данных, на начало которого указывает регистр DS, тогда эту пересылку можно сделать так:

CLD; DF:=0 (просмотр строки вперед)

MOV CX, 1000; CX - число повторений

MOV AX, DS

MOV ES, AX; ES:=DS

LEA SI, A; ES:SI - "откуда"

LEA DI, B; DS:DI - "куда"

REP MOVSB; пересылка CX байтов

Глава 7. Основные директивы ассемблера

 




Поделиться с друзьями:


Дата добавления: 2014-11-09; Просмотров: 490; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.