Академический Документы
Профессиональный Документы
Культура Документы
2015 год
Введем обозначения:
A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
где
a0 , b0 — знаковые разряды слагаемых,
c0 — код знака результата,
ai , bi , ci i ∈ {0, 1, 2, . . . , n} — двоичные переменные.
A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
a0 , b0 — знаковые разряды слагаемых
A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
a0 , b0 — знаковые разряды слагаемых
A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
a0 , b0 — знаковые разряды слагаемых
[−0, a1 a2 . . . an ]i = 1, a1 a2 . . . an (3)
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −13; B = +3 A + B = −10
Коррекции не требуется
A = −5; B = −6 A + B = −11
A = −5; B = −6 A + B = −11
A = −5; B = +5 A + B = −0
A = +3; B = −0 A + B = +3
OV = a0 b 0 c0 ∨ a0 b0 c 0 (4)
() Арифметические основы ЭВМ 2015 год 24 / 148
Модуль суммы равен единице
1, a1 a2 . . . an + 2−n + 0, a1 a2 . . . an =
= 1, (a1 + a1 )(a2 + a2 ) . . . (an + an + 2−n ) = 10, 00 . . . 0 = 2,
учитывая, что (ai + ai ) = 1.
Таким образом, для преобразования отрицательного двоичного числа
в дополнительный код следует преобразовать его сначала в обратный
код (установив знаковый разряд в «1» и проинвертировав все
остальные разряды числа) и добавить единицу к младшему разряду
обратного кода.
() Арифметические основы ЭВМ 2015 год 29 / 148
Преобразовать числа в дополнительный код
Число ПК ОК ДК
A = +13; B = −3 A + B = +10
A = −13; B = +3 A + B = −10
A = −5; B = −6 A + B = −11
A = −5; B = +5 A+B =0
A = +13; B = +5 A + B = +18
A = −11; B = −8 A + B = −19
A = −11; B = −5 A + B = −16
-127 -1 0 +1 +127
1.0000001 0.0000000 0.1111111
ОА&УА
АЛУ-1
Начало
1
a7 b7
0 Проверка
a7 переполнения 0
Перевод 1 0
A D в AI 1 a7 c7
A := a7.A*
OV := 1 OV := 0
Инверсия
знака и кода B := B
0
c7
Сложение C := A + B Перевод
1
CI в CD
0 C := c7.C*
p8
Коррекция 1
C := C + 1 Конец
0 : y 0 , y2 ; Ввод A
1 : y 1 , y3 ; Ввод B
2 : y4 , y6 , y13 , y16 , y24 ; C := A ⊕ B
3 : y26 , y2 ; A := C 1
4 : y11 , y16 , y24 ; Сброс C
5 : y26 , y3 , y22 , y15 ; Сброс счётчика веса B2 , счётч. цикла, p0 := 1
6 : y4 , y32 , y17 , y24 ; Сдвиг A вправо; x 3 → 9
7 : y6 , y8 , y16 , y25 ; D := B + 1
8 : y27 , y3 ; B := D
9 : y26 , y2 , y23 ; A := C ; Inc(Сч.Ц); x 4 → 6
10 : y6 , y12 , y16 , y24 ; C := B
11 : y14 , y22 , y21 ; p0 := 0; Сч.Ц := 0; Стоп
1
Используем регистры A и C для хранения «взвешиваемого вектора»
2
Используем регистры B и D для хранения веса вектора
() Арифметические основы ЭВМ 2015 год 57 / 148
Операционный автомат АЛУ-R
АЛУ-R
0
a7
1
№ A B F !a !b АЛБ Сдв. Приме-
A := a7.A* МК OV P0 DL DR – – 111 чание
B := B 0 R0 R1 R7 A B R L x2 → 2
C := A + B
1 R0 R1 R0 !a B R Q
0
2 R0 R1 R1 A !B S Q
p8
3 R0 R1 R2 A B ADD Q x1 → 6
1
C := C + 1 4 OV 1 DL DR - - C
5 R2 R1 R2 A 0 ADD Q
1
a7 b7
6 R0 R1 R7 A B XOR L x2 → 10
0
1
a7 c7
0 7 R0 R2 R7 A B XOR L x 2 → 10
8 1 P8 DL DR - - C 1 → 12
OV := 1 OV := 0
9 0 P8 DL DR - - C
0
c7 10 R2 R1 R7 A B R L x 2 → 12
1 11 R2 R1 R2 !a B R Q
C := c7.C*
12 R2 R2 R2 A B AND Q End
Конец
№ A B F !a !b АЛБ Сдв.
Сч. Примечание
МК OV P0 DL DR – – 111
0 R3 R3 R3 0 0 AND Q 0 R3:=0; Сч:=0
1 R0 R1 R2 A B XOR Q Ch R2 := R0 ⊕ R1
2 OV 1 DL DR - - C Ch P0:=1
3 R2 R2 R2 A B R L Ch L1(R2); x 2 → 5
4 R3 R3 R3 A 0 ADD Q Ch R3:=R3+1
5 R7 R7 R7 0 0 AND Q Inc Сч+1; x 4 → 2
C 0 = A0 · B 0 =
A0 (b1 · 2−1 + b2 · 2−2 + . . . + bn · 2−n ) =
A0 bn · 2−n + A0 bn−1 · 2−(n−1) + . . . + A0 b2 · 2−2 + A0 b1 · 2−1 =
(A0 bn · 2−(n−1) + A0 bn−1 · 2−(n−2) + . . . + A0 b2 · 2−1 + A0 b1 ) · 2−1 =
((A0 bn · 2−(n−2) + A0 bn−1 · 2−(n−3) + . . . + A0 b2 ) · 2−1 + A0 b1 ) · 2−1 =
....................................................................
((. . . (0 + A0 bn ) · 2−1 + A0 bn−1 ) · 2−1 + . . . + A0 b2 ) · 2−1 + A0 b1 ) · 2−1
(8)
01 × 01 = 0001 10 × 10 = 0100
01 × 10 = 0010 10 × 11 = 0110
01 × 11 = 0011 11 × 11 = 1001
В двоичном коде:
|{z} 10 × |{z}
01 |{z} 10 |{z}
10 = 00111100
Ah Al Bh Bl
Al × Bl = 10 × 10 = 0100 Al × Bh = 10 × 10 = 0100
Ah × Bl = 01 × 10 = 0010 Ah × Bh = 01 × 10 = 0010
01 00
+ 01 00
00 10
00 10
00 11 11 00
В двоичном коде:
|{z} 11 × |{z}
01 |{z} 10 |{z}
11 = 01001101
Ah Al Bh Bl
Al × Bl = 11 × 11 = 1001 Al × Bh = 11 × 10 = 0110
Ah × Bl = 01 × 11 = 0011 Ah × Bh = 01 × 10 = 0010
10 01
+ 01 10
00 11
00 10
01 00 11 01
i:= n
C:= 0
p:= 0
1 0 1 0 1 0
p p p p
0 1
p:= 0 p:= 1
C:= R2(C)
i :=i+2
да
i>0
нет
OV := 0
Делим модули:
22 : 7 22 − 7 − 7 − 7 − 7(< 0) + 7 ⇒ 3 Частное:
10 − 7 − 7(< 0) + 7 ⇒ 1 3, 1 . . .
30 − 7 . . .
Номер
Действие W >0 W <0
шага
2◦ Восстановление остатка Нет W +B
3◦ Сдвиг влево 2W 2(W + B)
2(W + B) − B =
4◦ Вычитание делителя 2W − B
= 2W + B
частное
0.0100... 0011
- вычитание
1100
1.0111 сдвиг
0.11 10
+ сложение
1100
1.1010
сдвиг
1.0100 сложение
+
1100
0.0000 сдвиг
- 0.01100
000
вычитание
1.0100 сдвиг
0.1000
+ сложение
1100
1.0100 и так далее
Íà÷àëî
äà íåò
a0= b0
s:= 0 s:= 1
A, B - делимое и делитель со знаками,
a0:= 0
b0:= 0
C - остаток,
C:= A-B D - текущее значение частного,
0
ñ0
1
s - переменная, в которой хранится знак
OV:= 0 OV:= 1
n:= 16
частного: s := a0 ⊕ b0 .
A:= C OV - признак переполнения,
A:= L1(A)
0 ñ0 1
n - разрядность операндов.
D[15]:= 1 D[15]:= 0 В конце операции результат перемещается
C:= A-B C:= A+B
в C (традиция!) и в его знаковый разряд
D:= L1(D)
n:= n-1
записывается значение знака частного:
íåò
n=0 c0 := s.
äà
C:= D
c0:= s
Êîíåö
N = m · qp , (9)
3
Для прямых кодов числа.
() Арифметические основы ЭВМ 2015 год 103 / 148
Алгебраическое сложение
Âûðàâíèâàíèå ïîðÿäêîâ
Àëãåáðàè÷åñêîå
ñëîæåíèå/âû÷èòàíèå
Ôîðìèðóåòñÿ
ìàíòèññ
mc è OVm
êàê ÷èñåë ÔÇ
Óñòðàíåíèå ïåðåïîëíåíèÿ
Íîðìàëèçàöèÿ ðåçóëüòàòà
ìàíòèññ
Êîíåö
Введём обозначения:
A = mA · q pA ; B = mB · q pB ; C = mC · q pC ; D = mD · q pD .
C = A × B = (mA × mB ) · q pA +pB ; mC = mA × mB ; pC = pA + pB .
A mA pA −pB mA
D= = ·q ; mD = ; pD = pA − pB .
B mB mB
Таким образом, умножение или деление чисел с плавающей запятой
сводится к паре операций над числами с фиксированной запятой.
h = p + 127
log2 10 ≈ 3, 32 (10)
Введём обозначения:
a, b – десятичные цифры операндов,
c – десятичная цифра результата,
p – входной перенос/заём,
q – выходной десятичный перенос/заём.
Выделим три случая формирования суммы в тетраде (десятичной
цифре):
Случай 1◦ a + b + p < 10 – имеем истинное значение и q = 0;
Случай 2◦ 9 < a + b + p < 16 – перенос не формируется,
необходима коррекция! c := c+6 > 15 Возникающий при
коррекции перенос «уносит» из тетрады 16, вес q – 10 и 6 –
компенсирует коррекцию.
Случай 3◦ a + b + p > 15 – перенос «уносит» из тетрады 16, а
надо – 10. Необходима коррекция: c := c+6
() Арифметические основы ЭВМ 2015 год 119 / 148
Сложение в коде «8421»
Выходной Добавить
Операция перенос/ константу
заём
да 0011
Сложение
нет 1101
да 1101
Вычитание
нет 0011
4
Иногда говорят, что «A сравнимо с α по модулю p».
() Арифметические основы ЭВМ 2015 год 133 / 148
Представления чисел в СОК
A = (α1 , α2 , . . . , αn ), (13)
где αi ≡ A (mod pi ).
Обозначим произведение
n
Y
pi = p1 · p2 · . . . · pn = P (14)
i=1
Покажем, что
γi ≡ (αi + βi ) (mod pi ),
δi ≡ (αi · βi ) (mod pi ),
при этом в качестве цифры результата берется наименьший остаток.
αi + βi
γi = αi + βi − · pi , (15)
pi
αi · βi
δi = αi · βi − · pi . (16)
pi
p1 = 3, p2 = 5, p3 = 7 13 = (1, 3, 6)
55 = (1, 0, 6) 55 = (1, 0, 6)
17 = (2, 2, 3) + +
+ 17 = (2, 2, 3) 63 = (0, 3, 0)
63 = (0, 3, 0) +
11 = (2, 1, 4) 118 ⇐ (1, 3, 6)
80 ⇐ (2, 0, 3)
83 ⇐ (2, 3, 6) 118 ≡ 13 = 118 − P
p1 = 3, p2 = 5, p3 = 7
A−B
λi = αi − βi − · pi (17)
pi
λi = (αi − βi ) (mod pi ),
i = 1, 2, . . . , n
p1 = 3, p2 = 5, p3 = 7
(N1 + N2 )0 = (N1 + N2 ) + P,
откуда
(N1 + N2 )0 = (N1 + N2 ) − P
или, что то же
(N1 + N2 )0 = (N1 + N2 ) + P, (18)
так как P = (1, 0, 0, . . . , 0), поэтому прибавление или вычитание этого числа
к любому N в СОК изменит только первую цифру N, причем одинаковым
образом. Действительно,
p1 = 2, p2 = 3, p3 = 5, p4 = 7; P = p2 p3 p4 = 3 · 5 · 7 = 105.