Организация ЭВМ и систем: Курс лекций (Позиционные системы счисления. Процессоры семейства IA-32. Лазерные принтеры), страница 18

Если адрес — 32-разрядный, а приёмник — 16-разрядный, старшая половина вычисленного адреса теряется. Если адрес — 16-разрядный, а приёмник — 32-разрядный, вычисленный адрес дополняется нулями.

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

                LEA     BX, [EBX+EBX*4] ; BX=EBX´5

Эта команда меньше, чем соответственный набор команд MOV и ADD и не изменяет флаги.

7.2.  Команды арифметических операций

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

ADD            приёмник, источник           сложение                                      8086

Складывает приёмник и источник, помещает сумму в приёмник. Содержимое источника не меняется.

Источником может быть:

—  непосредственный операнд;

—  регистр общего назначения;

—  память.

Приёмником может быть:

—  регистр общего назначения;

—  память.

Память не может использоваться одновременно и как приёмник, и как источник.

Команда не различает числа со знаком и без такового. В зависимости от типа чисел анализируют разные флаги: CF — для чисел без знака, OF и SF —со знаком.

ADC            приёмник, источник           сложение с учётом переноса       8086

Команда аналогична ADD, но складывает приёмник, источник и флаг CF.

Примечание. Команда ADC предназначена для использования в паре с командой для сложения чисел повышенного размера в несколько приёмов, которые нельзя сложить одной командой. Например, для сложения двух 64-разрядных чисел, одно из которых находится в паре регистров EDX:EAX, а другое — в EBX:ECX, можно воспользоваться следующей парой команд:

                ADD     EAX, ECX
                ADC     EDX, EBX

Если при сложении младших двойных слов произошёл перенос из старшего разряда, то установившийся при этом CF будет учтён следующей командой ADC.

XADD         операнд1, операнд2            обменять между собой и сложить                   80486

Складывает операнды аналогично ADD, но содержимое первого операнда помещается во второй операнд, а сумма — в первый операнд. Результат получается такой же, как от пары команд XCHG и ADD с теми же операндами, откуда и происходит название.

Источником может быть регистр общего назначения.

Приёмником может быть:

—  регистр общего назначения;

—  память.

SUB            приёмник, источник           вычитание                                    8086

Вычитает источник из приёмника и помещает разность в приёмник. Правила для выбора приёмника и источника — такие же, как для команды ADD. Точно так же, как и команда ADD, команда SUB используется и для чисел со знаком, и для чисел без знака, для чего используются разные флаги состояния.

SBB            приёмник, источник           вычитание с займом                    8086

Вычитает из приёмника значение источника и значение флага переноса и помещает результат в приёмник.

Примечание. Назначение команды SBB аналогично назначению команды ADC. Например, для вычитания 64-разрядных чисел в EDX:EAX и EBX:ECX, можно воспользоваться следующей парой команд:

                ADD     EAX, ECX
                ADC     EDX, EBX

MUL            источник                             умножение чисел без знака         8086

Содержимое источника умножается на содержимое AL, AX или EAX соответственно размеру операнда. Результат располагается в AX, DX:AX или EDX:EAX соответственно.

Источником может быть:

—  регистр общего назначения;

—  память.

Флаги CF и OF сбрасываются тогда и только тогда, когда размер результата не превышает размера множителей, то есть результат помещается в младшей половине приёмника. Иначе флаги устанавливаются.

Флаги AF, PF, SF, ZF не определены.

IMUL         источник                             умножение чисел со знаком        8086

IMUL         приёмник, источник           то же                                           80386

IMUL         приёмник, источник1, источник2 то же                                80186