Команды вычитания SUB и вычитания с заемом SBB
Команды SUB (substract - вычесть) и SBB (substract with borrow - вычесть с заемом) аналогичны соответственно командам сложения ADD и ADC, только при вычитании флаг переноса CF действует как признак заема. Формат команды:
SUB приемник,источник
Команда SUB вычитает операнд-источник из операнда-приемника и возвращает результат в операнд-приемник, т.е.
приемник := приемник - источник
Команда SBB делает то же самое, но дополнительно вычитает значение флага переноса CF:
SUB приемник,источник - СF
приемник := приемник - источник - перенос
Как и в случае сложения, команды вычитания выполняют две отдельные функции. Первая команда SUB вычитает числа размером в байт или слово, а также младшие биты чисел повышенной точности. Другая команда SBB вычитает старшие биты чисел повышенной точности. Например, команда
SUB AX,CX
вычитает содержимое регистра СХ из содержимого регистра АХ и возвращает результат в регистр АХ.
Если размеры операндов превышают 16 битов, то пользуйтесь последовательностью команд вида
SUB АХ,ВХ ;Вычесть младшие 16 битов,
SBB BX,DX ;а затем - старшие 16 битов.
Здесь мы вычитаем 32-битовое число, помещенное в регистры СХ и DX, из 32-битового числа, помещенного в регистры АХ и ВХ. При вычитании содержимого регистра DX из содержимого регистра ВХ команда SBB учитывает возможность заема при выполнении первого вычитания.
Можно вычитать из содержимого регистра содержимое ячейки памяти (и наоборот) или вычитать из содержимого регистра либо ячейки памяти непосредственное значение. Ниже приведены примеры допустимых команд:
SUB АХ, MEM WORD ; Вычесть из регистра содержимое ячейки памяти
SUB MEM_WORD[BX],AX ; или наоборот
SUB AL,1O ;Вычесть константу из регистра
SUB MEM_BYTE,OFH ; или из ячейки памяти
Нельзя непосредственно вычесть значение одной ячейки из другой или использовать непосредственное значение как приемник.
Команды SUB и SBB могут воздействовать на шесть флагов следующим образом:
Флаг переноса CF равен 1, если требуется заем; в противном случае он равен 0. Флаг четности PF равен 1, если результат вычитания имеет четное число битов со значением 1; в противном случае он равен 0.
Вспомогательный флаг переноса AF равен 1, если результат вычитания десятичных чисел требует коррекции; в противном случае он равен 0.
Флаг нуля ZF равен 1, если результат равен 0; в противном случае он равен 0. Флаг знака SF равен 1, если результат отрицателен (старший бит равен 1); в противном случае он равен 0.
Флаг переполнения OF равен 1, если при вычитании чисел, имеющих разные знаки, результат превышает диапазон значений приемника в обратном коде, а сам приемник изменяет знак; в противном случае флаг OF равен 0. Флаги SF и OF имеют смысл только при вычитании чисел со знаком, а флаг AF -только при вычитании десятичных чисел.
Дата добавления: 2016-01-26; просмотров: 2008;