Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ураков А.Р. Технологические особенности проектирования вычислительной техники.doc
Скачиваний:
34
Добавлен:
02.05.2014
Размер:
839.17 Кб
Скачать

4.7. Сокращение размера команды

Рассмотрим необходимость четвертого поля – адреса результата операции. После того как операция с данными в АЛУ будет выполнена, результат должен быть помещен в регистр временного хранения данных. Это требуется для того, чтобы сохранить результат до того, как адрес результата будет сформирован на выходе процессора. В обычном алгоритме результат одной операции достаточно часто используется при выполнении следующей. Это значит, что при последующей операции результат, сохраненный во временном регистре, можно использовать повторно без переноса в память и выборки оттуда. Это позволяет не только сократить время из-за отсутствия двух переносов данных, но и позволяет обойтись без двух полей – поля адреса результата и поля адреса второго операнда.

Можно ли вообще обойтись двумя полями в команде (двуместными командами): код операции и адрес первого операнда? Оказывается, вполне можно. Для этого достаточно одного регистра в процессоре и появления всего двух новых команд: передачи данных из памяти во временный регистр и передачи данных из временного регистра в память. Такие команды иногда называют командами загрузкиивыгрузкисоответственно. Команды, оперирующие с данными, теперь устроены так, что в один из операндов они берут по адресу, указанному в том поле, где размещается адрес операнда, а второй операнд берется из регистра временного хранения данных. Результат всегда помещается в регистр процессора. Это значит, что перед выполнением операции второй операнд должен быть помещен в регистр временного хранения с помощью команды загрузки. Полученный результат, если он больше не нужен в процессоре, должен быть отправлен в память с помощью команды выгрузки.

Такая методика может потребовать вместо одной выполнения двух, а иногда и трех команд, но она позволяет сократить длину команд, из-за упрощения команд сделать более простой процессор и в некоторых случаях выиграть в производительности за счет общего уменьшения числа пересылок. Положительный эффект может быть весьма незначительный, так как результат вычисления часто бывает нужен не сразу, а после нескольких других операций (например, как при вычислении суммы квадратов нескольких чисел). Это значит, что можно добиться гораздо большего эффекта, если использовать для хранения данных не один регистр в процессоре, а несколько. Практика показывает, что даже 2-3 регистра могут дать сильный эффект, не говоря о уже большем количестве. Эффект дополнительных регистров настолько высок, что в современных процессорах команды, выполняющие операции над данными, не работают с операндами в памяти, а только с регистрами процессора. Такие команды являются одноместными, это значит, что для выполнения операции данные должны быть предварительно загружены в процессор. Общая тенденция такова, что один из операндов может выбираться из памяти только у некоторых самых простых и распространенных операций.

Остается одна проблема – в какой из нескольких регистров помещать результат операции. Самое очевидное решение помещать результат всегда в один и тот же регистр. Для отличия от других регистров, он называется аккумулятором, а процессор, устроенный таким образом –аккумуляторной машиной. Если результат какой-либо операции потребуется позже, в таком процессоре, он должен быть сразу перенесен из аккумулятора в какой-либо изрегистров данных. Такие регистры часто называютсярегистрами общего назначения (РОН). Эта операция называется операциейвнутреннейилимежрегистровойпересылки. Аккумуляторная машина удобна прежде всего своей простотой и небольшой системой команд. Она наиболее эффективна, когда алгоритм не требует выполнения лишних пересылок. Это возможно, когда результат некоторой операции будет использоваться в качестве операнда на следующей и только на следующей операции, например, при последовательном сложении (умножении) чисел. На практике могут встречаться более изощренные алгоритмы, тогда пересылки приходится делать слишком часто.

В таких случаях гораздо быстрее работает регистровая машина. В ней результат операции может помещаться в любой из регистров общего назначения. Регистр, куда будет помещен результат, определяется кодом операции. Это значит, что без каких-либо пересылок, результат можно будет использовать на любой последующей операции (конечно если хватит регистров в процессоре вообще). Уменьшение количества пересылок сопровождается увеличением системы команд (каждая арифметическая и логическая операция должна существовать в нескольких вариантах для возможности записи в каждый из регистров), а значит сложности процессора. Кроме того, увеличение числа регистров значительно увеличивает систему команд и усложняет процессор. Такое решение удобно, только если количество регистров и операций процессора невелико.

Достаточно интересно устроена стековая машина. Регистры общего назначения такой машины объединены в стек. Технически стек может быть организован, например, следующим образом. Предварительное важное замечание: здесь описан вариант стековой машины, удобный именно для технической реализации, тогда как в литературе чаще встречаются «виртуальные» варианты, удобные для программирования. Все регистры пронумерованы по порядку. В специальном регистре, который правильно называетсярегистромуказателем вершины стека, а обычно простоуказателем, хранится номер активного регистра или регистра, являющегосявершиной стека. Это значит, что одноместная операция выполняется всегда с этим регистром. Результат одноместной операции записывается в тот же регистр, из которого был выбран операнд, т.е. в ту же вершину стека. Заметим, что после операции операнд нам не доступен, так как на его место помещается результат операции. Если выполняется операция загрузки значения из памяти в регистр, то перед выполнением операции значение указателя увеличивается на единицу, т. е. вершиной стека объявляется следующий по порядку регистр, туда и попадает загружаемое число. Это значит, что при загрузке число, хранящееся в вершине стека, не пропадает, а количество доступных регистров в стеке уменьшается на единицу. Для двуместной операции сперва из вершины стека берется операнд, который в операции окажется вторым (например, при делении он является делителем, т.е. находится в знаменателе). Далее значение указателя уменьшается на единицу, т.е. вершиной стека становится предыдущий регистр, содержимое этого регистра будет первым операндом (например, при делении он является делимым, находится в числителе). Результат операции будет помещен в вершину стека, т.е. в тот регистр, где находился первый операнд. Заметим, что после операции оба операнда нам не доступны, первый операнд – так как на его место помещен результат операции, второй операнд – так как на его место будет записано новое число, загружаемое из памяти. Если операнд какой-либо операции нам потребуется в последующем, перед выполнением этой операции он должен быть переписан в другой регистр. Это можно сделать загрузкой числа в стек, но число для загрузки берется не из памяти, а из вершины стека. Естественно, стек не может быть бесконечным. При каждой загрузке числа вершина стека перемещается в сторону больших номеров. Так мы можем достигнуть конца стека. Обратное перемещение осуществляется либо при выполнении двуместной операции, либо просто обратным перемещением вершины (уменьшением номера указателя). Это можно сделать, если некоторое значение нам больше не нужно, например, оно было перед этим выгружено в оперативную память.

Стековая машина при реализации не сложнее аккумуляторной. Ее достоинство перед аккумуляторной состоит в том, что, если не делать пересылок, результат операции не обязательно использовать в качестве операнда на следующей же по порядку операции. Результат может дождаться своей очереди в стеке и это позволяет уменьшить общее количество пересылок. Однако, в отличие от регистровой машины, если этот результат присутствует в качестве операнда в нескольких операциях, делать пересылку все равно придется. Тем не менее, стековая машина позволяет значительно сократить количество пересылок во многих алгоритмах. Недостаток стековой машины прежде всего в сложности ее программирования. Для удобства программирования была предложена обратная или польскаязапись, в которой знак операции записывается не между операндами, а после них.

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