Еремин Е.А.
"Популярные лекции об устройстве компьютера"

Ответы на "каверзные" вопросы

В книге после каждой лекции приводятся вопросы для осмысления материала. Некоторые из них очень просты, другие - неоднозначные, поскольку ответ на них зависит от личного опыта читателя. О них здесь речи не будет.

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

Раздел этот будет понемногу пополняться. Любой желающий может помочь мне в этом, написав по адресу e_eremin@yahoo.com. Обещаю публиковать пришедшие ответы с указанием авторства, готов разместить ссылку на ваши странички.

1.5

(стр. 31)

8. В табл. 1.2 среди логических операций ЭВМ "Наири-2" нет инструкции НЕ, зато имеется операция исключающее ИЛИ. Сможете ли вы догадаться, как с помощью последней инструкции можно заменить первую?

Поскольку
0 xor 1 = 1 и 1 xor 1 = 0,
то вместо НЕ достаточно выполнить исключающее ИЛИ с константой из всех единиц.


4.5

(стр. 108)

6. Можно ли считать из памяти один отдельно взятый бит? Какой логической операцией можно выделить необходимый бит считанного кода?

Нет, нельзя, т.к. минимальная адресуемая единица памяти - 1 байт. Для выделения из считанного байта отдельного бита с целью его анализа можно использовать логическую операцию "И" (см. 3.6.4, стр. 86-91)

Альтернативный вариант - использование операции сдвига через бит переноса.

кодбит переноса
010010100
первый
сдвиг
==>
кодбит переноса
001001010
второй
сдвиг
==>
кодбит переноса
000100101

Многие процессоры, например, Z80 или модели Intel начиная с 386, имеют специальные инструкции для выделения и анализа отдельно взятого бита.

9. Что такое "проблема NUXI"? Приведите еще два-три подобных примера изменения слов (кстати, сможете ли вы подобрать такой, чтобы и исходное, и полученное слово были осмысленными?) Как будет проявляться данная проблема, если машина не 16-, а 32-разрядная?

Пока мне удалось найти 3 "осмысленных" перестановки:
ЛУНА - УЛАН (кавалерист)
РАМА - АРАМ (имя - например, Арам Хачатурян)
МЭРИ - ЭМИР (в странах Востока титул правителей)

Вот еще одна новая добавочная перестановка:
НАДО - АНОД (положительный электрод)

Для 32-разрядного случая переставляться будут блоки по 4 буквы, например:
ДИСКОВОД - КСИД ДОВО


8.5

(стр. 236-237)

6. Предположим, компьютер вывел на экран некоторое целое число, которое хранится в ОЗУ. Какие действия при этом потребовалось выполнить? По каким причинам (постарайтесь назвать несколько) в систему команд процессора не входит вывод на экран значения числа?

При этом было выполнено достаточно много действий.

Во-первых, число, хранящееся в памяти в двоичной системе, было переведено в последовательность символов, соответствующих десятичному изображению числа (например, 10000012 в "6" и "5"). Стоит подчеркнуть, что алгоритм преобразования с точки зрения возможного вывода неоднозначен: например, можно перед положительным числом писать "+", а можно заменить его пробелом или вовсе игнорировать; можно дополнять число слева незначащими нулями до стандартной длины, а можно использовать пробелы или взять только значащие цифры. Кроме того, целые числа могут иметь разную длину (например, 2 или 4 байта), что также должна учитывать программа перевода. Кстати, для вещественных чисел ситуация еще сложнее (там, скажем, надо указывать число знаков после запятой!)

Во-вторых, полученная текстовая строка была выведена на экран. Учитывая, что работа с внешними устройствами разных моделей имеет свои особенности, запрограммировать эту процедуру единообразно практически невозможно.

Учитывая сказанное, добавлять к системе команд процессора вывод числа на экран нецелесообразно, как минимум, по следующим соображениям:

По-моему, уже последней причины достаточно, чтобы рассматриваемую задачу "вынести" из процессора и переложить на более гибкое программное обеспечение. Что всегда и делалось на практике!


Последнее обновление - 12 февраля 2005 г.


На главную страницу

(C) Е.А. Еремин, 2003-2005.

Free Web Hosting