Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тип книга.doc
Скачиваний:
9
Добавлен:
01.03.2025
Размер:
2 Мб
Скачать
☆

Вопросы и задания

  1. Слову в системе с прямым порядком следования байтов присвоено численное значение 3. Предположим, что это слово байт за байтом передается в систему с обратным порядком следования байтов и сохраняется в ней, причем исход­ный байт 0 соответствует целевому байту 0 и т. д. Каким станет численное значение слова в системе с обратным порядком следования байтов?

  2. В Pentium 4 команды могут содержать любое число байтов, даже нечетное. В UltraSPARC III все команды содержат четное число байтов. В чем преиму­щество Pentium 4?

  3. Разработайте расширенный код операций, который позволяет закодировать в 36-разрядной команде следующее:

+ 7 команд с двумя 32-разрядными адресами и номером одного 3-разряд- ного регистра;

+ 500 команд с одним 15-разрядным адресом и номером одного 3-разряд - ного регистра;

+ 50 команд без адресов и регистров.

  1. Пусть в машине поддерживаются 16-разрядные команды и 6-разрядные адреса. Одни команды содержат один адрес, другие — два. Если существует п двухад­ресных команд, то каково максимальное число одноадресных команд?

  2. Можно ли разработать такой расширенный код операций, который позволял бы кодировать в 12-разрядной команде следующее (размер регистра состав­ляет 3 бита):

  • 4 команды с тремя регистрами;

  • 255 команд с одним регистром;

+ 16 команд без регистров.

  1. Пусть имеется одноадресная машина с регистром-сумматором. Вот значения некоторых слов памяти:

  • слово 20 содержит число 40;

+ слово 30 содержит число 50;

+ слово 40 содержит число 60;

+ слово 50 содержит число 70;

Какие значения загрузят в регистр-сумматор перечисленные ниже команды?

LOAD IMMEDIATE 20 LOAD DIRECT 20 LOAD INDIRECT 20 LOAD IMMEDIATE 30 LOAD DIRECT 30 LOAD INDIRECT 30

  1. Для каждого из четырех видов машин — безадресной, одноадресной, двухадрес­ной и трехадресной — напишите программу вычисления следующего выражения:

X = (А + В х C)/(D - Ex F).

В наличии имеются следующие команды:

  • безадресные: PUSH М, POP М, ADD, SUB, MUL, DIV;

  • одноадресные: LOAD M, STORE M, ADD M, SUB M, MUL M, DIV M;

+ двухадресные: MOV (X = 7), ADD (X = X + 7), SUB (X = X - 7),

MUL (I = Ix 7), DIV (X = X/7);

+ трехадресные: MOV (X = 7), ADD (X = 7 + Z), SUB (X = 7 - Z),

MUL (X =7xZ), DIV (X = 7/Z).

Здесь M — это 16-разрядный адрес памяти, а X, 7 и Z — либо 16-разрядные адреса, либо 4-разрядные регистры. Безадресная машина использует стек, од­ноадресная машина — регистр-аккумулятор, а оставшиеся две имеют 16 реги­стров и команды, которые оперируют всеми комбинациями ячеек памяти и регистров. Команда SUB X,Y вычитает 7 из X, а команда SUB X,Y,Z вычитает Z из 7 и помещает результат в X. Если длина кодов операций равна 8 бит, а раз­меры команд кратны величине 4 бит, сколько битов нужно каждой машине для вычисления X?

  1. Придумайте такой механизм адресации, который позволяет определять в 6-раз- рядном поле произвольный набор из 64 адресов, не обязательно смежных.

  2. В чем недостаток самомодифицирующихся программ, о котором не было упо­мянуто в тексте этой главы?

  3. Переделайте следующие формулы из инфиксной записи в обратную поль­скую запись:

\) А + В+ C + D + E]

  1. (А + В) х (С + D) + Е;

  2. (А х В) + (С х £>) + £;

  3. (А - В) х (((С - D х E)/F)/G) х Я.

