Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
MOVSD
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
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 |
Описание:
Команда 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, если пересылается двойное слово.
Операция:
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) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru