Сложение целых чисел
Регистр флагов
Арифметические флаги формируются арифметическими командами и являются признаками их результата.
Флаги управления оказывают влияние на процесс выполнения программ.
К арифметическим флагам относятся:
•(CF) Carry Flag –флаг переноса, в нем фиксируется перенос из старшего разряда при сложении и заем в старший разряд при вычитании. При умножении CF показывает возможность (=0) и невозможность (=1) представления произведения в том же формате, что и операндов.
• (PF) Parity Flag– флаг паритета (четности). Устанавливается в единицу при наличии четного числа единиц в младшем байте результата, в противном случае - сбрасывается.. PF используется в качестве аппаратной поддержки контроля по четности.
• (AF) Auxiliary Carry Flag- флаг вспомогательного переноса, в котором фиксируется межтетрадный перенос при сложении и межтетрадный заем при вычитании. Этот флаг используется командами десятичной арифметики.
•(ZF) Zero Flag – флаг нуля, устанавливается при нулевом значении результата, в противном случае сбрасывается.
• (SF) Sign Flag –флаг знака, в котором копируется старший разряд результата.
•(OF) Overflow Flagфлаг переполнения. Устанавливается в командах сложения и вычитания, если результат не помещается в формате, при этом и операнды и результат интерпретируются как знаковые числа. Аппаратно он формируется совпадением переносов из двух старших разрядов при сложении и заемов в два старших разряда при вычитании (если они совпадают, то флаг равен нулю).
Задание:
1.Для заданных чисел А и В выполнить операцию знакового сложения со всеми комбинациями знаков операндов. Для каждого примера:
а) проставить межразрядные переносы, возникающие при сложении;
b) дать знаковую интерпретацию операндов и результатов. При получении отрицательного результата предварительно преобразовать его из дополнительного кода в прямой;
c) дать беззнаковую интерпретацию операндов и результатов, при получении неверного результата пояснить причину его возникновения;
d) показать значения арифметических флагов.
2.Cохранив значение первого операнда А, выбрать такое значение В, чтобы в операции сложения с одинаковыми знаками имел место особый случай переполнения формата. Выполнить два примера, иллюстрирующие эти случаи, для каждого из них проделать a,b,c,d.
3. Сохранив операнд В, подавать такое значение операнда А, чтобы при сложении положительных операндов имело место переполнение формата, а при сложении отрицательных операндов результат был бы корректен. Выполнить два примера, иллюстрирующие этот случай. Для каждого из них проделать a,b,c,d.
Операции двоичного сложения реализуются поразрядно, начиная с младшего разряда, с учетом возникающих межразрядных переносов.
ai | bi | Pi-1 | Si | Pi |
Pi-1 – перенос из предыдущего разряда;
Pi – перенос из i-го разряда;
Si – сумма i-го разряда.
1.А = 57, В = 49.
А>0, B>0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Апр. | 57 | 57 | ||||||||||
Bпр. | ||||||||||||
Спр. |
CF=0 | ZF=0 | |
PF=1 | SF=0 | |
AF=0 | OF=0 |
А>0, B<0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Апр. | 57 | 57 | ||||||||||
Bдоп. | -49 | |||||||||||
Спр. |
CF=1 | ZF=0 | |
PF=0 | SF=0 | |
AF=1 | OF=0 |
А<0, B>0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Адоп. | -57 | 199 | ||||||||||
Bпр. | ||||||||||||
Сдоп. | -8 | |||||||||||
Спр. |
CF=0 | ZF=0 | |
PF=0 | SF=1 | |
AF=0 | OF=0 |
А<0, B<0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Адоп. | -57 | 199 | ||||||||||
Bдоп. | -49 | |||||||||||
Сдоп. | -106 | |||||||||||
Спр. |
CF=1 | ZF=0 | |
PF=1 | SF=1 | |
AF=1 | OF=0 |
2.А = 57,
А + В>128
127>B>128-A
Пусть В = 96.
А
В 7 0
А>0, B>0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Апр. | 57 | 57 | ||||||||||
Bпр. | ||||||||||||
Сдоп. | -103 | |||||||||||
Спр. |
CF=0 | ZF=0 | |
PF=1 | SF=1 | |
AF=0 | OF=1 |
А<0, B<0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Адоп. | -57 | 199 | ||||||||||
Bдоп. | -96 | |||||||||||
Спр. |
CF=1 | ZF=0 | |
PF=0 | SF=0 | |
AF=0 | OF=1 |
3.В = 49,
А + В = 128,
Пусть А = 79.
А
В
А>0, B>0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Апр. | 79 | 79 | ||||||||||
Bпр. | ||||||||||||
Сдоп. | -128 | |||||||||||
Спр. |
CF=0 | ZF=0 | |
PF=0 | SF=1 | |
AF=1 | OF=1 |
А<0, B<0. | Интерпретации | |||||||||||
Знаковая | Беззнаковая | |||||||||||
Адоп. | -79 | 177 | ||||||||||
Bдоп. | -49 | |||||||||||
Сдоп. | -128 | |||||||||||
Спр. |
CF=1 | ZF=0 | |
PF=0 | SF=1 | |
AF=1 | OF=0 |
Переполнение при сложении чисел возникает только в том случае, если операнды имеют одинаковые знаки. Переполнение фиксируется тремя способами:
• сравнение знаков операндов и суммы: если знак суммы отличается от знаков операндов, то фиксируется переполнение;
• сравнение переносов из двух старших разрядов: если они не совпадают, то фиксируется переполнение;
• использование модифицированного знака (под знак отводится два разряда, второй разряд дублирует знак).