Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / docx56 / kursach.docx
Скачиваний:
21
Добавлен:
01.08.2013
Размер:
87.59 Кб
Скачать

5.2.2 Вычитание

Схема команды: sub операнд_1,операнд_2

Назначение: целочисленное вычитание.

Алгоритм работы:

- выполнить вычитание операнд_1=операнд_2-операнд_1;

- установить флаги.

Применение:

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

Команда вычитания с заемом SBB решает задачи вычитания повышенной точности. Команда SBB учитывает флаг заема при вычитании, т.е. значение заема вычитается из результата, полученного при нормальном вычитании.

5.2.3 Умножение

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

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

Алгоритм работы:

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

- если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;

- если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;

- если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.

Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:

- при умножении байтов результат помещается в ax;

- при умножении слов результат помещается в пару dx:ax;

- при умножении двойных слов результат помещается в пару edx:eax.

Применение:

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

Существует также команда imul, осуществляющая операцию умножения двух целочисленных двоичных значений со знаком. Команда imul устанавливает в ноль флаги of и cf, если размер результата соответствует регистру назначения. Если эти флаги отличны от нуля, то это означает, что результат слишком велик для отведенных ему регистром назначения рамок и необходимо указать больший по размеру регистр для успешного завершения данной операции умножения.

5.2.4 Деление

Схема команды: div делитель

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

Алгоритм работы:

Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно и размер его зависит от размера делителя, который указывается в команде:

- если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

- если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

- если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.

Применение:

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

Существует также команда idiv, осуществляющая операцию деления двух двоичных значений со знаком.

Соседние файлы в папке docx56