Использование модифицированного дополнительного кода связано с проблемой переполнения разрядной сетки. Вычисления в процессоре "классической архитектуры" концептуально производятся параллельно по разрядам операндов и последовательно по операциям. Для большинства микропроцессоров параллельность обработки определяется размером операнда. Это байт (8 бит), слово (2 байта), двойное слово (4 байта) или учетверенное слово (8 байт). Количество байт бит ? параллельной обработки (ширина обработки) определяется разрядностью шин данных, регистров и устройств обработки.
Но в любом случае возможно получение результата операции или цепочки операций, превышающего ширину обработки. Это переполнение разрядов (переполнение разрядной сетки). В процессе работы возможно получение количества бит результата, превышающего ширину обработки. При этом возможно получение неверного результата из-за нехватки разрядов устройства обработки или регистров результата. Для контроля правильности выполнения операций необходим механизм фиксации переполнения.
Рассмотрим несколько примеров выполнения арифметических операций в дополнительном коде над числами А = 0.101(2) = 5(10) и В = 0.110(2) = 6(10).
1. С = А – В = А + (–В)
0.101 + 5(10)
+ 1.010 – 6(10)
1.111 – 1(10)нет переноса, нет переполнения, результат верен.
2. С = В – А = В + (–А)
0.110 + 6(10)
+ 1.011 – 5(10)
1½0.001 + 1(10)есть перенос, нет переполнения, результат верен.
3. С = А + В,
0.101 + 5(10)
+ 0.110 + 6(10)
1.011 – 3(10)), нет переноса, есть переполнение, результат неверен. (должно быть +11(10))
4. С = (–А) + (–В)
1.011 – 5(10)
+ 1.010 – 6(10)
1½0.101 + 5(10) , есть перенос, есть переполнение, результат неверен. (должно быть -11(10))
5. С =(–А) + (–D), где D = 3(10) = 0.011(2)
1.011 – 5(10)
+ 1.101 – 3(10)
1½1.000 – 8(10)есть перенос, переполнения нет, результат верен.
Из приведенных примеров видно что:
· переполнение разрядной сетки (примеры 3 и 4) ведет к ошибке в результате,
· переполнение не всегда совпадает с переносом из старшего разряда,
· для выявления переполнения нужно также анализировать соотношение знаков исходных операндов.
Процедура выявления переполнения разрядной сетки намного упрощается при использовании модифицированного дополнительного кода.
Модифицированный дополнительный код получается из дополнительного простым дублированием знакового разряда. Причем, в памяти числа могут храниться в дополнительном коде и переводиться в модифицированный код непосредственно при пересылке на исполнительное устройство.
Приведенные выше примеры выполнения операций в модифицированном дополнительном коде выглядят так:
1. 00.101 + 5(10)
+ 11.010 – 6(10)
11.111 – 1(10)нет переноса, нет переполнения.
2. 00.110 + 6(10)
+ 11.011 – 5(10)
1½ 00.001 + 1(10)есть перенос, нет переполнения.
3. 00.101 + 5(10)
+ 00.110 + 6(10)
01.011 +11(10), нет переноса, есть переполнение.
4. 11.011 – 5(10)
+ 11.010 – 6(10)
1½10.101 –11(10), есть перенос, есть переполнение.
5. 11.011 – 5(10)
+ 11.101 – 3(10)
1½11.000 – 8(10)есть перенос, нет переполнения.
В дополнительном коде факт переполнения определяется по несовпадению цифр знака. При этом, (даже) в случае переполнения первая цифра знака указывает на верный знак результата, а вторая – на верную старшую цифру результата, не поместившуюся в разрядную сетку значащих цифр результата. Таким образом, правильный результат может быть сохранен для последующей обработки.