Э. Таненбаум - Архитектура компьютера (1127755), страница 118
Текст из файла (страница 118)
472 Глава б. Уровень архитектуры набора команд 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Переделайте следующие формулы из обратной польской записи в инфиксную запись: 1) АВ+ С+Рх; 2) АВ/ СР/;-; 3) АВ СРЕ+хх/; 4) АВ СРЕхЕ/е 6 — Н/хе, Напишите три формулы в обратной польской записи, которые нельзя переделать в инфиксную запись. Переделайте следующие инфиксные логические формулы в обратную польскую запись: 1) (А И В) ИЛИ С; 2) (А ИЛИ В) И (А ИЛИ С); 3) (А И В) ИЛИ (СИ Р).
Переделайте следующую инфиксную формулу в обратную польскую запись и напишите 11'т'М-код, чтобы ее выполнить: (5 х 2 -е 7) — (4/2 ь 1) Пусть имеется команда ассемблера: НОУ ай,АООй Это — команда Репгипп 4 для загрузки регистра из памяти, а в 1ЛСга5РАКС РП для загрузки регистра из памяти нужно написать: ЕОАО ДООй,йЕО Почему порядок записи операндов разный? Сколько регистров в машине, форматы команд которой представлены на рис.
5.17? В форматах команд на рис. 5.17 бит 23 позволяет различать варианты 1 и 2 формата. Однако для определения варианта 3 формата никакого специального бита не предусмотрено. Как аппаратное обеспечение узнает, что нужен вариант 3? Обычно программа определяет местонахождение переменной Х в пределах интервала от А до В.
Если бы имелась трехадресная команда с операндами А, В и К, сколько битов кода условия было бы установлено этой командой? Репйшп 4 содержит бит кода условий, состояние которого зависит от переноса бита 3 после выполнения арифметической операции. Зачем это нужно? В (ЛСга5РАКС П1 нет такой команды, которая загружает в регистр 32-разрядное число.
Вместо нее обычно используется последовательность из двух команд: 5ЕТН1 и А00. Существуют ли еще какие-нибудь способы загрузки 32-разрядного числа в регистр? Аргументируйте. Один из ваших друзей стучится к вам в комнату в 3 часа ночи и радостно сообщает, что у него появилась замечательная идея — создать команду с двумя кодами операций. Что вы сделаете в этой ситуации: отправите своего друга получать патент или пошлете его (думать дальше)? Вопросы и задания 473 23. В процессоре 8051 не предусмотрены команды смещения более чем на 8 бит Значит ли это, что адресация памяти в диапазоне выше 255 невозможна? Ес- ли возможна, объясните, как она осуществляется.
24. В программировании очень распространены следующие формы проверки: Предложите команду, которая будет эффективно проверять эти условия. Ка- кие поля будут в вашей команде? 25. Покажите, каким будет 16-разрядное двоичное число 1001 0101 1100 0011 после: 1) сдвига вправо на 4 бита с заполнением нулями; 2) сдвига вправо на 4 бита с расширением по знаку; 3) сдвига влево на 4 бита; 4) циклического сдвига влево на 4 бита; 5) циклического сдвига вправо на 4 бита.
26. Как в машине, в которой нет команды С.й, очистить слово памяти? 27. Вычислите логическое выражение (А И В) ИЛИ С для: + А = 1101 0000 1010 1101; + В = 1111 1111 0000 1111; + С = 0000 0000 0010 0000. 28. Придумайте, как поменять местами две переменные, А и В, не использовав прн этом третьей переменной или регистра. Подсказка: подумайте о команде ИСКЛЮЧАЮЩЕЕ ИЛИ.
29. На некоем компьютере можно перемещать число из одного регистра в другой сдвигать каждый из них влево на разное количество байтов и складывать полученные результаты быстрее, чем при умножении. При каком условии эта последовательность команд будет полезна для вычисления произведения «константах переменнаяь? 30. Разные машины имеют разную плотность команд (то есть разное число бай- тов, которое требуется для выполнения определенного вычисления). Транслируйте следующие три фрагмента )ача-программы на ассемблер Реп1шш 4, Шгга5РАКС П1 и 11'г'М. Затем подсчитайте, сколько байтов требуется для выполнения каждого выражения для каждой машины. Предполагается, что 1 и 4 — это локальные переменные в памяти.
В остальном отталкивайтесь от наиболее оптимистичных допущений. 1 -3: 1 1=1-1: 31. В этой главе рассматривались команды для циклов 1ог. Разработайте команду для циклов ип1)е. 32. Предположим, что ханойские монахи могут перемещать один диск за 1 минуту (они не торопятся закончить работу, поскольку в Ханое очень мало вакан- 474 Глава 6. Уровень архитектуры набора команд ЗЗ 34 35. 36.
37 38 39 40 41 42 43 сий для людей с подобными навыками). Сколько времени им потребуется, чтобы решить задачу (то есть переместить все 64 диска)? Ответ дайте в годах. Почему устройства ввода-вывода помещают вектор прерывания на шину? Разве нельзя вместо этого сохранить соответствующую информацию в таблице в памяти? Компьютер для считывания информации с диска использует канал прямого доступа к памяти. Диск содержит 64 сектора по 512 байт на дорожке. Время оборота диска составляет 16 мс. Ширина шины — 16 бит.
Каждая передача шины занимает 500 нс. В среднем для одной команды процессора требуется два цикла шины. Насколько скорость работы процессора замедляется из-за прямого доступа к памяти? Почему программам обработки прерываний приписываются определенные приоритеты, а обычные процедуры приоритетов не имеют? Архитектура 1А-64 предусматривает необычайно болыпое число регистров (64).
Связано ли это с предикацией? Если да, то каким образом? Если нет, то зачем тогда их так много? В этой главе обсуждалось понятие спекулятивной загрузки. Но о командах спекулятивного сохранения мы не упоминали. Почему? Может быть, они просто аналогичны командам спекулятивной загрузки? Или существует какая-то другая причина, по которой мы не стали о них говорить? Когда нужно связать две локальные сети, между ними помещается мост, соединенный с обеими сетями. Каждый передаваемый какой-либо сетью пакет вызывает прерывание на мосту, чтобы мост мог определить, нужно ли этот пакет пересылать. Предположим, что на обработку прерывания и проверку пакета требуется 250 мкс, но пересылка этого пакета в случае необходимости совершается путем прямого доступа к памяти, поэтому центральный процессор от этой работы освобожден.
Если размер всех пакетов равен 1 Кбайт, какова максимальная скорость передачи данных на каждой из сетей? На рис. 5.25 указатель фрейма указывает на первую локальную переменную. Какая информация нужна программе, чтобы выйти из процедуры и вернуться в исходное состояние? Напишите подпрограмму на ассемблере для преобразования целого двоичного числа со знаком в АБСП-код. Напишите подпрограмму на ассемблере для преобразования инфиксной формулы в обратную польскую запись.
Процедура для решения задачи «Ханойская башня» — не единственная рекурсивная процедура, любимая многими компьютерщиками. Есть еще одна очень популярная рекурсивная процедура л1, где и! - л(п — 1)1, которая подчиняется ограничивающему условию 0~ = 1. Напишите на вашем любимом ассемблере процедуру для вычисления п!. Если вы не прочь пошевелить мозгами в свободное время, попробуйте написать программу для решения задачи «Ханойская башня» без рекурсии, а путем поддержания стека в массиве.
(Имейте в виду, что решения вы по всей вероятности найти не сможете.) Глава 6 Уровень операционной системы Как уже отмечалось, современный компьютер организован в виде иерархии уровней, каждый из которых добавляет определенные функции к нижележащему уровню.
Мы рассмотрели цифровой логический уровень, уровень микроархитектуры и уровень архитектуры команд. Настало время перейти к следующему уровню — уровню операционной системы. С точки зрения программиста, операционная система — это программа, добавляющая ряд команд и функций к командам и функциям, предлагаемым уровнем архитектуры команд. Обычно операционная система реализуется программно, но нет никаких веских причин, по которым ее, как микропрограммы, нельзя было бы реализовать аппаратно.
Уровень операционной системы показан на рис. 6.1. Уровень 3 истема Уровень 2 ма ипи еспечение Уровень 1 Рис. 6.1. Положение уровня операционной системы в иерархии Хотя и уровень операционной системы, и уровень архитектуры команд абстрактны (в том смысле, что не являются реальными устройствами), между ними есть важное различие. Все команды уровня операционной системы доступны для прикладных программистов. Это — практически все команды более низкого уровня, а также новые команды, добавленные операционной системой. Новые команды называются системными вызовами. Они вызывают предопределенную службу операционной системы, в частности одну из ее команд. Обычный системный вызов считывает какие-нибудь данные из файла.