И. Какие из следующих пар формул в обратной польской записи математически эквивалентны?

  1. А В + С + и А В С + +;

  2. АВ-С-иАВС--;

  3. АВхС+иАВС + х.

  1. Переделайте следующие формулы из обратной польской записи в инфикс­ную запись:

  1. АВ + C + Dx;

  2. А В / С D / +;

  3. ABCDE+xx/;

  4. А В CDExF / + G - Н / х +.

  1. Напишите три формулы в обратной польской записи, которые нельзя переде­лать в инфиксную запись.

  2. Переделайте следующие инфиксные логические формулы в обратную поль­скую запись:

  1. (А И В) ИЛИ С]

  2. (А ИЛИ В) И (А ИЛИ С);

  3. (А И В) ИЛИ (С И D).

  1. Переделайте следующую инфиксную формулу в обратную польскую запись и напишите IJVM-код, чтобы ее выполнить:

(5x2 + 7)- (4/2 + 1)

  1. Пусть имеется команда ассемблера:

MOV REG,ADDR

Это — команда Pentium 4 для загрузки регистра из памяти, а в UltraSPARC III для загрузки регистра из памяти нужно написать:

LOAD ADDR.REG

Почему порядок записи операндов разный?

  1. Сколько регистров в машине, форматы команд которой представлены на рис. 5.17?

  2. В форматах команд на рис. 5.17 бит 23 позволяет различать варианты 1 и 2 фор­мата. Однако для определения варианта 3 формата никакого специального бита не предусмотрено. Как аппаратное обеспечение узнает, что нужен вариант 3?

  3. Обычно программа определяет местонахождение переменной X в пределах интервала от А до В. Если бы имелась трехадресная команда с операндами А, В и X, сколько битов кода условия было бы установлено этой командой?

  4. Pentium 4 содержит бит кода условий, состояние которого зависит от перено­са бита 3 после выполнения арифметической операции. Зачем это нужно?

  5. В UltraSPARC III нет такой команды, которая загружает в регистр 32-разряд­ное число. Вместо нее обычно используется последовательность из двух ко­манд: SETHI и ADD. Существуют ли еще какие-нибудь способы загрузки 32-раз­рядного числа в регистр? Аргументируйте.

  6. Один из ваших друзей стучится к вам в комнату в 3 часа ночи и радостно со­общает, что у него появилась замечательная идея — создать команду с двумя кодами операций. Что вы сделаете в этой ситуации: отправите своего друга получать патент или пошлете его (думать дальше)?

  7. В процессоре 8051 не предусмотрены команды смещения более чем на 8 бит. Значит ли это, что адресация памяти в диапазоне выше 255 невозможна? Ес­ли возможна, объясните, как она осуществляется.

  8. В программировании очень распространены следующие формы проверки:

if (к—0) ... if (a>b) ... if (к<5) ...

Предложите команду, которая будет эффективно проверять эти условия. Ка­кие поля будут в вашей команде?

  1. Покажите, каким будет 16-разрядное двоичное число 1001 0101 1100 ООН после:

  1. сдвига вправо на 4 бита с заполнением нулями;

  2. сдвига вправо на 4 бита с расширением по знаку;

  3. сдвига влево на 4 бита;

  4. циклического сдвига влево на 4 бита;

  5. циклического сдвига вправо на 4 бита.

  1. Как в машине, в которой нет команды CLR, очистить слово памяти?

  2. Вычислите логическое выражение (А И В) ИЛИ С для:

  • А = 1101 0000 1010 1101;

