Э. Таненбаум - Архитектура компьютера (1127755), страница 73
Текст из файла (страница 73)
Часто эти два утверждения сочетаются. Например: 2 = Т05. 1П2) дого П. е1зе дото 02 В результате такой записи МАЕ породит микрокоманду, в которой значение регистра ТО8 пропускается через АЛУ, но при этом нигде не сохраняется, так что это значение устанавливает бит Х. Сразу после загрузки из АЛУ бит Х соединяется со старшим битом регистра МРС через схему ИЛИ, вследствие чего 292 Глава 4. Уровень микроархитектуры Эта запись сообщает микроассемблеру, что нужно использовать значение оалае для поля )ч)ЕХТ АОПКЕЯБ и установить бит )МРС, так чтобы регистр МВК соединялся через схему ИЛИ с регистром МРС вместе со значением )ч)ЕХТ А1П)КЕЯЯ. Если значение ра1ие равно О, достаточно написать 9010 (МВЙ) Отметим, что только 8 младших битов регистра МВК соединяются с регистром МРС (см.
рис. 4.5), поэтому вопрос о знаковом расширении тут не возникает. Также отметим, что используется то значение МВК, которое доступно в конце текущего цикла. В момент вызова в текущей микрокоманде выбирать следующую микрокоманду уже поздно. Реализация 14ЧМ с использованием микроархитектуры М! с-1 Сейчас мы уже дошли до того момента, когда можно соединить все части вместе.
В табл. 4.3 приводится микропрограмма, которая работает на микроархитектуре М)с-1 и интерпретирует 1) ьгМ. Программа очень короткая — всего 112 микрокоманд. Таблица состоит из трех столбцов. В первом столбце дано символическое обозначение микрокоманды, во втором — сама микрокоманда, в третьем — комментарий. Как мы уже отмечали, последовательность микрокоманд не обязательно соответствует последовательности адресов в управляющей памяти.
Таблица 4.3. Микропрограмма длл микроархитектуры М)с-1 Микрокоманде Операции Комментарий Ма)п1 РС = РС + 1; 1етсл; цо1о(МВВ) МВВ содераит код операции; получение следующего байта; отсылка цо1о Ма)п1 МАВ=ЗР=ЗР— 1; гб пор1 Ничего не происходит )асЫ1 Чтение слова, идущего после верхнего слова стека )абб2 н =ТОЗ Н = вершина стека )аббз МОВ = тОЗ = МОВ + Н; шг; цо(о Ма)п1 Суммирование двух верхних слов; запись суммы в верхнюю позицию стека зюЫ МАВ = ЗР = ЗР— 1; гб Чтение слова, идущего после верхнего слова стека )виЬ2 н =ТОЗ Н = вершина стека )вОЬЗ МОВ = ТОЗ = МО — Н; аг; цо1о Ма)п1 Вычитание; запись результата в вершину стека адрес следующей микрокоманды будет вызван либо по (.2, либо по Ь1. Значение регистра МРС стабилизируется, и он сможет использовать его для вызова следующей микрокоманды.
Наконец, нам нужна специальная запись, чтобы задействовать бит )МРС: цстс (МВВ ОВ ка)ие) Пример реализации микроархитектуры 293 Комментарий Микрокоманде Операции МАВ = ЗР = ЗР— 1; гб !асс 1 !апб2 Н = ТОЗ Н = вершина стека МОВ = тОЗ = МОВ И Н; вг; ро1о Ма1п1 !апбз Юг1 МАй = ЗР = ЗР— 1; и! Юг2 Н = ТОЗ Н = вершина стека югз МОВ = ТОЗ = МОВ ИЛИ Н; вг; ро1о Ма!п1 МАВ = ЗР = ЗР + 1 бцр1 МОВ = Т08; вг; ро1о Ма!п1 МАВ = ЗР = ЗР— 1; гб бир2 Запись нового слова в стек рор! рор2 ТОЗ = МОВ; ро1о Ма!п1 МАй = ЗР = ЗР— 1; гб рорз авар! МАВ = ЗР звар2 Н = МОВ; вг эварз МОй = ТОЗ ввар4 МАВ = ЗР— 1; вг вварб ТОЗ = Н; ро1о Ма!п1 ЗР = МАВ = ЗР + 1 Обновление ТОЗ Ырцз!12 РС = РС + 1; 1е1сп Ырцзлз МОВ = ТОЗ = МВВ; вг; ро1о Ма!п! !1оаб1 Н = 1.Н 1!оаб2 МАВ = МВВО е Н; гб !!оаоз МАВ = ЗР = ЗР +! РС = РС ь 1; 1е1сщ вг йоаб4 Продолжение Ф вварб Ь!Рцз!!! Чтение слова, идущего после верхнего слова стека Операция И; запись результата в вершину стека Чтение слова, идущего после верхнего слова стека Операция ИЛИ; запись результата в вершину стека Увеличение ЗР на 1 и копирование результата в регистр МАВ Чтение слова, идущего после верхнего слова стека Программа ждет, пока считается из памяти новое значение регистра ТОЗ Копирование нового слова в регистр ТОЗ Установка регистра МАВ на значение ЗР— 1; чтение второго слова иэ стека Установка регистра МАВ на верхнее слово стека Сохранение значения ТОЗ в регистре Н; запись второго слова в вершину стека Копирование прежнего значения ТОЗ в регистр МОВ Установка регистра МАй на значение ЗР-1; запись второго слова в стек МВй = байт, который нужно поместить в стек Увеличение РС на 1; вызов кода следующей операции Добавление к байту дополнительного знакового разряда и запись значения в стек МВВ содержит индекс; копирование значения 1Н в Н МАВ = адрес локальной переменной, которую нужно поместить в стек Регистр ЗР указывает на новую вершину стека; подготовка к записи Увеличение значения РС на 1; вызов кода следующей операции; запись вершины стека 294 Глава 4.
Уровень микроархитектуры Таблица 4.3 (продолжение ! Микрокоманда Операции Комментарий Обновление ТОЗ !з1оге2 мАЯ = мВЯ0+ н !з1огез МОЯ = Т08; вг Обновление ТОЗ в!ОЕ2 ротс(МВя ИЛИ Ох!ОО) и!бе !!оаб! РС = РС+ 1;1е1сл вк!е !!оаб2 Н = МВЯ0 «8 мое йоабз Н=МВЯ0 ИЛИ Н чнбе йоаб4 Мдя = СЧ+ Н; гб; сото йоаСЗ РС = РС+ 1;1е1си вк1е !зтоге! иксе 'а1оге2 Н = МВЯ0 «8 ик1е !з1огез Н = МВЯ0 ИЛИ Н члбе !з1оге4 МАЯ = !.Ч + Н; гб; ро10 !з1огез РС = РС+ 1;1е1сл !Дс и! Н = МВЯ0 «8 Мс в2 Н = МВЯ0 ИЛИ Н Мс иЗ МАЯ = Н+ СРР; гб; йо1о !!оаоз МАЯ = адрес константы в наборе констант !Ос и4 впс1 Н = !.Ч кпс2 МАя = МВя0+Н; гс йпсз РС = РС + 1; 1е1си Вызов константы !!оаб5 !з1оге! !з1оге4 !з1оге5 !з1огеб ччме1 ТОВ = МОя; йо1о Ма!п1 Н = !.Ч ЗР= МАЯ = ЗР— 1; го РС = РС + 1; !е1сп Т08 = МОЯ; ро1о Ма!п1 РС = РС+ 1;1е1сп МВЯ содержит индекс; копирование значения СЧ в Н МАЯ = адрес локальной переменной, в которой нужно сохранить слово из стека Копирование значения Т08 в регистр МОЯ; запись слова Чтение из стека второго слова сверху Увеличение РС на 1; вызов следующего кода операции Вызов байта операнда или кода следующей операции Межуровневый переход к старшим адресам МВЯ содержит первый байт индекса; вызов второго байта Н = первый байт индекса, сдвинутый влево на 8 бит Н = 16-разрядный индекс локальной переменной МАЯ = адрес локальной переменной, которую нужно записать в стек МВЯ содержит первый байт индекса; вызов второго байта Н = первый байт индекса, сдвинутый влево на 8 бит Н = 16-разрядный индекс локальной переменной МАЯ = адрес локальной переменной, в которую нужно записать слово из стека МВЯ содержит первый байт индекса; вызов второго байта Н = первый байт индекса, сдвинутый влево на 8 бит Н = 16-разрядный индекс константы в наборе констант МВЯ содержит индекс; копирование значения ! Ч в Н Копирование суммы значения СЧ и индекса в регистр МАЯ; чтение переменной Пример реализации микроархитектуры 295 Операции Микрокоманда Н = МОВ РС = РС в 1; 1е1сП Ипс4 Ипс5 Ипсб ОРС = РС вЂ” 1 РС = РС+ 1; 1е1сп цо1о1 цо1о2 Н = МВВ «8 цо103 ц0105 ц0106 (611 ИИ2 ИИЗ (614 Иец! Иеа2 Иерз Иец4 И (сгпрец1 И (сгпрец2 И (сгпрецз Н=МОН;гб ОРС = ТОЗ ТОЗ = МОВ Г2 РЗ (пчоке ч(пцай Н = МВВО «8 (пчоке Иг1иа!2 Продолжение Ф И !сгпрец4 И (сптрец5 И (сгпрецб МОН = МВВ+ Н; шг! цото Ма!п1 Н = МВВО ИДИ Н РС = ОРС + Н; (е1сП цо1о Ма(п! МАН = ЗР = ЗР— 1; го ОРС = ТОЗ ТОЗ = МОН й = ОРС; И(й) цо10 Т; е(зе ц010 Р МАВ=ЗР=ЗР— 1;гп ОРС = ТОЗ ТОЗ = МОН 7 = ОРС; И(7) цо1о Т; е(зе цото Р МАВ = ЗР = ВР— 1; гб МАН = ЗР = ЗР— 1 7 = ОРС вЂ” Н; И(7) цо1о Т; е(зе цо10 Р ОРС = РС вЂ” 1; 1етсП; цо1о 00102 РС= РС+ ! РС = РС+ 1; 1е1сП цо1о Ма(п! РС = РС + 1; 1е1сл Комментарий Копирование переменной в регистр Н Вызов следующего кода операции Запись суммы в регистр МОВ; обновление переменной Сохранение адреса кода операции МВВ = первый байт смещения; вызов второго байта Сдвиг первого байта влево на 8 бит и сохранение его в регистре Н Н =16-разрядное смещение перехода Суммирование смещения и ОРС Ожидание вызова следующего кода операции Чтение второго сверху слова в стеке Временное сохранение ТОЗ в ОРС Запись новой вершины стека в ТОЗ Переход по биту й Чтение второго сверху слова в стеке Временное сохранение ТОЗ в ОРС Запись новой вершины стека в ТОЗ Переход по биту 7 Чтение второго сверху слова в стеке Установка регистра МАВ на чтение новой вершины стека Копирование второго слова из стека в регистр Н Временное сохранение ТОЗ в ОРС Помещение новой вершины стека в ТОЗ Если два верхних слова равны, осуществляется переход к Т; если они не равны, осуществляется переход к Г То же, что цо1о1; нужно для адреса целевого объекта Пропуск первого байта смещения РС указывает на следующий код операции Ожидание вызова кода операции МВВ = первый байт индекса; увеличение РС на 1; вызов второго байта Сдвиг первого байта на 8 бит и сохранение значения в регистре Н 296 Глава 4.
Уровень микроархитектуры Комментарий !пчохе чщца!4 МАЙ = СРР+Н; гб 1пчо1се аоца!8 Н = МВЙО «8 Н = число параметРов 1ге1цгп1 МАЙ = ВР = Еч! го Процесс считывания ЕУ = МАЙ = МОЙ; гп 1ге1цгп4 МАЙ = ЕН + 1 Таблица 4.3 (продолжение) Макрокоманда Операции 1пчохе айса!3 Н = МВЙО ИЛИ Н !пчохе аоца15 ОРС = РС+ ! 1пчо1се аг)ца16 РС = МОЙ; 1е1сл !птахе аг1ца17 РС = РС+ 1; 1е1сл 1пчохе айса!9 Н = МВЙ!! ИЛИ Н 1пчоке чк1цаИО РС = РС+ 1; 1е1сл !пуске апцай ! ТОВ = ВР— Н !па!хе ч)Пцай2 ТОВ = МАЙ = ТОВ + 1 !па!хе аг)цаИЗ РС = РС+ 1; 1е1сл 1пчо1се ч)Псай4 Н = МВЙО «8 1пчо1се ч1ПсаИ5 Н = МВЙО ИЛИ Н 1пчохе ч)гтцайб МОЙ = ВР+ Н+ 1; вг 'ивоне агтцаИ7 МАЙ = ВР = МОй 1пчо1се ч)гсцаИ8 МОЙ = ОРС; вг 1пчоке ч1г1цай9 МАЙ = ВР = ВР+ 1 1пчохе апов!20 МОЙ = 1.Ч; вг 1пчо!се аг)ца121 РС = РС+ 1; 1е1сл 1пчо1се аг1ца122 Еу = ТОВ; оо1о Ма!и! 1геЬгп2 1гетцгп3 Н = смещение указателя процедуры от регистра СРР Вызов указателя процедуры из набора констант Временное сохранение значения РС в регистре ОРС Регистр РС указывает на новую процедуру; вызов числа параметров Вызов второго байта числа параметров Сдвиг первого байта на 8 бит и сохранение значения в регистре Н Вызов первого байта размера области локальных переменных ТОВ = адрес ОВчйЕР— 1 ТОВ = адрес 083ЙЕР (новое значение ЕУ) Вызов второго байта размера области локальных переменных Сдвиг первого байта на 8 бит и сохранение значения в регистре Н Н = размер области локальных переменных Перезапись 083ЙЕР со связующим указателем Установка регистров ВР и МАЙ на адрес ячейки, в которой содержится старое значение РС Сохранение старого значения РС над локальными переменными ВР указывает на ячейку, в которой хранится старое значение ! у Сохранение старого значения ЕУ над сохраненным значением РС Вызов первого кода операции новой процедуры Установка значения 1.У на первый адрес фрейма локальных переменных Переустановка регистров ВР и МАй для вызова связующего указателя Установка регистра ьу на связующий указатель; вызов старого значения РС Установка регистра МАЙ на чтение старого значения ЕН Пример реализации микроархитектуры 297 Комментарий Микрокоманда Операции Восстановление РС; вызов следующего кода операции !геюгп5 РС = МОВ; го; ГеГсл ~геюгп6 Вегсгп7 вешгпв МАН = 8Р 'ьЧ = МОВ МОВ = 708; нгг; ВОГо Мв~п1 Установка МАН на запись Т08 Восстановление ~.Ч Сохранение результата в исходной вершине стека Выбор названий для большинства регистров, изображенных на рис.
4.1, должен быть очевидным. Регистры СРР (СопзТапс Роо1 Ро1пФег — указатель набора констант), 1Х (1оса! Уаг1аЫе — локальная переменная) и ЯР (Ятаск Рошсег— указатель стека) содержат указатели на адреса набора констант, фрейма локальных переменных и верхнего элемента в стеке соответственно, а регистр РС (Ргоягаш Соипсег — счетчик команд) содержит адрес байта, который нужно вызвать из потока команд следующим.