Физика атомного реактора Сопротивление материалов Математика решение задач Информатика Атомная энергетика безопасность Электротехника и электроника
Знакомство с ассемблером Формат оператора Директивы Макроопределение Макровызовы Макросы с параметрами Процесс ассемблирования Компиляция Задачи компоновщика Динамическая компоновка

9. Можете ли вы представить себе обстоятельства, при которых метка совпадет с кодом операции (например, может ли команда M0V использоваться в качестве метки)? Аргументируйте.

10. Какие шаги нужно совершить, чтобы путем двоичного поиска найти элемент «Berkeley» в следующем списке: Ann Arbor, Berkeley, Cambridge, Eugene, Madison, New Haven, Palo Alto, Pasadena, Santa Cruz, Stony Brook, Westwood, Yellow Springs. Когда будете вычислять средний элемент в списке из четного числа элементов, возьмите элемент, который идет сразу после среднего.

И. Можно ли использовать двоичный поиск в таблице, в которой содержится простое число элементов?

Вычислите хэш-код для каждого из следующих символических имен. Для этого сложите буквы (а = 1, Ъ = 2 и т. д.) и возьмите результат по модулю размера хэш-таблицы. Хэш-таблица содержит 19 слотов (от 0 до 18).

eis, jan, jelle, maaike

Образует ли каждое символическое имя уникальное значение хэш-функции? Если нет, то как разрешить эту коллизию?

вания. Если и на этот раз слот заполнен, алгоритм применяется снова и т. д. Так продолжается до тех пор, пока не будет найден пустой слот. Если доля слотов, которые уже заполнены, составляет R, сколько попыток в среднем понадобится для того, чтобы ввести в таблицу новый символ?

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

Pentium 4 имеет сегментированную архитектуру. Сегменты независимы. Ассемблер для этой машины может содержать директиву SEG N, которая помещает последующий код и данные в сегмент N. Повлияет ли такая схема на счетчик адресов команд?

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

Можно ли отобразить DLL-файл на виртуальные адресные пространства двух процессов с разными виртуальными адресами? Если да, то какие проблемы при этом возникают? Можно ли их разрешить? Если нет, то что можно сделать, чтобы устранить их?

Опишем один из способов компоновки (статическая компоновка). Перед сканированием библиотеки компоновщик составляет список необходимых процедур, то есть имен, которые в компонуемых модулях определены как внешние (EXTERN). Затем компоновщик последовательно просматривает всю библиотеку, извлекая каждую процедуру, которая находится в списке нужных имен. Будет ли работать такая схема? Если нет, то почему и как это можно исправить?

Может ли регистр использоваться в качестве фактического параметра в макровызове? А константа? Если да, то почему? Если нет, то почему?

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

Подумайте, как можно поместить макроассемблер в бесконечный цикл.

Компоновщик считывает 5 модулей размером 200, 800, 600, 500 и 700 слов соответственно. Если они загружаются в этом порядке, то каковы константы перераспределения памяти?

Напишите модуль таблицы символов, состоящий из двух процедур: enter (symbol, value) и lookup (symbol, value). Первая вводит новые символические имена в таблицу, а вторая ищет их в таблице. Используйте какой-либо вариант хэширования.

Напишите простой ассемблер для компьютера Млс-1, о котором мы говорили в главе 4. Помимо оперирования машинными командами, обеспечьте возможность приписывать константы символическим именам во время ассемблирования, а также возможность ассемблировать константу в машинное слово.


Экспертные системы и экспертный анализ Архитектура компьютера Уровень ассемблера