В этом примере выполняется вычитание. С указанными для этой команды вычитания исходными данными результат получается в дополнительном коде (отрицательный). Для того чтобы преобразовать результат к нормальному виду (получить его модуль), применяется команда neg, с помощью которой получается дополнение операнда. В нашем случае мы получили дополнение дополнения или модуль отрицательного результата. А тот факт, что это на самом деле число отрицательное, отражен в состоянии флага cf. Дальше все зависит от алгоритма обработки.
neg операнд — изменение знака (получение двоичного дополнения) операнда.
Команда выполняет инвертирование значения операнда и помещает результат на место операнда: операнд = 0 – операнд, то есть вычитает операнд из нуля.
Команду neg операнд можно применять:
- •для смены знака;
- •для выполнения вычитания из константы.
Дело в том, что команды sub и sbb не позволяют вычесть что-либо из константы, так как константа не может служить операндом-приемником в этих операциях. Поэтому данную операцию можно выполнить с помощью двух команд:
neg ax;смена знака (ax)...add ax,340;фактически вычитание: (ax)=340-(ax)Советы
1. Сложение и вычитание знаковых и беззнаковых чисел проводятся по одним и тем же алгоритмам. ПК не знает какие числа (знаковые или беззнаковые) он складывает и вычитает, поэтому фиксирует в флагах CF OF особенности операций. Какие числа обрабатываются знает программист. Если предполагается, что работа идет с беззнаковыми числами, необходимо производить анализ флага CF, а OF не надо. Если предполагается, что работа идет со знаковыми числами, необходимо производить анализ флага ОF, а СF не надо.
2. Команды INC DEC занимают только один байт и работают быстрее, чем команды ADD SUB, занимающие три байта.
3. Команды ADD SUB устанавливают флажок переноса, а INC DEC нет
4. Кроме флагов cf и of в регистре eflags есть еще несколько флагов, которые можно использовать с двоичными арифметическими командами:
§ zf — флаг нуля, который устанавливается в 1, если результат операции равен 0, и в 1, если результат не равен 0;
§ sf — флаг знака, значение которого после арифметических операций (и не только) совпадает со значением старшего бита результата, то есть с битом 7, 15 или 31. Таким образом, этот флаг можно использовать для операций над числами со знаком.






