- •Содержание
- •Введение
- •1 Нормативные ссылки
- •2 Спецификация задачи
- •3 Формулировка задачи
- •4 Используемые регистры
- •4.2 Сегментные регистры
- •5 Используемые команды
- •5.1 Команды пересылки и загрузки
- •5.2 Арифметические команды
- •5.2.1 Сложение
- •5.2.2 Вычитание
- •5.2.3 Умножение
- •5.2.4 Деление
- •5.2.5 Изменение знака операнда
- •5.2.6 Увеличение операнда на 1
- •5.2.7 Уменьшение операнда на 1
- •5.3 Команды сдвига
- •5.4 Циклы
- •5.5 Процедуры
- •5.6 Операции над битами и байтами
- •6 Используемые функции dos
- •7 Алгоритм решения задачи
- •7.1 Разработка алгоритма основной программы
- •7.2 Разработка алгоритма процедуры поиска нулевой строки
- •7.3 Разработка алгоритма процедуры формирования слов
- •8 Описание программы
- •8. 1 Программа выбора варианта №5, формирования и записи слов (Приложение а)
- •8.2 Программа построения графика (Приложение б)
- •9 Результаты машинного тестирования
- •Заключение
- •Список используемых источников
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, осуществляющая операцию деления двух двоичных значений со знаком.