Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Мнемоника команд обработки строк




Обозначение Выполняемая функция
MOVSB/MOVSW Пересылка строк
LODSB/LODSW Загрузка из строки
STOSB/STOSW Запись в строку
CMPSB/CMPSW Сравнение строк
SCASB/SCASW Сканирование строки
REP/REPE/REPZ/REPNE/REPNZ Префиксы повторения
CLD Сброс флага направления
STD Установка флага направления

Команды пересылки строк пересылают байт или слово из строки-источника в строку-приемник и имеют следующий формат в мнемонике ассемблера:

MOVSB,

MOVSW.

Вне зависимости от применяемой команды, строка-приемник располагается в дополнительном сегменте данных и адресуется косвенным образом через регистр DI (ES: DI), а строка-источник располагается в сегменте данных и адресуется через регистр SI (DS: SI).

Команда MOVSB пересылает один байт из строки-источника в строку-приемник и изменяет содержимое регистров SI и DI на единицу.

Команда MOVSW пересылает слово из строки-источника в строку-приемник и изменяет содержимое регистров SI и DI на два.

При выполнении команды пересылки строк содержимое индексных регистров может как увеличиваться, так и уменьшаться. На это влияет состояние флага направления (DF). Если DF = 0, то содержимое индексных регистров увеличивается на 1 или на 2, в зависимости от пересылаемых данных. Если DF = 1, то содержимое индексных регистров уменьшается.

Команды пересылки строк имеют следующий формат машинного кода.

1010010 w

Если поле w равно 0, то пересылаются байты (команда MOVSB). Если поле w равно 1, то пересылаются слова (команда MOVSW).

Примеры использования команд пересылки строк:

LES DI,[D4] ; загрузить ES: DI адресом строки-приемника
LDS SI,[D8] ; загрузить DS:SI адресом строки-источника
CLD ; сбросить флаг направления ; (увеличение индексных регистров)
MOVSB ; переслать байт из строки-источника в строку-приемник; (при этом инкрементируются SI и DI)
MOWSW ; переслать слово из строки-источника в приемник; (при этом содержимое SI и DI увеличится на 2)

Команды загрузки из строки пересылают байт или слово из строки-источника в аккумулятор и имеют следующий формат в мнемонике ассемблера:

LODSB

LODSW

Как и в командах пересылки строк, строка-источник располагается в сегменте данных и адресуется через регистр SI (DS: SI).

Команда LODSB пересылает один байт из строки-источника в регистр AL и инкрементирует SI, если флаг направления сброшен, или декрементирует SI, если флаг направления установлен.

Команда LODSW пересылает слово из строки-источника в регистр AX и увеличивает содержимое регистра SI на два, если DF = 0, или уменьшает содержимое SI на два, если DF = 1.

Команды загрузки аккумулятора из строки имеют следующий формат машинного кода.

1010011 w

Если поле w = 0, то загружается байт (команда LODSB). Если поле w = 1, то загружается слово (команда LODSW).

Примеры использования команд загрузки из строки:

LDS SI,[0BD8] ; загрузить DS: SI адресом строки-источника
CLD ; сбросить флаг направления ; (увеличение индексных регистров)
LODSB ; переслать байт из строки-источника в AL ; (при этом инкрементируются SI)
LODSW ; переслать слово из строки-источника в AX ; (при этом содержимое SI увеличится на 2)

Команды записи в строку пересылают байт или слово из аккумулятора в строку-приемник и имеют следующий формат в мнемонике ассемблера:

STOSB

STOSW

Как и в командах пересылки строк, строка-приемник располагается в дополнительном сегменте данных и адресуется через регистр DI (ES: DI).

Команда STOSB пересылает один байт из AL в строку-приемник и инкрементирует DI, если флаг направления сброшен, или декрементирует DI, если флаг направления установлен.

Команда STOSW пересылает слово из AX в строку-приемник и увеличивает содержимое регистра DI на два, если DF = 0, или уменьшает содержимое DI на два, если DF = 1.

Команды записи содержимого аккумулятора в строку имеют следующий формат машинного кода.

1010101 w

Если поле w = 0, то записывается байт (команда STOSB). Если поле w = 1, то записывается слово (команда STOSW).


Примеры использования команд записи в строку:

LES DI,[0BD8] ; загрузить ES: DI адресом строки-приемника
CLD ; сбросить флаг направления ; (увеличение индексных регистров)
STOSB ; переслать байт из AL в строку-приемник ; (при этом инкрементируются DI)
STOSW ; переслать слово из AX в строку-приемник ; (при этом содержимое DI увеличится на 2)

