Опишите состав и назначение арифметических команд вычитания

SUB (SUBtract) Вычитание

Синтаксис:
sub пр, ист

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

SBB (SuBtract with Borrow) Вычитание с займом

Синтаксис:
sbb пр, ист

Команда sbb используется для выполнения вычитания старших частей значений многобайтных операндов с учетом возможного предыдущего займа при вычитании младших частей значений этих операндов. Эта команда осущ вычитание с учетом CF.

SUB (SUBtract) Вычитание. Схема команды: sub операнд1, операнд2

Назначение: целочисленное вычитание. Алгоритм работы: выполнить вычитание операнд_1=операнд_2-операнд_1; установить флаги.

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

SBB (SuBtract with Borrow) Вычитание с заемом. Схема команды: sbb операнд1, операнд2. Назначение: целочисленное вычитание с учетом результата предыдущего вычитания командами sbb и sub (по состоянию флага переноса cf). Алгоритм работы: выполнить сложение операнд_2=операнд_2+(cf); выполнить вычитание операнд_1=операнд_1-операнд_2;

Применение: Команда sbb используется для выполнения вычитания старших частей значений многобайтных операндов с учетом возможного предыдущего заема при вычитании младших частей значений этих операндов.



Опишите состав и назначение арифметических команд умножения

IMUL (Integer MULtiply) Умножение целочисленное со знаком.

Схема команды: imul множитель_1 imul множ_1,множ_2 imul рез-т,множ_1,множ_2

Назначение: операция умножения двух целочисленных двоичных значений со знаком. Алгоритм работы: Алгоритм работы команды зависит от используемой формы команды. Форма команды с одним операндом требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя: если операнд, указанный в команде, — байт, то второй сомножитель располагается в al; если операнд, указанный в команде, — слово, то второй сомножитель располагается в ax; если операнд, указанный в команде, — двойное слово, то второй сомножитель располагается в eax. Результат умножения для команды с одним операндом также помещается в строго определенное место, определяемое размером сомножителей: при умножении байтов результат помещается в ax; при умножении слов результат помещается в пару dx:ax; при умножении двойных слов результат помещается в пару edx:eax. Команды с двумя и тремя операндами однозначно определяют расположение результата и сомножителей следующим образом: в команде с двумя операндами первый операнд определяет местоположение первого сомножителя. На его место впоследствии будет записан результат. Второй операнд определяет местоположение второго сомножителя; в команде с тремя операндами первый операнд определяет местоположение результата, второй операнд — местоположение первого сомножителя, третий операнд может быть непосредственно заданным значением размером в байт, слово или двойное слово. Команда imul устанавливает в ноль флаги of и cf, если размер результата соответствует регистру назначения. Если эти флаги отличны от нуля, то это означает, что результат слишком велик для отведенных ему регистром назначения рамок и необходимо указать больший по размеру регистр для успешного завершения данной операции умножения. Конкретными условиями сброса флагов of и cf в ноль являются следующие условия: для однооперандной формы команды imul регистры ax/dx/edx являются знаковыми расширениями регистров al/ax/eax; для двухоперандной формы команды imul для размещения результата умножения достаточно размерности указанных регистров назначения r16/r32; то же для трехоперандной команды умножения. Применение: Команда выполняет целочисленное умножение операндов с учетом их знаковых разрядов. Для выполнения этой операции необходимо наличие двух сомножителей. Размещение и задание их местоположения в команде зависит от формы применяемой команды умножения, которая, в свою очередь, определяется моделью микропроцессора. Так, для микропроцессора i8086 возможна только однооперандная форма команды, для последующих моделей микропроцессоров дополнительно можно использовать двух- и трехоперандные формы этой команды.

MUL (MULtiply) Умножение целочисленное без учета знака.

Схема команды: mul множитель_1

Назначение: операция умножения двух целых чисел без учета знака.

Алгоритм работы: Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя: если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al; если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax; если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.

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

Опишите состав и назначение арифметических команд деления.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: