logo

Главная Система команд x86 Базовая система команд CPU MOVS

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

MOVS

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

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

A4

MOVS m8,m8

Записать в ячейку по адресу ES:(E)DI байт из ячейки с адресом DS:(E)SI

8086

movsb

A5

MOVS m16,m16

Записать в ячейку по адресу ES:(E)DI слово из ячейки с адресом DS:(E)SI

8086

movsw

A5

MOVS m32,m32

Записать в ячейку по адресу ES:(E)DI двойное слово из ячейки с адресом DS:(E)SI

Intel386

movsd

A4

MOVSB

Записать в ячейку по адресу ES:(E)DI байт из ячейки с адресом DS:(E)SI

8086

movsb

A5

MOVSW

Записать в ячейку по адресу ES:(E)DI слово из ячейки с адресом DS:(E)SI

8086

movsw

A5

MOVSD

Записать в ячейку по адресу ES:(E)DI двойное слово из ячейки с адресом DS:(E)SI

Intel386

movsd

Описание:

Команда MOVS копирует байт, слово или двойное слово по адресу DS:(E)SI в байт слово или двойное слово по адресу ES:(E)DI. Операнд-назначение всегда адресуется с помощью регистра ES, замещение сегмента для назначения невозможно. Замещение сегмента может быть использовано для операнда-источника (сегментом по умолчанию является DS).

Адреса источника и назначения определяются исключительно через значения индексных регистров (E)SI, (E)DI. Регистры SI и DI используются при 16-битном атрибуте размера адреса, а ESI и EDI — при 32-битном атрибуте размера адреса. Атрибут размера операнда определяет пересылку слова (16-битный атрибут) или двойного слова (32-битный атрибут) командами MOVSW и MOVSD, код операции для которых одинаков.

Мнемоники MOVSB, MOVSW и MOVSD являются синонимами мнемоники MOVS, использующей однобайтные, двухбайтные и четырехбайтные операнды соответственно.

После пересылки данных оба регистра, (E)SI и (E)DI автоматически изменяются. Если флаг DF равен 0 (была выполнена команда CLD), то регистры увеличиваются, если флаг DF равен 1 (была выполнена команда STD), то регистры уменьшаются. Увеличение или уменьшение происходит на 1, если пересылается байт, на 2, если пересылается слово, на 4, если пересылается двойное слово.

Команде MOVS может предшествовать префикс REP для перемещения блоков из (E)CX байт, слов или двойных слов.

Операция:

IF (Команда MOVSD) OR (Команда, работающая с двойными словами)

  THEN OperandSize = 32;

  ELSE OperandSize = 16;

FI;

IF AddressSize = 16

  THEN Использовать SI для source-index и DI для destination-index;

  ELSE (* AddressSize = 32 *)

     Использовать ESI для source-index и EDI для destination-index;

FI;

IF (Команда байтового типа)

  THEN

     [destination-index] = [source-index]; (* Перенос байта *)

     IF DF = 0 THEN IncDec = 1 ELSE IncDec = -1; FI;

  ELSE

     IF OperandSize = 16

     THEN

        [destination-index] = [source-index]; (* Перенос слова *)

        IF DF = 0 THEN IncDec = 2 ELSE IncDec = -2; FI;

     ELSE (* OperandSize = 32 *)

        [destination-index] = [source-index]; (* Перенос двойного слова *)

        IF DF = 0 THEN IncDec = 4 ELSE IncDec = -4; FI;

     FI;

FI;

source-index = source-index + IncDec;

destination-index = destination-index + IncDec;

Особые ситуации защищенного режима:

#GP(0), если результат находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.

Особые ситуации режима V86:

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники