Лабораторная работа №1

Операции со строками

Цель работы Целью работы является освоение команд обработки строк на языке ассемблера.

Общие теоретические сведения

В ассемблере существует пять базовых строковых операций, называемых примитивами, который позволяют оперировать со строками байтов или слов по одному элементу (байту или слову) за раз. Эти операции могут обрабатывать строки длиной до 64К.

Операции со строками обеспечивают пересылку, сравнение, сканирование строк по значению, а также пересылку элементов строки в аккумулятор или из него.

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

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

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

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

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

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

Пример: команда Сравнение строк байтов/слов/двойных слов

Схема команды: 

cmps приемник, источник 
cmpsb  cmpsw  cmpsd

Алгоритм работы:

    выполнить вычитание элементов (источник - приемник), адреса элементов предварительно должны быть загружены:
      адрес источника — в пару регистров ds:esi/si; адрес назначения — в пару регистров es:edi/di;
    в зависимости от состояния флага df изменить значение регистров esi/si и edi/di:
      если df=0, то увеличить содержимое этих регистров на длину элемента последовательности; если df=1, то уменьшить содержимое этих регистров на длину элемента последовательности;
    в зависимости от результата вычитания установить флаги:
      если очередные элементы цепочек не равны, то cf=1, zf=0; если очередные элементы цепочек или цепочки в целом равны, то cf=0, zf=1;
    при наличии префикса repe/repne выполнить определяемые им действия.

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

НЕ нашли? Не то? Что вы ищете?

masm ;режим работы TASM: ideal или masm

model small ;модель памяти

.data ;сегмент данных

mes db 'compare string