Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
64
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать

Xor ax, ax ; очистка регистра ax

mov ah, 1h

Int 21h ;ожидание вода с клавиатуры

xlatb

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

    1. Команды пересылки строк

movs <адрес приемника>, <адрес источника>

movsb – пересылка байт

movsw – пересылка слов

movsd – пересылка двойных слов

Первая команда осуществляет копирование байт, слов, двойных слов в зависимости от атрибутов идентификаторов.

Число пересылаемых элементов должно быть загружено в регистр cx или ecx. Адрес источника должен быть загружен в пару DS:SI , а приемника – в регистры ES:DI.

Пример:

.data

source db “строка”

dest db 6 dup (“ “)

.code

assume ds:@data, es :@data

main:

mov ax, @data

mov ds, ax

mov es, ax

cld ; индексация адресов в сторону увеличения

lea si, source ; в si – адрес источника информации

lea di, dest ; в di – адрес приемника

mov cx, 6 ; переслать из источника в приемник 6 байт

rep movs dest, source

lea dx, dest

mov ah, 09h ;вывод на экран

int 21h

mov ax, 4с00h ; возврат в среду DOS

int 21h

end main

    1. Команды сравнения строк

cmps <адрес приемника>, <адрес источника>

cmpsb

cmpsw

cmpsd

Алгоритм работы команды заключается в последовательном выполнении команды вычитания (элемент источника – элемент приемника) элементов цепочек. По результатам вычитания устанавливаются флаги zf. Адрес источника записывается в ds:si, адрес приемника в es:di. В cx указывается количество сравниваемых элементов.

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

REP MOVS – пересылка происходит до тех пор, пока cx<>0

REPE MOVS – пересылка происходит при условии: cx<>0 и zf =1.

Применяется для поиска несовпадающих элементов.

REPNE MOVS – пересылка продолжается пока выполняется условие: cx<>0 и zf=0. Применяется для поиска совпадающих элементов в строках.

Пример.

Сравнить две строки и определить их совпадение

.data

string1 db “1 2 3 4 5 6 7 8 9”

string2 db “1 2 3 4 5 6 7 8 9”

.code

assume ds:data, es:data

main:

mov ax, @data

mov ds, ax

mov es, ax

cld

lea si, string1

lea di, string2

mov cx, 9

repe cmps string1, string2 ;сравнение пока CX<>0 и ZF=1

jcxz m1 ; вывести сообщение о совпадении если CX=0

jne m2 ; вывести сообщение о несовпадении если ZF=0

:

.

m1:

;вывод сообщения о совпадении строк

.

m2:

;вывод сообщения о несовпадении строк

    1. Сканирование строки

Команда производит поиск некоторого значения в области памяти. Искомое значение предварительно должно быть загружено в регистр AL, AX либо в EAX. Выбор регистра должен быть согласован с размером элемента строки, в которой осуществляется поиск.

scas <адрес>

scasb

scasw

scasd

Строка должна располагаться в дополнительном сегменте по адресу ES:DI. В процессе поиска выполняется вычитание из аккумулятора очередного элемента строки и устанавливаются флаги (по результату вычитания). Можно использовать префиксы REPE и REPNE.

Пример:

.data

string db “строка

.code

……….

……..

cld

lea di, string

mov ax, @data

mov es, ax

mov al, ‘a’

mov cx, 6

repne scas string

je mes ; zf=1 вывести сообщение о том, что символ найден

mes:

; вывод на экран сообщения

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]