Слайд 1 из 15

Арифметические действия. Логические операции. Единицы количества информации. Коды чисел

Единицы количества информации: бит и байт

В физических цепях ЭВМ информация передаётся дискретными электрическими потенциалами.

Суть: Единицы информации измеряют емкость физических ячеек и линий связи, но не определяют их смысл.

Емкость ячейки памяти vs Смысл данных

Один и тот же байт 11111111 в ячейке памяти процессора может интерпретироваться совершенно по-разному:

Unsigned uint8

Беззнаковое число: $255_{10}$. Все 8 разрядов отвечают за величину числа.

Signed int8

Знаковое число в доп. коде: $-1_{10}$. Старший бит 1 означает отрицательный знак.

Символ (ASCII / CP1251)

В кодовой таблице Windows-1251 код 0xFF соответствует букве «я».

Вывод: Процессор выполняет операции согласно коду команды, наделяя биты смыслом.

Формы представления целых чисел в ЭВМ

Для представления чисел со знаком в регистрах процессора старший бит (MSB) резервируется под знак: 0 — положительное число, 1 — отрицательное число.

Алгоритм построения дополнительного кода

Пошаговый разбор для числа $-43_{10}$ в 8-разрядной сетке:

  1. Модуль $|-43| = 43_{10} = 32 + 8 + 2 + 1 = 00101011_2$.
  2. Прямой код: 10101011 (знаковый бит 1).
  3. Обратный код (инверсия модуля): 11010100.
  4. Дополнительный код (обратный код + 1):
        11010100
      + 00000001
      ----------
        11010101  (дополнительный код числа -43)
              

Отрицательный вес старшего бита: $-128 + 64 + 16 + 4 + 1 = -43_{10}$.

Замена вычитания сложением на сумматоре

Главное достоинство дополнительного кода: $A - B = A + [-B]_{доп}$. АЛУ не требует отдельной схемы вычитателя!

Пример: 58 - 43 (или 58 + (-43)) в 8-разрядном сумматоре:

         1 1 1 1   1        (поразрядные переносы)
         0 0 1 1 1 0 1 0    (+58)
       + 1 1 0 1 0 1 0 1    (-43 в доп. коде)
       -----------------
       1 0 0 0 0 1 1 1 1    (перенос 1 за пределы 8 бит отбрасывается)

В 8-битном регистре: 00001111 = 15 (десятичная проверка: 58 - 43 = 15).
      

Флаги состояния процессора: CF, OF, ZF, SF

После каждого арифметического действия в регистре флагов (FLAGS) фиксируются признаки:

Контрпример: аппаратное знаковое переполнение (OF)

Что произойдёт, если сложить два положительных числа $95_{10} + 65_{10}$ в 8-битном знаковом формате?

         0 1 0 1 1 1 1 1   (+95)
       + 0 1 0 0 0 0 0 1   (+65)
       -----------------
         1 0 1 0 0 0 0 0   (-96 в знаковом int8 ?!)
      

Причина парадокса: $95 + 65 = 160$, что превышает максимальный лимит $+127$. Единица переноса попала в знаковый бит.

Аппаратная фиксация: $OF = C_6 \oplus C_7 = 1 \oplus 0 = 1$. Процессор выставил флаг знакового переполнения!

Поразрядные операции: AND и OR

Выполняются над каждым битом параллельно и независимо (без переносов):

AND (Конъюнкция / Маскирование)

Сброс битов в 0. Умножение на 0 обнуляет разряд, на 1 сохраняет значение.

  11011010
& 00001111  (маска)
----------
  00001010

OR (Дизъюнкция / Установка)

Принудительная установка битов в 1 без изменения остальных разрядов.

  11011010
| 00100001  (маска)
----------
  11111011

Поразрядные операции: XOR и NOT

Инверсия состояний и управление битовыми триггерами:

XOR (Исключающее ИЛИ)

Инвертирует биты там, где в маске стоит 1. Используется для обнуления регистров: XOR EAX, EAX быстрее записи нуля!

  11011010
^ 00000110  (маска)
----------
  11011100

NOT (Побитовая инверсия)

Унарная операция: переворачивает все разряды на противоположные ($0 \to 1, 1 \to 0$). Базовый этап построения обратного кода.

~ 00101011
----------
  11010100

Экспресс-задание 1: Двоичная арифметика

Выполните сложение в тетради / на рабочем бланке:

   1 0 1 1 0 1 1 0   (182_10)
 + 0 1 1 0 1 1 0 1   (109_10)
 -----------------
 ? ? ? ? ? ? ? ? ?
      

Экспресс-задание 2: Битовые маски

В регистре состояния порта периферии находится байт 10101100.

  1. Какую маску и операцию применить, чтобы обнулить младшие 4 бита?
  2. Какую маску и операцию применить, чтобы включить бит 7 (старший) и бит 0 (младший)?
  3. Какую маску и операцию применить, чтобы переключить (инвертировать) бит 3?

Подсказка: используйте AND для сброса, OR для установки, XOR для переключения.

Экспресс-задание 3: Дополнительный код

Для отрицательного числа $-27_{10}$ в 8-разрядной сетке:

  1. Запишите модуль числа ($27_{10}$) в двоичной системе.
  2. Составьте обратный код.
  3. Прибавьте 1 и получите дополнительный код.
  4. Проверьте отрицательный вес: $-128 + \text{сумма остальных битов}$.

Архитектурные инварианты занятия

Двоичная логика в жизни

Мем: There are 10 types of people in the world: those who understand binary, and those who do not

Атрибуция: Мем «Mathjoke (10 types of people in the world)». Автор: MjolnirPants (Wikimedia Commons). Источник: Wikimedia Commons (File:Mathjoke.jpg). Лицензия: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0). Изменения: оптимизировано разрешение и конвертировано в офлайн Data URI без изменения содержания.