FE23 LOOCH DISASMСПРАВОЧНИК ПО КОМАНДАМ
|
Главная | Загрузка | Инструкция | Команды x86 | Карта сайта |
КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХВ эту группу собраны команды пересылки данных и команды обмена данными. Поскольку обмен данными - это такие же пересылки без изменения самих данных. И сюда же попали еще несколько команд, которые разумно было тоже отнести к пересылкам данных. Всего здесь 10 команд, если подсчитать разные имена команд ассемблера, или 50 команд, если подсчитать машинные команды с разными кодами операций. На этой странице во всех таблицах, где есть два операнда, первый операнд - это приемник (destination), в второй операнд - источник (source). На языке ассемблера в командах пересылки важен правильный порядок операндов после имени команды. Пересылка выполняется из операнда-источнка в операнд-приемник. Команда пересылки данных
Команда MOV копирует содержимое второго операнда в первый операнд. При этом содержимое второго операнда не изменяется. Команда MOV не воздействует на флажки, состояние флажков не изменяется. В командах MOV с кодами A0, A1, A2, A3 обозначение addr(2/4) это задание адреса в оперативной памяти. Задается смещение относительно начала сегмента DS. Байты (два или четыре), задающие адрес, располагаются в самой команде следом за кодом операции. Размер адреса (2 или 4 байта) определяется атрибутом размера адреса команды. В командах MOV с кодами 89, 8B, A1, A3 размер операнда (2 или 4 байта) определяется атрибутом размера операнда команды. (Не путайте атрибут размера адреса и атрибут размера операнда, это две разные вещи.) Команда для засылки констант
Здесь операнды imm8, imm16, imm32 - это засылаемая константа, непосредственный операнд размером 1, или 2, или 4 байта.
В командах MOV с кодами C6, C7 в байте Команда MOV с кодами C6, C7 обычно используется только для засылки константы в память и не используются для засылки константы в регистр, потому что для засылки константы в регистр есть более удобные команды с кодами от B0 до BF. Другие команды MOV
Команда MOV для пересылки данных в сегментные регистры - смотрите страницу:
Команда MOV для пересылки данных в специальные регистры
(регистры управления, отладки, тестирования) - смотрите страницу: Команды пересылки с расширением операнда
Обе команды, MOVSX и MOVZX, действуют почти одинаково. Различие лишь в том, что команда MOVSX делает знаковое (Sign) расширение, а команда MOVZX - нулевое (Zero) расширение. Первый операнд является приемником (destination), второй операнд источником (source). Обе команды берут содержимое операнда источника, расширяют это значение до величины атрибута размера операнда команды (до 16 бит или до 32 бит) и заносят результат в операнд приемник.
Операнд-источник задается в поле
Бит Команды MOVSX и MOVZX не воздействуют на флажки, состояние флажков не изменяется. Команды расширения операнда
Команды CBW, CWDE, CWD, CDQ выполняют знаковое расширение операнда-источника. Результатом является операнд удвоенного размера. Например, команда CBW берет знаковый бит из регистра AL (то есть, старший бит из AL) и заносит его во все биты регистра AH. Точно также, команда CWD берет знаковый (старший) бит из AX и заносит его во все биты регистра DX. При записи на языке ассемблера для этих команд операнды не указываются. Операнды заранее определены по умолчанию и не могут быть изменены. В таблице показаны операнды, действующие по умолчанию. Команды CBW, CWDE, CWD, CDQ не воздействуют на флажки, состояние флажков не изменяется.
В таблице указан атрибут размера операнда, который требуется
для каждой из команд. Если требуемый для команды размер
не совпадает с общим режимом работы всей программы, то перед
кодом операции данной команды должен стоять префикс
Команда обмена данными
Команда XCHG обменивает содержимое двух своих операндов. Значение, которое было до выполнения команды в первом операнде, оказывается в результате во втором операнде. А значение, которое было до выполнения команды во втором операнде, оказывается в результате в первом операнде. Команда XCHG не воздействует на флажки, состояние флажков не изменяется. Команда XCHG всегда имеет два операнда, причем оба операнда должны иметь одинаковый размер (1 байт, или 2 байта, или 4 байта). Операнды могут быть указаны в команде в любом порядке. Это очевидно из смысла выполняемой операции. Из всех вариантов команды XCHG только команда с кодом 86 может работать с операндами размером один байт. Машинные команды с кодами 90-97 и 87 могут работать с операндами, размером два байта или четыре байта. Размер операнда (2 или 4 байта) определяется атрибутом размера операнда команды. Команда XCHG с кодом 87 используется только для обмена "регистр - память" и не используются для обмена "регистр - регистр", потому что для обмена "регистр - регистр" есть более удобные команды с кодами от 90 до 97. Пустая операция
Очевидно, что команда Известны и еще несколько команд, которые тоже могут применяться, чтобы просто занимать место, причем занимать не один байт, а несколько. Но эти команды не имеют своего отдельного имени на языке ассемблера. Команда перестановки байтов в 32-битном регистре
Команда BSWAP изменяет порядок байтов в 32-битном регистре. В таком регистре размещается двойное слово - четыре байта. Если считать, что в исходном состоянии байты пронумерованы (1-2-3-4), то команда BSWAP просто меняет местами первый байт с четвертым, а второй байт с третьим. После выполнения этой команды байты будут расположены в обратном порядке (4-3-2-1). При этом содержимое самих байтов не изменяется. Как известно, в процессорах x86 принят обратный порядок для расположения данных. Иногда возникает потребность показать результат с прямым порядком байтов. Изменить порядок байтов можно одной командой BSWAP, не делая лишних сдвигов и пересылок. Команда BSWAP не воздействует на флажки, состояние флажков не изменяется. Использование команды BSWAP для размера операнда "16 бит" не предусмотрено. Результат операции в этом случае не определен. Основные страницы справочника |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Главная | Загрузка | Инструкция | Команды x86 | Карта сайта |