Представление чисел с фиксированной точкой. Прямой, обратный и дополнительный код. Формирование битовых признаков переноса, переполнения, отрицательного результата, нуля
Представление чисел с фиксированной точкой
В вычислительной технике числа с фиксированной точкой (запятой) — это формат представления, при котором позиция запятой строго зафиксирована в определенном месте разрядной сетки. В БЭВМ (и большинстве современных архитектур при работе с целыми числами) запятая фиксируется после младшего разряда. Таким образом, представляются только целые числа, а дробная часть отсутствует.
Разрядная сетка слова жестко ограничивает область допустимых значений (ОДЗ). Для 16-разрядного беззнакового слова ОДЗ составляет от 0 до 65535 ().
Прямой, обратный и дополнительный код
Для представления знаковых целых чисел старший (левый) бит отводится под знак: 0 — положительное число, 1 — отрицательное.
-
Прямой код Для положительных чисел прямой код совпадает с беззнаковым представлением. Для отрицательных чисел старший бит устанавливается в
1, а остальные биты содержат модуль числа. Пример (8 бит):+5=0000 0101,-5=1000 0101. Недостатками являются наличие двух нулей («+0» и «-0») и необходимость усложнения АЛУ (требуются разные алгоритмы для сложения чисел с разными знаками). -
Обратный код Для положительных чисел совпадает с прямым. Для отрицательных чисел: знаковый бит равен
1, а все значащие биты инвертируются (нули заменяются на единицы, а единицы — на нули). Пример (8 бит):-5=1111 1010. -
Дополнительный код Является стандартом для современных ЭВМ. Положительные числа совпадают с прямым кодом. Отрицательные числа получаются путем инвертирования прямого кода модуля числа (получение обратного кода) и прибавления 1 к младшему разряду. Пример (8 бит):
-5= Обратный код (1111 1010) +1=1111 1011. Преимуществами являются единственный нуль (0000 0000) и то, что операция вычитания заменяется обычным сложением (АЛУ нужно уметь только складывать).
Формирование битовых признаков (флагов NZVC)
При выполнении арифметических и логических операций специальный блок формирует биты (флаги), которые сохраняются в регистре состояния (PS) и используются для команд условного ветвления.
-
C (Carry — Перенос) Фиксирует перенос единицы из старшего разряда за пределы разрядной сетки при сложении, либо заем из-за пределов сетки при вычитании. Является индикатором выхода за границы разрядной сетки при операциях с беззнаковыми числами.

-
V (Overflow — Переполнение) Фиксирует перенос единицы в знаковый разряд числа при сложении, либо заем из этого разряда при вычитании. Является индикатором выхода за границы разрядной сетки при работе со знаковыми числами в дополнительном коде (возникает, когда складываются два числа с одинаковыми знаками, а результат получает противоположный знак). Логически вычисляется как строгая дизъюнкция (XOR) переноса в старший знаковый разряд и переноса из него.
-
N (Negative — Отрицательный результат) Фиксирует наличие единицы в старшем (знаковом) бите результата. Устанавливается в
1, если полученный результат является отрицательным числом в контексте знакового представления. -
Z (Zero — Нуль) Фиксирует нулевой результат операции (все разряды равны нулю). Вычисляется аппаратно с помощью логической операции «ИЛИ-НЕ» (NOR), примененной ко всем битам результата. Если хоть один бит равен
1, флагZсбрасывается в0.