+ £ = 1111 1111 0000 1111;

  • С = 0000 0000 0010 0000.

  1. Придумайте, как поменять местами две переменные, А и В, не использовав при этом третьей переменной или регистра. Подсказка: подумайте о команде ИСКЛЮЧАЮЩЕЕ ИЛИ.

  2. На некоем компьютере можно перемещать число из одного регистра в другой, сдвигать каждый из них влево на разное количество байтов и складывать по­лученные результаты быстрее, чем при умножении. При каком условии эта последовательность команд будет полезна для вычисления произведения «константа х переменная»?

  3. Разные машины имеют разную плотность команд (то есть разное число бай­тов, которое требуется для выполнения определенного вычисления). Транс­лируйте следующие три фрагмента Java-nporpaMMbi на ассемблер Pentium 4, UltraSPARC III и IJVM. Затем подсчитайте, сколько байтов требуется для выполнения каждого выражения для каждой машины. Предполагается, что i и j — это локальные переменные в памяти. В остальном отталкивайтесь от наиболее оптимистичных допущений.

i =3; i = j: i = j - 1:

  1. В этой главе рассматривались команды для циклов for. Разработайте команду для циклов while.

  2. Предположим, что ханойские монахи могут перемещать один диск за 1 мину­ту (они не торопятся закончить работу, поскольку в Ханое очень мало вакан­сий для людей с подобными навыками). Сколько времени им потребуется, чтобы решить задачу (то есть переместить все 64 диска)? Ответ дайте в годах.

  3. Почему устройства ввода-вывода помещают вектор прерывания на шину? Разве нельзя вместо этого сохранить соответствующую информацию в табли­це в памяти?

  4. Компьютер для считывания информации с диска использует канал прямого доступа к памяти. Диск содержит 64 сектора по 512 байт на дорожке. Время оборота диска составляет 16 мс. Ширина шины — 16 бит. Каждая передача шины занимает 500 не. В среднем для одной команды процессора требуется два цикла шины. Насколько скорость работы процессора замедляется из-за прямого доступа к памяти?

  5. Почему программам обработки прерываний приписываются определенные приоритеты, а обычные процедуры приоритетов не имеют?

  6. Архитектура IA-64 предусматривает необычайно большое число регистров (64). Связано ли это с предикацией? Если да, то каким образом? Если нет, то зачем тогда их так много?

  7. В этой главе обсуждалось понятие спекулятивной загрузки. Но о командах спекулятивного сохранения мы не упоминали. Почему? Может быть, они просто аналогичны командам спекулятивной загрузки? Или существует ка­кая-то другая причина, по которой мы не стали о них говорить?

  8. Когда нужно связать две локальные сети, между ними помещается мост, со­единенный с обеими сетями. Каждый передаваемый какой-либо сетью пакет вызывает прерывание на мосту, чтобы мост мог определить, нужно ли этот пакет пересылать. Предположим, что на обработку прерывания и проверку пакета требуется 250 мке, но пересылка этого пакета в случае необходимости совершается путем прямого доступа к памяти, поэтому центральный процес­сор от этой работы освобожден. Если размер всех пакетов равен 1 Кбайт, ка­кова максимальная скорость передачи данных на каждой из сетей?

  9. На рис. 5.25 указатель фрейма указывает на первую локальную переменную. Какая информация нужна программе, чтобы выйти из процедуры и вернуться в исходное состояние?

  10. Напишите подпрограмму на ассемблере для преобразования целого двоично­го числа со знаком в ASCII-код.

  11. Напишите подпрограмму на ассемблере для преобразования инфиксной фор­мулы в обратную польскую запись.

  12. Процедура для решения задачи «Ханойская башня» — не единственная ре­курсивная процедура, любимая многими компьютерщиками. Есть еще одна очень популярная рекурсивная процедура п\, где п\ = п(п - 1)!, которая под­чиняется ограничивающему условию 0! = 1. Напишите на вашем любимом ас­семблере процедуру для вычисления п\.

  13. Если вы не прочь пошевелить мозгами в свободное время, попробуйте напи­сать программу для решения задачи «Ханойская башня» без рекурсии, а пу­тем поддержания стека в массиве. (Имейте в виду, что решения вы по всей вероятности найти не сможете.)