8.Команды пересылки данных. Группы команд. Ограничения в использовании операндов.
Команды пересылки данных.
Эти команды обеспечивают удобные методы пересылки байтов, слов и двойных слов между памятью и регистрами процессора. Они делятся на три типа:
- команды пересылки данных общего назначения;
- команды работы со стеком;
- команды преобразования типов.
Команды пересылки данных общего назначения.
MOV (Переслать) пересылает байт, слово или двойное слово из операнда источника в операнд назначения. Команда MOV используется при передаче данных между следующими элементами :
- из регистра в память;
- из памяти в регистр;
- между регистрами общего назначения;
- непосредственные данные в регистр;
- непосредственные данные в память;
Команда MOV не может пересылать данные из памяти в память или из сегментного регистра в сегментный регистр. Пересылка из памяти в память может быть выполнена при помощи команды пересылки строк MOVS.
XCHG (Перестановка) переставляет содержимое двух операндов. Эта команда используется вместо трех команд MOV. Она не требует временного размещения в памяти одного из операндов в то время, когда другой загружается. Команда XCHG может менять местами два байта, два слова или два двойных слова. Операндами для команды XCHG могут служить два регистровых операнда или операнд-регистр и операнд, расположенный в памяти. Когда команда XCHG использует операнд, расположенный в памяти, она автоматически активизирует сигнал LOCK.
Команды работы со стеком.
PUSH (Поместить) декрементирует указатель стека (регистр ESP), затем копирует операнд-источник в вершину стека. Команда PUSH часто используется для размещения в стеке параметров перед вызовом процедуры. Внутри процедуры она может быть использована для резервирования пространства в стеке под временные переменные. Команда PUSH работает с операндами, размещенными в памяти, непосредственными операндами и с регистровыми операндами (включая регистры сегмента).
POP (Восстановить (данные) из стека) передает слово или двойное слово из текущей вершины стека (на которую указывает регистр ESP) операнду назначения и затем увеличивает значение регистра ESP, чтобы тот указывал на новую вершину стека. POP перемещает информацию из стека в регистр общего назначения, регистр сегмента или в память.
Команды преобразования типов.
Преобразование типов без знака
Преобразование типов выполняется по-разному для чисел со знаком и без. Для преобразования чисел без знака необходимо просто заполнить все старшие биты нулями.
Такое преобразование можно выполнить с помощью обычной команды MOV. Кроме того в системе команд процессора существует специальная команда — MOVZX (копирование с нулевым расширением). Первый операнд команды имеет размер 16 бит (слово), а второй — 8 бит (байт).
Преобразование типов со знаком
Для чисел со знаком всё немного сложнее. Если мы просто заполним старшую часть нулями, то результат будет положительным, а это не всегда верно. Поэтому преобразование выполняется путём копирования знакового бита на всю старшую часть. Для такого преобразования предназначена команда MOVSX (копирование со знаковым расширением). Первый операнд — слово, второй операнд — байт.
Существуют ещё две команды для преобразования типов со знаком: CBW (Convert Byte to Word — преобразовать байт в слово) и CWD (Convert Word to Double word — преобразовать слово в двойное слово). У этих команд нет явных операндов. Команда CBW преобразует байт, находящийся в регистре AL, в слово в регистре AX. Команда CWD преобразует слово, находящееся в регистре AX, в двойное слово в регистрах DX:AX. Эти команды удобно использовать вместе с командами умножения и деления.
Группы команд
Вопрос 5
Ограничения в использовании операндов.
hz