Реклама:

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

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

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

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

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

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

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

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

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

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

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

♦ слово 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

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

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 = 7x Z), 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?

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

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

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

1) А + В+ C + D + E;

2) (А + В) х (С + D) + Е;

3) (AxB) + (CxD) + E;

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

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

1) АВ + С + иАВ С++;

2) АВ-С-иАВС--;

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

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

1) А В+ C + Dx;

2) А В/ CD/+;

3) ABCDE+xx/;

4) ABCDExF/+G-H/x+.

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

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

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

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

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

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

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

16. Пусть имеется команда ассемблера: MOV REG.ADDR

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

LOAD ADDR.REG

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

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

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

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

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

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

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

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

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

if (k==0) ... if (a>b) ... if (k<5) ...

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

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

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

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

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

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

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

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

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

♦ А = 1101 0000 1010 1101; + £ = 1111 1111 0000 1111;

♦ С = 0000 0000 0010 0000.

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

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

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

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

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

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

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

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

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

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

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

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

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

40. Напишите подпрограмму на ассемблере для преобразования целого двоичного числа со знаком в А5СН-код.

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

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

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

Краткое содержание главы5 || Оглавление || Глава 6. Уровень операционной системы