![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Как и при анализе операции сложения, проанализируем процессы, происходящие при выполнении операции вычитания:
· если уменьшаемое больше вычитаемого, то разность положительная, результат верен.
· если уменьшаемое меньше вычитаемого, результат меньше 0, а это уже число со знаком. В этом случае результат необходимо откорректировать. После команды вычитания чисел без знака нужно анализировать флаг сf. Если сf =1, то произошел заем из старшего разряда, и результат получился в дополнительном коде.
К командам вычитания относятся следующие:
· DEC операнд – операция декремента, то есть уменьшения операнда на 1;
· SUB операнд1,операнд2 – команда вычитания с принципом действия: операнд1=операнд1–операнд2;
· SBB операнд1,операнд2 – команда вычитания с принципом действия: операнд 1=операнд 1–операнд 2– сf.
Рассмотрим пример программной обработки ситуации при вычитании чисел без знака
xor ax,ax
mov al,5
sub al,10
jnc m1; нет переноса?
neg al; в al – модуль результата
m1: …
С указанными для этой команды вычитания исходными данными результат получается в дополнительном коде (отрицательный). Чтобы преобразовать результат к нормальному виду (получить его модуль), применяется команда neg, с помощью которой получается дополнение операнда. В нашем случае мы получили дополнение дополнения, или модуль отрицательного результата. Тот факт, что число отрицательное, отражен в состоянии флага cf.
Дата публикования: 2014-12-08; Прочитано: 567 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!