Команды сравнения строк сравнивают байты или слова из строки-источника и строки-приемника и имеют следующий формат в мнемонике ассемблера:

CMPSB

CMPSW

Вне зависимости от применяемой команды, строка-приемник располагается в сегменте данных и адресуется через регистр SI (DS: SI), а строка-источник располагается в дополнительном сегменте данных и адресуется косвенным образом через регистр DI (ES: DI).

Команда CMPSB осуществляет сравнение байт из строки-приемника и строки-источника (вычитает байт строки источника из байта строки приемника, результат ни куда не помещает, но изменяет флаги AF, CF, PF, SF и ZF) и инкрементирует индексные регистры, если DF = 0, или декрементирует индексные регистры, если DF = 1.

Команда CMPSW сравнивает слова из строки-источника и строки-приемника (аналогично команде CMPSB) и увеличивает содержимое индексных регистров на два, если DF = 0, или уменьшает содержимое индексных регистров на два, если DF = 1.

Команды сравнения строк имеют следующий формат машинного кода.

1010011 w

Если поле w = 0, то сравниваются байты (команда CMPSB). Если поле w = 1, то сравниваются слова (команда CMPSW).

Примеры использования команд сравнения строк:

LES DI,[0BD4] ; загрузить ES: DI адресом ; строки-источника
LDS SI,[0BD8] ; загрузить DS: SI адресом ; строки-приемника
CLD ; сбросить флаг направления ; (увеличение индексных регистров)
CMPSB ; сравнить байты из строки-источника ; и строки-приемника ; (при этом инкрементируются SI и DI)
CMPSW ; сравнить слова из строки-источника ; и строки-приемника (при этом ; содержимое SI и DI увеличится на 2)

Команды сканирования строки сравнивают байт или слово из аккумулятора с байтом или словом из строки-приемника и имеют следующий формат в мнемонике ассемблера:

SCASB

SCASW

Как и в командах пересылки строк, строка-приемник располагается в дополнительном сегменте данных и адресуется через регистр DI (ES: DI).

Команда SCASB сравнивает содержимое AL с байтом из строки-приемника (аналогично команде CMPSB) и инкрементирует DI, если флаг направления сброшен, или декрементирует DI, если флаг направления установлен.

Команда SCASW сравнивает содержимое AX со словом из строки-приемника и увеличивает содержимое регистра DI на два, если DF = 0, или уменьшает содержимое DI на два, если DF = 1.

Команды сканирования строки имеют следующий формат машинного кода.

1010111 w

Если поле w = 0, то сравниваются байты (команда SCASB). Если поле w = 1, то сравниваются слова (команда SCASW).

Примеры использования команд сканирования строки:

LES DI,[0BD8] ; загрузить ES: DI адресом строки-приемника
CLD ; сбросить флаг направления ; (увеличение индексных регистров)
SCASB ; сравнить байты из AL и строки-приемника ; (при этом инкрементируются DI)
SCASW ; сравнить слова из AX и строки-приемника ; (при этом содержимое DI увеличится на 2)

Префиксы повторения используются для повторного выполнения следующей за префиксом команды обработки строк и имеют следующие мнемонические обозначения на языке ассемблера:

REP

REPE

REPZ

REPNE

REPNZ

Количество повторений задается предварительно в регистре CX. При каждом повторении команды работы со строками, снабженной одним из этих префиксов, происходит декрементирование регистра CX. Повторение прекращается в зависимости от условия, определяемого смыслом префикса. Условия прекращения повторений приведены в табл. 8.2.

Таблица 8.2

Префиксы повторения

Префикс Условие прекращения повторений
REP CX = 0
REPE/REPZ CX = 0 или ZF = 0
REPNE/REPNZ CX = 0 или ZF = 1

Префиксы повторения имеют следующий формат машинного кода.

1111001 z

Префиксы REP, REPE и REPZ транслируются в машинный формат с z = 1, а префиксы REPNE и REPNZ – в машинный формат с z = 0.

Примеры применения префиксов:

MOV CX,10  
REP MOVSB ; переслать 10 байт из строки-источника ; в строку-приемник
REPE CMPSB ; найти первое несовпадение байт строки-источника ; и строки-приемника
REPNE SCASB ; найти первое вхождение содержимого AL в строку

Команда CLD сбрасывает, а команда STD устанавливает флаг направления флаг направления. У этих команд нет операндов и они имеет следующие форматы машинного кода.

CLD:   STD:  

СОДЕРЖАНИЕ РАБОТЫ

1. Ознакомиться с теоретическим материалом.

2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов.

3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...