Арифметические команды


Операнды могут быть двоичные (8 или 16 битов, целые, со знаком или без знака), двоично-десятичные (от 1 до 255 байтов, без знака, в упакованном или распакованном (ASCII-коды) форматах). Машина не обращает внимания на формат и обращается с ними формально, как с двоичными числами в дополнительном коде. Но для десятичной арифметики после операции требуется коррекция (операции только над одним байтом).

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

Команды сложения, вычитания и сравнения — двухадресные.

l ADD dst, src —сложение двоичных чисел (add — сложить). Прибавляет байт или слово из памяти, регистра или непосредственно к содержимому регистра; либо прибавляет байт или слово из регистра или непосредственно к полю памяти (содержимое src складывается с содержимым dst). Операнды dst и src должны иметь одинаковый формат - байт или слово; для операнда src используются r, m, i; для операнда dst — r, m. В качестве операндов нельзя использовать совместно rsegm, i, а также нельзя чтобы оба операнда были типа m или rseg,m. Команда ADD формирует флаги AF, CF, OF, PF, SF и ZF.

l SUB dst, src — вычитание двоичных чисел (substract — вычесть). Вычитает из содержимого регистра байт или слово, взятое из поля памяти, регистра или непосредственно, либо вычитает из поля памяти байт или слово, взятое из регистра или непосредственно (содержимое src вычитается из содержимого dst). Операнды dst и src должны иметь одинаковый формат - байт или слово; для операнда src используются r, m, i; для операнда dst — r, m . В качестве операндов нельзя использовать совместно rsegm, i, а также нельзя чтобы оба операнда были типа m или rseg,m. Команда SUB формирует флаги AF, CF, OF, PF, SF и ZF.

l CMP dst, src — сравнение (compare — сравнить). Сравнивает содержимое двух полей данных; фактически команда вычитает второй операнд (src) из первого (dst), значение dst не изменяет, а лишь формирует флаги. Операнды dst и src должны иметь одинаковый формат - байт или слово; для операнда src используются r, m, i; для операнда dst — r, m. В качестве операндов нельзя использовать совместно rseg,m, i, а также нельзя чтобы оба типа были m или rseg,m. Команда CMP формирует флаги: CF, ZF при сравнении чисел без знака, CF, OF, SF, ZF при сравнении чисел со знаком.; флаги AF, PF не определены.

Команды приращения

Команды приращения — одноадресные.

l INC dst: инкремент (increment — нарастить). Прибавляет 1 к содержимому dst. Операнд dst может быть представлен операндом типа r или m. Команда INC формирует флаги PF, AF, ZF, SF, ОF.

l DEC dst: декремент (decrement — уменьшить). Вычитает 1 из содержимого dst. Операнд dst может быть представлен операндом типа r или m. Команда DEC формирует флаги PF, AF, ZF, SF, ОF.

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

Команды умножения — одноадресные. Указывается только SRC (множитель); места множимого и произведения задаются строго определенным образом.

l MULsrc — умножение (multiply — умножение без знака). Выполняет умножение беззнакового множимого (8 или 16 битов) на беззнаковый множитель (8 или 16 битов). Команда одноадресная — указывается только SRC (множитель); множимое берется строго определенным образом. SRC может быть представлен операндом типа r или m (i — нельзя).

Если формат SRC — байт, то множимое (байт) находится в AL, произведение (слово) будет в AX; если формат SRC — слово, то множимое (слово) извлекается из AX, произведение (двойное слово) помещается в DX:AX (старшие два байта в DX, младшие — в AX). Команда MUL формирует флаги CF, OF.

l IMUL src — целое умножение знаковых чисел (integer multiply — умножение целых со знаком). Выполняет умножение знакового множимого (8 или 16 битов) на знаковый множитель (8 или 16 битов). Команда одноадресная — указывается только SRC (множитель); множимое берется строго определенным образом. SRC может быть представлен операндом типа r или m (i — не допускается). Если формат SRC — байт, то множимое (байт) извлекается из AL, произведение (слово) будет в AX; если формат SRC — слово, то множимое (слово) находится в AX, произведение (двойное слово) заносится в DX:AX (старшие два байта результата в DX, младшие — в AX). Команда IMUL формирует флаги CF, OF.

Команды деления

Команды деления — одноадресные, указывается только SRC (делитель);делимое задается строго определенным образом.

l DIV src — деление (divide — деление без знака). Выполняет деление беззнакового делимого (16 или 32 бита) на беззнаковый делитель (8 или 16 битов). Команда одноадресная — указывается только SRC (делитель); делимое берется строго определенным образом. SRC может быть представлен операндом типа r или m (i— нельзя).
Если формат SRC — байт, то делимое (слово) находится в AX, частное от деления (байт) будет в AL, остаток от деления (байт) помещается в AH; если формат SRC — слово, то делимое (двойное слово)заносится в DX:AX (старшие два байта в DX, младшие — в AX), частное от деления (слово) – в AX, остаток от деления (слово) сохраняется в DX. Команда DIV формирует флаг IF: IF =1 при делении на 0 и при делении большого числа на очень малое, если частное вне диапазона (флаги AF, CF, OF, PF, SF, ZF не определены).

l IDIV src — деление целых чисел со знаком (integer divide — деление целых чисел со знаком). Выполняет деление знакового делимого (16 или 32 бита) на знаковый делитель (8 или 16 битов). Команда одноадресная — указывается только SRC (делитель); делимое берется строго определенным образом. SRC может быть представлен операндом типа r или m (i — нельзя). Если формат SRC — байт, то делимое (слово) — в AX, частное от деления (байт) будет в AL, остаток от деления (байт)— в AH; если формат SRC — слово, то делимое (двойное слово) попадает в DX:AX (старшие два байта в DX, младшие в AX), частное от деления (слово) — в AX, остаток от деления (байт) — в DL. Команда IDIV формирует флаг IF: IF = 1 при делении на 0 и при делении большого числа на очень малое, если частное вне диапазона).

Логические команды

Эти команды используются для сравнения, сброса и установки битов операнда в операциях преобразования кодов и при выполнении арифметических операции в кодах ASCII.

l OR dst, src — логическое сложение (or — или). Команда выполняет поразрядную дизъюнкцию (логическое сложение — операцию «ИЛИ») битов двух операндов; устанавливает 1 в тех битах операнда dst, в которых была 1 хотя бы у одного из исходных операндов. Операнды dst и src должны иметь одинаковыйформат (оба или байт, или слово) и могут быть: src типа r, m, i; dst типа r, m (невозможно rseg,m и нельзя, чтобы оба операнда были типа m). Команда OR сбрасывает флаги OF = 0 и CF = 0; формирует флаги PF, SF, ZF.

l AND dst, src — логическое умножение (and — и). Команда выполняет поразрядную конъюнкцию (логическое умножение — операцию «И») битов двух операндов; устанавливает 1 в тех битах операнда dst, в которых у обоих исходных операндов были 1. Операнды dst и src должны иметь одинаковый формат (оба или байт или слово) и могут быть: src типа r, m, i; dst типа r, m (невозможно rseg,m и нельзя, чтобы оба операнда были типа m). Флаги: OF = 0 и CF = 0; команда формирует PF, SF, ZF; значение AF не определено.



Дата добавления: 2021-09-25; просмотров: 423;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.