Вопрос 2
Представление чисел с фиксированной точкой. Прямой, обратный и дополнительный код. Формирование битовых признаков переноса, переполнения, отрицательного результата, нуля
Представление чисел с фиксированной точкой
В вычислительной технике числа с фиксированной точкой (запятой) — это формат представления, при котором позиция запятой строго зафиксирована в определенном месте разрядной сетки. В БЭВМ (и большинстве современных архитектур при работе с целыми числами) запятая фиксируется после младшего разряда. Таким образом, представляются только целые числа, а дробная часть отсутствует.
Разрядная сетка слова жестко ограничивает область допустимых значений (ОДЗ). Для 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.
Вопрос 40
В качестве источников для этого вопроса использовалась синяя библия (стр. 189-192).
Организация прямого доступа к памяти. Контроллер ПДП
Что такое ПДП и зачем он нужен
Прямой доступ к памяти (ПДП / DMA - Direct Memory Access) — это аппаратный режим обмена данными, при котором внешнее устройство (ВУ) читает или пишет информацию в оперативную память напрямую, без какого-либо участия центрального процессора.
Этот режим критически необходим по двум причинам:
- Высокая скорость ВУ: Современные накопители (в книге приводятся в пример жесткие магнитные диски) передают данные с такой огромной скоростью, что процессор физически не успевал бы обрабатывать каждый байт в программно-управляемом режиме (цикл программы просто дольше, чем время прихода нового байта).
- Разгрузка процессора: Процессор освобождается от рутинного перекладывания байтов из порта в память и может заниматься полезными вычислениями.
Управляет этим процессом специализированная микросхема — Контроллер ПДП.
Режимы разделения системной шины
Поскольку процессор и контроллер ПДП “сидят” на одной и той же системной шине (адреса, данных и управления), они не могут пользоваться ею одновременно. Контроллер ПДП должен отбирать шину у процессора. Есть два основных способа:
- ПДП с блокировкой процессора (Блочный обмен) Контроллер запрашивает доступ, процессор отключается от шины, и контроллер ПДП “монополизирует” её на всё время передачи целого блока данных (сотен или тысяч байт). Процессор в это время полностью простаивает.
- ПДП с «захватом цикла» (Cycle Stealing) Самый распространенный и эффективный способ. Контроллер ПДП принудительно отключает процессор от шины (переводя его выходы в состояние высокого напряжения) только на время передачи одного байта или слова. Процессор “замирает” буквально на один такт, пропускает байт ПДП в память, а затем сразу продолжает свою работу, пока ВУ готовит следующий байт.
Контроллер ПДП приёма данных из ВУ на примере захвата цикла
В контроллере ПДП обязательно присутствуют минимум два аппаратных узла:
- Счетчик байтов: хранит размер передаваемого блока.
- Регистр адреса (AR): хранит текущий адрес ОЗУ, куда нужно записать (или откуда считать) данные.
Порядок обмена:
- Инициализация (Подготовка): Программная часть. Процессор с помощью обычных команд вывода записывает в контроллер ПДП начальный адрес памяти и количество байт (размер блока). После этого процессор уходит выполнять свои задачи.
- Запрос от ВУ: Внешнее устройство передает байт в регистр данных контроллера ПДП.
- Захват шины: Логика контроллера генерирует на системную шину аппаратный сигнал ТПДП («Требование прямого доступа к памяти»). Процессор доделывает текущую микрооперацию, отключается от шин и в ответ выдает сигнал ППДП («Предоставление ПДП»).
- Передача данных: Получив контроль, контроллер ПДП выставляет свой Регистр адреса на шину адреса, выставляет данные на шину данных и дёргает линию «Запись» (или «Чтение») памяти. Байт улетает напрямую в ОЗУ.
- Аппаратное обновление: В самом контроллере аппаратно (без процессора) Регистр адреса увеличивается на
+1, а Счетчик байтов уменьшается на-1.- Освобождение: Контроллер снимает сигнал ТПДП, возвращая управление шиной процессору.
- Конец блока: Шаги 2–6 повторяются для каждого байта, пока Счетчик байтов не станет равен
0. Когда это происходит, контроллер ПДП генерирует обычное прерывание, сообщая процессору: “Блок успешно загружен в память”.
Рис. 1: Схема работы контроллера ПДП в режиме захвата цикла
Ссылка на оригиналЛогика работы вентилей «И», «И1» и «И2» на схеме контроллера ПДП
Эти элементы аппаратно координируют действия автомата контроллера ПДП [рис. 8.16]:
- «И1» (Запрос): Объединяет сигнал готовности ВУ («Ввод данных») и внутренний статус активности. Если ВУ прислало байт, а счётчик не равен нулю, выдаёт на шину сигнал «Требование ПДП».
- «И2» (Исполнение): Срабатывает только тогда, когда процессор дал доступ («Предоставление ПДП») И контроллер готов. Этот импульс одновременно:
- открывает приёмопередатчики для выгрузки данных на шину («Чтение РД»)
- увеличивает адрес в РА на
+1- уменьшает счётчик на
-1.- «И» в самом низу (Детектор нуля): Постоянно следит за битами счётчика байтов. Как только все биты обнуляются (блок данных передан полностью), элемент И срабатывает через инверсию, прекращая генерацию требований ПДП и сигнализируя процессору о завершении обмена.

