Арифметика в дополнительном коде
Микропроцессор может использовать числа в форме дополнительного кода, потому что он в состоянии выполнять операции дополнения (инверсии), инкрементирования (добавления 1 к числу) и сложения двоичных чисел. Микропроцессор не приспособлен для прямого вычитания. Он использует сумматоры и для выполнения вычитания оперирует над дополнительным кодом.
Сложим десятичные числа +5 и +3. Рассмотрим процедуру действий в случае одновременного сложения чисел в десятичном и в дополнительном кодах:
1-е число (+5) 0000 0101
+ +
2-е число (+3) 00000011
(+8) 0000 1000
Согласно табл. 2.l0 +5=0000 0101 в дополнительном коде аналогично +3=0000 0011. Тогда числа в дополнительном коде 0000 0101 и 0000 0011 складываются, как обычные двоичные числа, давая сумму 0000 1000 в дополнительном коде, т.е. 0000 1000=+810.
Пусть надо сложить десятичные числа +7 и —3. Согласно табл. 2.10 +7 = 0000 0111 и —3 = 1111 1101 соответственно в дополнительном коде. Они затем складываются, как обычные двоичные числа, и результат 1 0000 0100 получается в дополнительном коде:
1-е число (+7) 0000 0111
+ +
2-е число (-3) 1111 1101
(+4) 1 0000 0100
Пренебречь переполнением.
Старший бит является переполнением 8-разрядного регистра, и им можно пренебречь. Получаем сумму 0000 0100 или +410.
Сложим десятичные числа +3 и —8. Согласно все той же табл. 2.10 +3=0000 0011 и —8=1111 1000. Их дополнительные коды 0000 0011 и 1111 1000 складываются, как обычные двоичные числа, что дает 1111 1011=—510:
1-е число (+3) 0000 0011
+ +
(-8) 1111 1000
2-е число (—5) 1111 1011
Сложим десятичные числа —2 и —5. В дополнительном коде согласно табл. 2.10—2=1111 1110 и—5=1111 1011. Два числа 1111 1110.и 1111 1011 складываются, как обычные десятичные числа, что дает 1 1111 1001:
1-е число (-2) 1111 1110
+ +
2-е число (-5) 1111 1011
(-7) 1 1111 1001
Пренебречь переполнением.
Старший бит результата является переполнением 8-разрядного регистра, и им пренебрегаем. Таким образом, суммой двух чисел 1111 1110 и 1111 1011 в дополнительном коде будет 1111 1001. Согласно табл. 2.10 сумма 1111 1001=—710.
Вычтем теперь десятичное число +5 из десятичного числа +8. Первое число +8=0000 1000, второе +5=0000 0101. В дополнительный код (инвертировать и добавить 1) должно быть преобразовано число 00000101, что дает 1111 1011. Затем первое число 0000 1000 складывается с дополнительным кодом второго 1111 1011, как с обычным двоичным числом, что дает 1 0000 0011:
1-е число (+8) 0000 1000
— Дополнительный код
2-е число (+5) ------------------- _ 1111 1011
(+3) 1 0000 0011
Пренебречь переполнением.
Старший бит является переполнением регистра, им пренебрегаем, что дает результат 0000 0011 = +310. Заметим, что второе число было представлено в дополнительном коде, затем сложено с первым. Используя дополнительный код и сумматор, микропроцессор выполняет вычитание.
Вычтем теперь большее десятичное число +6 из десятичного числа +2:
1-е число (+2) _ 0000 0010
- Дополнительный код +
2-е число (+6)=00000110 — 1111 1010
(—4) 1111 1100
Дополнительный код первого числа +2=0000 0010, второе число +6=0000 0110, его дополнительный код (инверсия и добавление 1)—1111 1010. Оба эти кода сложены затем, как обычные двоичные числа, что дает 1111 1100, а согласно табл. 2.10 1111 1100 =—410.
Упражнения
2.38. Сложить следующие десятичные числа со знаком, используя метод дополнительного кода:
а) (+7) + (+1) б) (+31) + (+26)
2.39. Сложить следующие десятичные числа со знаком, используя метод дополнительного кода:
а) (+8) + (-5) б) (+89) + (-46).
2.40. Сложить следующие десятичные числа со знаком, используя метод дополнительного кода:
а) (+1) + (-6) б) (+20) + (-60).
2.41. Сложить следующие десятичные числа со знаком, используя метод дополнительного кода:
a) (-3) + (-4) б) (-13) + (-41).
2.42. Вычесть следующие десятичные числа со знаком, используя метод дополнительного кода:
а) (+7) - (+2) б) (+113) - (+50).
2.43. Вычесть следующие десятичные числа со знаком, используя метод дополнительного кода:
а) (+3) - (+8) б) (+12) - (+63).
Решения
2.38. Следовать процедуре, приведенной в § 2.7:
а) (+7) 0000 0111 б) (+31) 0001 1111
(+1) 0000 0001 (+26) 0001 1010
(+8) 0000 1000 (доп. код); (+57) 0011 1001(доп. код).
2.39.Следовать процедуре, приведенной в § 2.7:
а) (+8) 0000 1000 б) (+89) 0101 1001
+ + + +
(-5) 1111 101 (-46) 1101 0010
(+3) 10000 0011 (доп. код); (+43) 10010 1011(доп. код).
Пренебречь переполнением. Пренебречь переполнением.
2.40.Следовать процедуре, приведенной в § 2.7:
а) (+1) 0000 0001 б) (+20) 0001 0100
(—6) 1111 1010 (—60) 1100 0100
(—5) 1111 1011 (доп. код); (—40) 1101 1000(доп. код).
2.41. Следовать процедуре, приведенной в § 2.7:
а) (-3) 1111 1101 б) (—13) 1111 0100
+ +
(-4) 1111 1100 (—41) 1101 0111
(—7) 11111 1001(доп.код); (—54) 11100 1010(доп. код).
Пренебречь переполнением. Пренебречь переполнением.
2.42. Следовать процедуре, приведенной в § 2.7:
б) (+7) 0000 0111
дополнительный +
(+2) = 0000 0010--------------------- 11111110
———код и сложить --
(+5) 10000 1110(доп. код).
Пренебречь•переполнением.
б) (+113) 0111 0001
+ дополнительный +
(+50) = 0011 0010---------------------- 11001110
код и сложить -
10011 1110(доп.код)
Пренебречь переполнением,
2.43. Следовать процедуре, приведенной в § 2.7:
а) (+3) 0000 0011
- +
(+8) = 0000 1000 дополнительный 1111 1000
— код и сложить 1111 1011(доп.код);
б) (+12) 0000 1100
(+63) = 0011 1111 дополнительный+1100 0001
(-51) код и сложить 1100 1101(доп.код).
Лекция 9
Дата добавления: 2016-07-05; просмотров: 4597;