3.9 Основные арифметические команды
Команда ADC приемник, источник (сложение с учетом значения флага переноса CF)– используется при сложении длинных двоичных чисел как самостоятельная операция, так и совместно с командой ADD. При парном применении команд ADC и ADD начальное сложение младших байтов/слов/двойных слов осуществляется командой ADD, после чего команда ADC завершает сложение, здесь в качестве операндов уже берутся последующие старшие байты/слов/двойные слова. Таким образом, учет переносов из младших разрядов в старшие командой ADC снимает ограничения на диапазон значений складываемых чисел.
Действие команды: приемник =приемник +источник + СF
Команда ADD приемник, источник – сложение двух целочисленных двоичных операндов. При переполнении приемника флаг CF устанавливается в 1.
Применение: команда ADD используется для сложения двух целочисленных операндов. Результат сложения помещается по адресу первого операнда. Если результат выходит за границы операнда приемник (возникает переполнение), то учет этой ситуации производится путем анализа флага CF и последующим применением команды ADC.
Команда INC операнд – увеличивает операнд размером байт, слово или двойное слово на единицу.
Применение: команда INC используется для увеличения значения байта, слова или двойного слова в памяти или регистре на единицу. При этом команда не воздействует на флаг CF.
Команда СМР операнд_1, операнд_2 – сравнение двух операндов.
Действие: операнды операнд_1 и операнд_2 сравниваются методом вычитания, при этом сами операнды не изменяются. По результатам сравнения устанавливаются флаги:OF, SF, ZF, AF, PF, CF.
Применение: команда СМР обычно применяется с командами условного перехода и командой установки байта по значению SETcc. Команда СМР также работает с числами с плавающей запятой в коротком формате.
Команда DEC операнд – уменьшение операнда на единицу. Изменяемые флаги: OF, SF, ZF, AF, PF. Флаг CF не изменяется.
Применение: команда DEC используется для уменьшения значения регистра или байта, слова, двойного слова в памяти на единицу.
Команда NEG приемник – изменяет знак (формирует двоичное число в дополнительном коде). Действие – команда вычисляет двоичное дополнение операнда приемник путем вычитания исходного значения из 0.
Применение: команда NEG используется для формирования двоичного дополнения операнда с последующим сложением его с двоичной единицей. Если операнд отрицательный, то операция NEG над ним означает получение его модуля.
Изменяемы флаги:
- если приемник равен нулю: OF, SF, ZF, AF, PF, флаг CF - устанавливается равным 0;
- если приемник не равен нулю: OF, SF, ZF, AF, PF, флаг CF - устанавливается равным 1.
Команда SBB операнд1, операнд2 – вычитание с заемом.
Действие: операнд_1=операнд_1-(операнд_2+СF). Состояние флага CF представляет собой заем от предыдущего вычитания. Команда SBB не различает знаков операндов. Вместо этого процессор устанавливает флаги OF и CF, чтобы идентифицировать факт заема для знакового и беззнакового операндов. Флаг SF отражает знак результата (состояние его старшего бита).
Изменяемые флаги: OF, SF, ZF, AF, PF, CF.
Применение: команда SBB используется для выполнения вычитания старших частей значений многобайтовых операндов с учетом возможного предыдущего заема при вычитании младших частей значений этих операндов.
Команда SUB операнд_1, операнд_2 – вычитание двух целочисленных двоичных операндов.
Действие: команда выполняет целочисленное вычитание: операнд_1=операнд_2-операнд_1. Команда SUB не различает знаков операндов. Вместо этого она соответствующим образом устанавливает флаги OF, SF, ZF, AF, PF, CF.
Применение: команда SUB используется для выполнения вычитания целочисленных операндов или для вычитания младших частей многобайтовых операндов.
