Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы_сиппо.doc
Скачиваний:
18
Добавлен:
22.04.2019
Размер:
230.91 Кб
Скачать

6. Команды пересылки данных. Косвенная адресация памяти. Команды работы со стеком.

Команды пересылки данных.

Команда mov используется для копирования значения из одного места в другое. Это "место" может быть регистр, ячейка памяти или непосредственное значение. Синтаксис команды:

mov приемник, источник.

Команда mov производит копирование источника в назначение.

Команда lea используется для загрузки эффективного адреса. Команду lea еще иногда используют для получения адреса какой-либо процедуры.

lea приемник, источник.

Команда lea помещает адрес источника в назначение.

Отличие lea от mov состоит в том, что используется механизм блока адресации процессора, а не арифметико-логического блока.

Косвенная адресация памяти.

Косвенная адресация памяти, когда в определении адреса ячейки памяти участвует один или несколько регистров процессора. Рассмотрим последовательно эти режимы.

Регистровая косвенная (базовая и индексная). Адресуется память (байт или слово). Относительный адрес ячейки памяти находится в регистре, обозначение которого заключается в прямые скобки. В МП 86 косвенная адресация допустима только через регистры ВХ, ВР, SI и DI. При использовании регистров ВХ или ВР адресацию называют базовой, при использовании регистров SI или DI - индексной.

Команды работы со стеком.

Push источник – сохраняет информацию в стек.

Pop назначение – извлекает информацию из стека.

Pushadd – помещает в стек все основные регистры.

7. Команды сложения и вычитания. Команды умножения и деления. Команды распространения знака.

Команды сложения и вычитания.

add приемник,источник

Для сложения двух чисел предназначена команда ADD. Она работает как с числами со знаком, так и с числами без знака (это особенность дополнительного кода). Операнды должны иметь одинаковый размер (нельзя складывать 16- и 8-битное значение). Результат помещается на место первого операнда.

inc операнд

Увеличивает значение операнда в памяти или регистре на 1. Команда используется для увеличения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом команда не воздействует на флаг cf.

sub операнд_1,операнд_2

операнд_1=операнд_2-операнд_1

Целочисленное вычитание. Команда sub используется для выполнения вычитания целочисленных операндов или для вычитания младших частей значений многобайтных операндов.

sbb операнд_1,операнд_2

Целочисленное вычитание с учетом результата предыдущего вычитания командами sbb и sub (по состоянию флага переноса cf). Команда sbb используется для выполнения вычитания старших частей значений многобайтных операндов с учетом возможного предыдущего заема при вычитании младших частей значений этих операндов.

dec операнд

Уменьшение значения операнда в памяти или регистре на 1. Команда dec используется для уменьшения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом заметьте то, что команда не воздействует на флаг cf.

Команды умножения и деления.

mul множитель_1

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

imul множитель_1 imul множ_1,множ_2

Операция умножения двух целочисленных двоичных значений со знаком. Команда выполняет целочисленное умножение операндов с учетом их знаковых разрядов. Для выполнения этой операции необходимо наличие двух сомножителей.

div делитель

Выполнение операции деления двух двоичных беззнаковых значений. Команда выполняет целочисленное деление операндов с выдачей результата деления в виде частного и остатка от деления. При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al.

idiv делитель

Операция деления двух двоичных значений со знаком. Команда выполняет целочисленное деление операндов с учетом их знаковых разрядов. Результатом деления являются частное и остаток от деления. При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al.

Команды распространения знака.

cbw cwde

Расширение операнда со знаком. cbw — при работе команда использует только регистры al и ax. cwde — при работе команда использует только регистры ax и eax. Данные команды используются для приведения операндов к нужной размерности с учетом знака. Такая необходимость может, в частности, возникнуть при программировании арифметических операций.

cwd

Расширение слова со знаком до размера двойного слова со знаком. Команда cwd используется для расширения значения знакового бита в регистре ax на биты регистра dx. Данную операцию, в частности, можно использовать для подготовки к операции деления, для которой размер делимого должен быть в два раза больше размера делителя, либо для приведения операндов к одной размерности в командах умножения, сложения, вычитания.