Ответы на "каверзные" вопросы
В книге после каждой лекции приводятся вопросы для осмысления материала. Некоторые из них очень просты, другие - неоднозначные, поскольку ответ на них зависит от личного опыта читателя. О них здесь речи не будет.
Но есть и нетривиальные вопросы, которые могут вызвать определенные затруднения у читателей. На этой страничке я хочу привести ответы на некоторые из таких вопросов. Помните: автор книги не последняя инстанция, и мои ответы, конечно же, не идеальны. Но, по крайней мере, они снимают вопрос "А что, собственно, автор имел ввиду?"
Раздел этот будет понемногу пополняться. Любой желающий может помочь мне в этом, написав по адресу e_eremin@yahoo.com. Обещаю публиковать пришедшие ответы с указанием авторства, готов разместить ссылку на ваши странички.
8. В табл. 1.2 среди логических операций ЭВМ "Наири-2" нет инструкции НЕ, зато имеется операция исключающее ИЛИ. Сможете ли вы догадаться, как с помощью последней инструкции можно заменить первую?
Поскольку
0 xor 1 = 1 и 1 xor 1 = 0,
то вместо НЕ достаточно выполнить исключающее ИЛИ с константой из всех единиц.
6. Можно ли считать из памяти один отдельно взятый бит? Какой логической операцией можно выделить необходимый бит считанного кода?
Нет, нельзя, т.к. минимальная адресуемая единица памяти - 1 байт. Для выделения из считанного байта отдельного бита с целью его анализа можно использовать логическую операцию "И" (см. 3.6.4, стр. 86-91)
Альтернативный вариант - использование операции сдвига через бит переноса.
| первый сдвиг ==> |
| второй сдвиг ==> |
|
Многие процессоры, например, Z80 или модели Intel начиная с 386, имеют специальные инструкции для выделения и анализа отдельно взятого бита.
9. Что такое "проблема NUXI"? Приведите еще два-три подобных примера изменения слов (кстати, сможете ли вы подобрать такой, чтобы и исходное, и полученное слово были осмысленными?) Как будет проявляться данная проблема, если машина не 16-, а 32-разрядная?
Пока мне удалось найти 3 "осмысленных" перестановки:
ЛУНА - УЛАН (кавалерист)
РАМА - АРАМ (имя - например, Арам Хачатурян)
МЭРИ - ЭМИР (в странах Востока титул правителей)
Вот еще одна новая добавочная перестановка:
НАДО - АНОД (положительный электрод)
Для 32-разрядного случая переставляться будут блоки по 4 буквы, например:
ДИСКОВОД - КСИД ДОВО
6. Предположим, компьютер вывел на экран некоторое целое число, которое хранится в ОЗУ. Какие действия при этом потребовалось выполнить? По каким причинам (постарайтесь назвать несколько) в систему команд процессора не входит вывод на экран значения числа?
При этом было выполнено достаточно много действий.
Во-первых, число, хранящееся в памяти в двоичной системе, было переведено в последовательность символов, соответствующих десятичному изображению числа (например, 10000012 в "6" и "5"). Стоит подчеркнуть, что алгоритм преобразования с точки зрения возможного вывода неоднозначен: например, можно перед положительным числом писать "+", а можно заменить его пробелом или вовсе игнорировать; можно дополнять число слева незначащими нулями до стандартной длины, а можно использовать пробелы или взять только значащие цифры. Кроме того, целые числа могут иметь разную длину (например, 2 или 4 байта), что также должна учитывать программа перевода. Кстати, для вещественных чисел ситуация еще сложнее (там, скажем, надо указывать число знаков после запятой!)
Во-вторых, полученная текстовая строка была выведена на экран. Учитывая, что работа с внешними устройствами разных моделей имеет свои особенности, запрограммировать эту процедуру единообразно практически невозможно.
Учитывая сказанное, добавлять к системе команд процессора вывод числа на экран нецелесообразно, как минимум, по следующим соображениям:
Последнее обновление - 12 февраля 2005 г.