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

Цепочечные команды

Кроме привычного всем понятия массивов в ассемблере существует структура называемая цепочкой. Цепочка - непрерывная последовательность байт, слов или двойных слов, обрабатываемая как единое целое. Основное отличие цепочек от массивов состоит в способе доступа к элементам: для массивов - произвольный доступ, для цепочек - только последовательный (от начала цепочки к концу или от конца к началу). Цепочечные команды - команды для обработки цепочек. Особенностью всех цепочечных команд (кроме обработки очередного элемента цепочки) является автоматическое продвижение к следующему элементу цепочки.

Цепочечные команды:

Название Команды Действие
пересылка цепочки movs <адр. приемника>, <адр. источника> movsb, movsw, mowsd копирует один элемент цепочки из операнда источника в операнд приемник
сравнение цепочек cmps <адр. приемника>, <адр. источника> cmpsb, cmpsw, cmpsd сравнивает элементы цепочек из операнда источника и операнда приемника
сканирование цепочки scas <адр. приемника> scasb, scasw, scasd сканирует цепочку приёмник на присутствие некоторого элемента (задаётся в регистре аккумуляторе)
загрузка элемента из цепочки lods <адр. источника> lodsb, lodsw, lodsd загрузить элемент из цепочки источника в регистр аккумулятор
сохранение элемента в цепочке stos <адр. приемника> stosb, stosw, stosd восстановить элемент из регистра аккумулятора в цепочку
получение элемента цепочки из порта ввода/вывода ins <адр. приемника>, <номер порта> insb, insw, insd загрузить элемент в цепочку приемник из указанного порта ввода/вывода
вывод элементов цепочки в порт ввода/вывода outs <номер порта>, <адр. источника> outbs, outws, outds переслать элемент из цепочки источника в указанный порт ввода/вывода

Особенности использования

Адресация операндов

цепочка источник - ds:si
цепочка приёмник - es:di

Направление обработки

1. от начала к концу
df = 0; si и di автоматически увеличиваются
команда cld (clear direction flag) сбрасывает флаг df

2. от конца к началу
df = 1; si и di автоматически уменьшаются
команда std (set direction flag) устанавливает флаг df

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

Префиксы повторения зацикливают выполнение команды, позволяя обрабатывать всю цепочку одной командой. Префиксы повторения указываются перед нужной цепочечной командой в поле метки. Цепочечная команда без префикса повторения выполняется один раз, с префиксом - в цикле.

rep выполнять, пока cx<>0 (cx уменьшается автоматически);
repe выполнять, пока cx<>0 или zf=1 (cx уменьшается автоматически);
repne выполнять, пока cx<>0 или zf=0 (cx уменьшается автоматически);

Пример: Написать программу копирования строки.

  data segment  
    s1 db 'Тестируемая строка$' ;строка которую будем копировать
    s2 db 20 dup (' ') ;строка куда будем копировать
  data ends  
       
  code segment  
  start:  
    assume cs:code, ds: data  
    mov ax, data  
    mov ds, ax ;цепочка источник
    mov es, ax ;и цепочка приёмник в одном сегменте
       
    cld ;обработка от начала к концу
    lea si, s1 ;цепочка источник
    lea di, s2 ;цепочка приёмник
    mov cx, 20 ;количество элементов для обработки
  rep movsb ;копируем строку
       
    mov ah, 09  
    lea dx, s2  
    int 21h ;выводим строку-приёмник на экран
       
    mov ax, 4c00h  
    int 21h  
  code ends  
  end start  

Цепочечные команды

Эти команды также называют командами обработки строк символов. Названия почти синонимичны.
Отличие в том, что под строкой символов здесь понимается последовательность байт, а цепочка — это более общее название для случаев, когда элементы последовательности имеют размер больше байта — слово или двойное слово.
Таким образом, цепочечные команды позволяют проводить действия над блоками памяти, представляющими собой последовательности элементов следующего размера:

· 8 бит — байт;

· 16 бит — слово;

· 32 бита — двойное слово.

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

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

Перечислим операции-примитивы и команды, с помощью которых они реализуются, а затем подробно их рассмотрим:

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

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

Movsb movsw movsd

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