Задание 2 Вычитание чисел с фиксированной запятой
Вычитание целых знаковых и беззнаковых чисел в байтном формате.
Выполняются те же пункты, что и в задании 2, касательно вычитания, но в пунктах 2 и 3 переполнение имеет место при разных знаках операндов.
Пример выполнения задания
Операция двоичного вычитания реализуется поразрядно, начиная с младших разрядов с учетом возникающих межразрядных заемов.
В каждом разряде вычитание реализуется в соответствии со следующей таблицей:
-
ai – значение разряда уменьшаемого,
bi – значение разряда вычитаемого,
zi-1 – был ли заем из i-го разряда в i-1 предыдущий разряд,
r i – разность i-го разряда,
zi – заем из предыдущего i+1 разряда в i-й разряд.
1. А = 67, В = 51
ai
bi
zi-1
ri
zi
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
1
0
1
1
1
0
0
0
1
А = (67)10 = (1000011)2
В = (51)10 = (110011)2
1) А > 0, B > 0
ЗИ БзИ
АПК= _ 0.1 0 0 0 0 1 1 _+67 _ 67
ВПК= 0.0 1 1 0 0 1 1 +51 51
СПК= 0.0 0 1 0 0 0 0 +16 16
CF = 0; SF = 0; ZF = 0; AF = 0; PF = 0; OF = 0.
2) А < 0, В > 0
ЗИ БзИ
АДК= _ 1.0 1 1 1 1 0 1 _- 67 _189
ВПК= 0.0 1 1 0 0 1 1 +51 51
СДК= 1.0 0 0 1 0 1 0 138
СПК= 1.1 1 1 0 1 1 0 - 118
CF = 0; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 0.
3) А > 0, B < 0
ЗИ БзИ
АПК= _ 0. 1 0 0 0 0 1 1 _+67 _ 67
ВДК= 1. 1 0 0 1 1 0 1 - 51 205
СПК= 0. 1 1 1 0 1 1 0 +118 118 ?
CF = 1; SF = 0; ZF = 0; AF = 1; PF = 0; OF = 0.
Для БзИ результат неверен вследствие возникающего заема из разряда за пределами формата.
4) А < 0, B < 0
ЗИ БзИ
АДК= _ 1.0 1 1 1 1 0 1 _ - 67 _ 189
ВДК= 1.1 0 0 1 1 0 1 - 51 205
СДК= 1.1 1 1 0 0 0 0 240 ?
СПК= 1.0 0 1 0 0 0 0 -16
CF = 1; SF = 1; ZF = 0; AF = 0; PF = 1; OF = 0.
Для БзИ результат неверен вследствие возникающего заема из разряда за пределами формата.
2. Правило для подбора выглядит следующим образом:
А + В > 128, значит 128 – А < В < 127
А = 67 (неизменно), В = 64 (подбираем)
1) А < 0, В > 0
ЗИ БзИ
АДК= _ 1.0 1 1 1 1 0 1 _ - 67 _ 189
ВПК= 0.1 0 0 0 0 0 0 +64 64
СПК= 0.1 1 1 1 1 0 1 -125? 125
CF = 0; SF = 0; ZF = 0; AF = 0; PF = 1; OF = 1.
Для знакового вычитания результат некорректен вследствие переполнения, о котором можно судить по одному из двух признаков:
-
при разных знаках операндов знак результата отличается от знака первого операнда;
-
несовпадение заемов в два старшие разряда (один из них присутствует, а другой нет).
2) А > 0, В < 0
ЗИ БзИ
АПК= _ 0.1 0 0 0 0 1 1 _ +67 _ 67
ВДК= 1.1 0 0 0 0 0 0 - 64 192
СДК= 1.0 0 0 0 0 1 1 131 ?
СПК= 1.1 1 1 1 1 0 1 -125?
CF = 1; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 1.
Для ЗИ результат некорректен вследствие возникающего переполнения, для БзИ результат некорректен из-за возникающего переноса из старшего разряда.
3. Значение числа В фиксируем (В = 51), а значение А подбираем согласно формуле А + В = 128, благодаря которой при сложении положительных чисел будет фиксироваться переполнение, а при сложении отрицательных этого не будет. Тогда А = 77.
1) А > 0, B < 0
ЗИ БзИ
АПК =_ 0.1 0 0 1 1 0 1 _+77 _ 77
ВДК = 1.1 0 0 1 1 0 1 - 51 205
СДК = 1.0 0 0 0 0 0 0 128?
СПК = 1.0 0 0 0 0 0 0 - 128?
CF = 1; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 1.
Результат БзИ некорректен вследствие возникающего заема из разряда за пределами формата, для ЗИ результат некорректен из-за переполнения.
2) А < 0, B > 0
ЗИ БзИ
АДК _ 1.0 1 1 0 0 1 1 _ -77 _ 179
ВПК 0.0 1 1 0 0 1 1 +51 51
СДК 1.0 0 0 0 0 0 0 128
СПК 1.0 0 0 0 0 0 0 - 128
CF = 0; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 0.
Результаты ЗИ и БзИ корректны.