Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
23
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

Цепочечные команды или команды обработки строк символов

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

    1. 8 бит, то есть байт;

    2. 16 бит, то есть слово;

    3. 32 бита, то есть двойное слово.

Особенность всех цепочечных команд в том, что они, кроме обработки текущего элемента цепочки, осуществляют ещё и автоматическое продвижение к следующему элементу данной цепочки.

В системе команд микропроцессора имеются семь операций примитивов обработки цепочек:

1) пересылка цепочки:

movs адрес приёмника, адрес_источника

  • movsb

  • movsw

  • movsd

2) сравнение цепочек:

cmps адрес_приёмника, адрес_источника

– cmpsb

  • cmpsw

  • cmpsd

3) сканирование цепочки:

scas адрес_приёмника

– scasb

  • scasw

  • scasd

4) загрузка элемента из цепочки:

lods адрес_источника

– lodsb

  • lodsw

  • lodsd

5) сохранение элемента в цепочке:

stos адрес_приёмника

  • stosb

  • stows

  • stosd

6) получение єлементов цепочки из порта ввода-вывода:

ins адрес_приёмника, номер_порта

– insb

– insw

– insd

  1. вывод элементов цепочки в порт ввода-вывода:

outs номер_порта, адрес_источника

– outsbs

– outws

– outds

Направление продвижения в цепочке определяется значением флага направления df в регистре eflags/flags.

если df=0, то значения индексных регистров esi/si и edi/di будут автоматически увеличиваться (операция инкремента) цепочечными командами, то есть обработка будет осуществляться в направлении возрастания адресов;

если df=1, то значения индексных регистров esi/si и edi/di будут автоматически уменьшаться (операция декремента) цепочечными командами, то есть обработка будет идти в направлении убывания адресов.

Состоянием флага df можно управлять с помощью двух команд, не имеющих операндов:

cld – очистить флаг направления. Команда сбрасывает флаг направления df в 0.

std – установить флаг направления. Команда устанавливает флаг направления df в 1.

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

rep;

  • repe или repz;

  • repne или repnz.

Данные префиксы могут анализировать состояние регистра ecx/cx или флаг нуля zf.

1) Префикс rep заставляет цепочечные команды выполняться, пока содержимое в есх/сх не станет равным 0. При этом цепочечная команда, перед которой стоит префикс, автоматически уменьшает содержимое есх/сх на единицу.

2) Префиксы repe или repz заставляют цепочечную команду выполняться до тех пор, пока содержимое есх/сх равно 0 или флаг zf равен 1. Как только одно из этих условий нарушается, управление передаётся следующей команде программы.

3) Префиксы repne или repnz заставляют цепочечную команду циклически выполняться пока содержимое есх/сх не равно 0 или флаг zf равен 0. При невыполнении одного из этих условий работа команды прекращается.

______________________________________________________

Самостоятельно на практике:

Создать массив структур mas_sotr2 worker 7 dup (<>). Инициализировать массив структур в программе. На экран выдать сообщение в окне MessageBoxA. Сообщение должно содержать все данные структуры для самого старшего сотрудника.

Записи

Запись — структурный тип данных, состоящий из фиксированного числа элементов длиной от одного до нескольких бит.

Суммарный размер записи определяется суммой размеров ее полей и не может быть более 8, 16 или 32 бит. Если суммарный размер записи меньше указанных значений, то все поля записи «прижимаются» к младшим разрядам.

Использование записей в программе организуется в три этапа: