Команда вычитания SUB и вычитания с заемом SBB . — КиберПедия 

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Команда вычитания SUB и вычитания с заемом SBB .

2024-02-15 21
Команда вычитания SUB и вычитания с заемом SBB . 0.00 из 5.00 0 оценок
Заказать работу

Команды SUB (substract - вычесть) и SBB (substract with borrow - вычесть с заемом) аналогичны соответственно командам сложения ADD и ADC, только при вычитании флаг переноса CF действует как признак заема . Команда SUB вычитает операнд-источник из операнда-приемника и возвращает результат в операнд-приемник, т.е.

 

приемник = приемник — источник

Команда SBB делает то же самое, но дополнительно вычитает значение флага переноса CF:

приемник = приемник - источник - перенос

Как и в случае сложения, команды вычитания выполняют две отдельные функ­ции. Первая команда SUB вычитает числа размером в байт или слово, а также младшие биты чисел повышенной точности. Другая команда SBB вычитает старшие биты чисел повышенной точности. Например, команда

SUB AХ,СХ

вычитает содержимое регистра СХ из содержимого регистра АХ и возвращает результат в регистр АХ.

Если размеры операндов превышают 16 битов, то пользуйтесь последователь­ностью команд вида

SUB AX,BX ;Вычесть младшие 16 битов,

SBB BX,DX ; а затем — старшие 16 битов

Здесь мы вычитаем 32-битовое число, помещенное в регистры СХ и DX, из 32-бито­вого числа, помещенного в регистры АХ и ВХ. При вычитании содержимого регист­ра DX из содержимого регистра ВХ команда SBB учитывает возможность заема при выполнении первого вычитания.

Можно вычитать из содержимого регистра содержимое ячейки памяти (и наоборот) или вычитать из содержимого регистра либо ячейки памяти непосредст­венное значение. Ниже приведены примеры допустимых команд:

SUB AХ,MEM_WORD           ; Вычесть из регистра содержимое ячейки памяти

SUB MEM_WORD[BX],AХ                 ; или наоборот

SUB AL,10        ; Вычесть константу из регистра

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 – только при вычитании десятичных чисел.

 

       Коррекция результата вычитания для представления в кодах ASCII и в упакованном десятичном формате (команды AAS и DAS ).

При вычитании, как и при сложении, микропроцессор 8x86 рассматри­вает операнды как двоичные числа. Поэтому вычитание чисел, представленных в двоично-десятичном коде (BCD-чисел), может привести к неправильным результа­там. Предположим, например, что надо вычесть BCD-число 26 из BCD-числа 55. Микропроцессор 8x86 выполнит двоичное вычитание следующим образом: допол­нит до двух двоично-десятичное представление числа 26, а затем выполнит сложе­ние:

0101 0101 (BCD-число 55)

+ 1101 1010 (дополнение до двух BCD-числа 26)

1 0010 1111 (??).

Вместо правильного значения (BCD-числа 29) мы получили результат, у которого старшая цифра 2, младшая цифра - шестнадцатеричная цифра F, и при этом бит переноса равен 1. Конечно, этот результат требует коррекции.

Коррекция результата вычитания двух десятичных чисел осуществляется командами AAS (ASCII adjust for substraction - скорректировать вычитание для представления в кодах ASCII) и DAS (Decimal adjust for substraction - скорректиро­вать вычитание для представления в десятичной форме). При их исполнении предполагается, что корректируемое число находится в регистре AL.

Команда AAS преобразует содержимое регистра AL в правильную неупакован­ную десятичную цифру в младших четырех битах регистра AL (и обнуляет старшие четыре бита). Она используется в следующем контексте:

SUB AL,BL ; Вычесть BCD-число (содержимое BL) из AL

AAS     ; и преобразовать результат в неупакованное число

Если результат превышает 9, то команда AAS вычитает 1 из содержимого регистра АН и полагает флаг CF равным 1, в противном случае она обнуляет флаг CF. Кроме того, команда AAS изменяет состояние флага AF и оставляет значения флагов PF, ZF, SF и OF неопределенными. Но так как в данном случае только флаг CF имеет смысл, то считайте значения остальных флагов уничтоженными.

Команда DAS преобразует содержимое регистра AL в две правильные упако­ванные десятичные цифры. Она используется в следующем контексте:

SUB AL,BL ;Вычесть упакованное BCD-число(содержимое) BL из AL

DAS      ; и преобразовать результат в упакованное число

Если результат превышает предельное значение для упакованных BCD-чисел (99), то команда DAS вычитает 1 из содержимого регистра АН и полагает флаг CF равным 1; в противном случае она обнуляет флаг CF. Кроме того, команда DAS изменяет состояния флагов PF, AF, ZF и SF, а значение флага OF оставляет неопре­деленным. Но так как в данном случае только флаг CF имеет смысл, то считайте остальные упомянутые флаги уничтоженными.


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

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.