Реклама:

Таненбаум Э.- Архитектура компьютера. стр.197

Отметим, что каждый цикл является самодостаточным. В каждом цикле определяется, значение какого регистра должно поступать на шину В, что должны делать АЛУ и схема сдвига, куда нужно сохранить значение шины С и, наконец, каким должно быть следующее значение регистра MPC.

Следует сделать еще одно замечание по поводу рис. 4.5. До сих пор мы считали MPC регистром, который состоит из девяти бит и загружается на высоком уровне сигнала. В действительности этот регистр вообще не нужен. Все его входные сигналы можно непосредственно связать с управляющей памятью. Поскольку эти сигналы присутствуют в управляющей памяти на спаде синхронизирующего сигнала, когда выбирается и считывается регистр MIR, этого достаточно. Их не нужно хранить в регистре MPC. По этой причине MPC может быть реализован в виде виртуального регистра, который представляет собой просто место объединения сигналов и похож скорее на коммутационное поле, чем на настоящий регистр. Если MPC сделать виртуальным регистром, то процедура синхронизации значительно упрощается: в этом случае события происходят только на фронте и спаде сигнала. Но если вам проще считать MPC реальным регистром, то такой подход тоже вполне допустим.

Пример архитектуры набора команд — IJVM

Чтобы продолжить изучение нашего примера, введем уровень архитектуры набора команд (ISA), которые должна интерпретировать микропрограмма машины IJVM (см. рис. 4.5). Для удобства уровень архитектуры команд мы иногда будем называть макроархитектурой, чтобы противопоставить его микроархитектуре. Однако перед тем как приступить к описанию IJVM, мы немного отвлечемся.

Стек

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

К сожалению, предоставить каждой переменной абсолютный адрес в памяти невозможно. Проблема заключается в том, что процедура может вызывать себя сама. Мы рассмотрим такие рекурсивные процедуры в главе 5. А пока достаточно сказать, что если процедура вызывается дважды, то хранить ее переменные под конкретными адресами в памяти нельзя, поскольку второй вызов перемешается с первым.

Вместо этого используется другая стратегия. Для переменных резервируется особая область памяти, которая называется стеком и в которой отдельные переменные не получают абсолютных адресов. Какой-либо регистр, скажем, LV, указывает на базовый адрес локальных переменных для текущей процедуры. Посмотрите на рис. 4.7, а. В данном случае вызывается процедура А с локальными переменными я1, а2 и аЗ, и для этих переменных резервируется участок памяти, начинающийся с адреса, который указывается регистром LV. Другой регистр, SP, указывает на старшее слово локальных переменных процедуры А. Если значение регистра LV равно 100, а слова по 4 байт, то значение SP составляет 108. Для обращения к переменной нужно вычислить ее смещение от адреса LV. Структура данных между LV и SP (включая оба указанных слова) называется фреймом локальных переменных.


⇐ Предыдущая страница| |Следующая страница ⇒