Сложение чисел без знака

При сложении больших чисел результат может не помещаться в отведенное для него место. В этом случае используется флаг переполнения CF. Если после сложения СF =1 то произошло переполнение.

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

1. inc оп1. Эта команда однооперандная и одноадресная.

2. add оп1,оп2. — складывает оп1 с оп2 и записывает результат в оп1.

3. adc оп1,оп2. Отличается от предыдущего сложения тем, что оп1 суммируется с оп2 и флагом переноса CF. Данная команда используется, чтобы было складывать длинные числа (произвольной разрядности).

Команда inc не влияет на состояние флага переноса CF. Команды add и adc устанавливают флаг переноса CF в случае переполнения отведенной для числа памяти.

Сложение целых двоичных чисел со знаком:

Для сложения целых двоичных числе со знаком используются те же самые 3 команды: inc, add,adc.

Отличие состоит в том, что о переполнении теперь сигнализирует не флаг CF, а флаг OF.

Если складываем два числа с разным знаком, то результат заведомо правильный. Если складывают два больших положительных или два больших отрицательных, то происходит переполнение результата. Результат получается правильный, когда знак результата совпадает со знаком слагаемых.

Процессор анализирует правильность по наличию переноса. Если один перенос, то результат не правильный, если два то правильный. О неверном результате сигнализирует выставлением флага ОF. Если флаг ОF установлен в 1, то произошло переполнение для чисел со знаком. При этом по значению СF можно определить какое переполнение произошло. Если ОF=1, СF=0, то это переполнение для положительных чисел. Если же СF=1 и ОF=1, то произошло переполнение для отрицательных чисел.

Если складываем два числа со знаком, то после выполнения операции надо анализировать флаг ОF.

Вычитание двоичных чисел:

При вычитании чисел действуют те же правила что для сложения, т.е если операции над числами без знаков, то о переполнении сигнализирует флаг СF, а со знаком- флаг ОF.

Для вычитания двоичных чисел используются команды:

1. dec оп1 – декремент оп1, и сохранение его в ту же ячейку памяти.

2. sub оп1, оп2. – вычитание из оп1, оп2, и сохр. результата в оп1.

3. sbb оп1, оп2 (c учетом флага переноса). Используется для реализации арифметических действий над длинными числами.

Вычитание чисел со знаком:

О переполнении сигнализирует флаг ОF. Процессор устанавливает флаг в единицу сигнализируя, что произошло переполнение. Принцип действия аналогичен операциям сложения. Если был двойной перенос то результат верный.

Двоично – десятичные числа

Каждая тетрада представляет одну десятичную цифру. Чтобы закодировать одну десятичную цифру достаточно 4-х разрядов. Таким образом, можем хранить десятичное число. В одном байте можем упаковать 2 цифры. Когда упаковывают, иногда в одном байте хранят одну цифру, а другой не используется. Объявление такого числа — это директива DT. Она используется еще и для вещественных чисел в расширенном формате. Если в директиве DT записать какое-то число, то выделится 10 байт, и число запишется в упакованном формате. Таким образом младшая часть по младшему адресу. Этот формат позволяет представить 18 значащих цифр, т.к. старший байт отводится под знак.

Неупакованный формат:

Такое число можно записать директивой DB, перечисляя цифры числа задом наперед.

Нет операций над упакованными числами. Для сложения, умножения, вычитания и деления используются те же операции, что и для двоичных чисел. Действия выполняются над одной цифрам, символ за символом, последовательно.

You can leave a response, or trackback from your own site.

Leave a Reply