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

Вид материалаПрограмма

Содержание


Пример программы для виртуальной машины VM
Контрольные вопросы и упражнения
Подобный материал:
1   2   3   4   5

Пример программы для виртуальной машины VM


Для демонстрации возможностей VM реализуем тот же пример, который представлен выше для абстрактных машин AMF и AMS. Пусть размер памяти — 64 килобайта и программа записана в память с нулевого байта. Регистры записаны без префикса $, а команды – строчными буквами. Программа представлена в табл. 1.511.

Таблица 1.5.

Адрес

Команда

Комментарий

00000

ldwi

w10

800




Адрес массива в регистре w10

00006

clrw

w11







Очистка индекса

00008

ldwi

w12

100




Счетчик повторений цикла = 100

00014

fld1

d1







Загрузка 1.0

00016

clrd

d30







S = 0

00018

find

d20







Ввод(x[i])

00020

std

d20

w10

w11

Запись x[i] в память

00024

fcmp

d20

w5

d1

x[i] > 1? w5 = -1,0,+1

00028

jge

w5

6




Нет: на переадресацию

00032

fdiv

d20

d1

d20

d20 = 1/x[i]

00036

fadd

d30

d30

d20

S = S + 1/x[i]

00040

incui

w11

8




Переадресация: на следующий x[i+1]

00044

loop

w12

-13




Цикл: назад на команду ввода

00048

foutd

d30







вывод

00050

stop

0










Проанализируем эту программу. Единицей памяти является байт, поэтому адреса команд изменяются не на 1, а на размер команды в байтах. По той же причине адрес массива для хранения величин x[i] является адресом байта, а не элемента массива. Так как размер элемента массива равен 8 (double), то команда переадресации (адрес 00040) изменяет индекc на 8, а не на 1.

В связи с наличием регистров не потребовалось изменять команды в памяти для переадресации: все вычисления выполняются в регистрах. Кроме того, команда цикла (адрес 00044) автоматически вычитает 1 из счетчика и проверяет новое значение на ноль. Наличие регистров и соответствующих команд (адреса 00014 и 00016) позволяет избавиться от хранения констант 0 и 1 в памяти.

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

(адрес целевой команды) - (адрес команды перехода) / 2

Поэтому в данном случае аргумент будет таким:

RA = (00040 – 00028) / 2 = 6

Команда цикла переход выполняется назад, поэтому аргумент отрицательный. Вычисляя по той же формуле, получаем следующее:

RA = (00018 – 00044) / 2 = -13

Общий размер программы занимает всего 52 байта, в то время как программы для AMF и AMS занимали по 18 слов, каждое из которых размером 4 байта (32 бита). Таким образом, можно сделать вывод, что наличие регистров довольно существенно сокращает размер программы.

Резюме


Системное программное обеспечение разрабатывается для конкретного процессора, поэтому требуется учитывать архитектуру команд. В настоящее время наибольшее распространение получили архитектуры типа CISC, RISC и ROSC. Важнейшими составляющими архитектуры являются: типы данных, организация памяти, состав регистров, набор команд и способы адресации аргументов. В этом смысле системное ПО является машинно-зависимым. С другой стороны, многие системные программы фактически никак от архитектуры не зависят. Четкое отделение машинно-зависимых частей повышает переносимость программного обеспечения. Для тех же целей применяются виртуальные машины. Кроме того, виртуальная машина в качестве целевой машины при трансляции существенно сокращает трудозатраты при разработке системного ПО и обеспечивает совместимость на уровне исполняемых файлов. В данной главе разработана архитектура трех абстрактных машин: AMF, AMS и VM. Сравнительный анализ программ показывает, что наличие регистров в архитектуре позволяет сократить общий объем программ.

Контрольные вопросы и упражнения


  1. Объясните, что такое «машинная зависимость», и какие программы считаются машинно-зависимыми.
  2. Перечислите важнейшие особенности архитектуры команд.
  3. Чем отличается RISC-архитектура от CISC-архитектуры?
  4. Каковы достоинства и недостатки использования виртуальной машины?
  5. Приведите примеры промышленных виртуальных машин.
  6. Какие способы реализации исполнителя команд виртуальной машины вы знаете?
  7. Объясните, что означает термин «мобильность программного обеспечения».
  8. Какие целые типы используются в виртуальной машине VM и насколько они типичны?
  9. Каковы функции верификатора в составе виртуальной машины JVM?
  10. Определите набор битовых операций and, or, not, xor для абстрактной машины AMS.
  11. Покажите признаки ROSС-архитектуры в учебной виртуальной машине VM.
  12. Объясните, что такое фрейм стека.
  13. Сколько форматов команд реализовано в учебной виртуальной машине?
  14. Какие методы адресации аргументов используются в командах виртуальной машины VM?
  15. Какие группы команд реализованы в составе системы команд VM?
  16. В чем команды перехода принципиально отличаются от других команд?
  17. Покажите признаки RISС-архитектуры в учебной виртуальной машине.
  18. Чем отличается абсолютный переход по адресу от относительного?
  19. Объясните, почему промышленные абстрактные машины имеют ROSC-архитектуру.
  20. Почему наличие регистров сокращает общий размер программы?
  21. Каким образом можно фактически бесконечно расширять набор команд виртуальной машины?
  22. Какие группы команд определены в составе системы команд машин AMF и AMS?
  23. Найдите и исправьте ошибку в программе для виртуальной машины VM.
  24. Определите набор безадресных стековых операций для VM.
  25. Объясните принцип little-endian.




Глава 1. Системное программное обеспечение и архитектура ЭВМ 1

Реальные и виртуальные компьютеры 2

Виртуальные машины и промышленное программирование 4

Промышленные виртуальные машины 6

P-машина 7

Java Virtual Machine 12

Common Language Runtime 16

Разработка виртуальных машин 16

Абстрактная машина AMF 16

Абстрактная машина AMS 19

Примеры программ 22

Учебная виртуальная машина VM 24

Память и данные 25

Регистры 27

Система команд 28

Пример программы для виртуальной машины VM 40

Резюме 41

Контрольные вопросы и упражнения 41



1 Английская буква «P» в этом сочетании произошла от слова «pseudo».

2 Подробное описание компилятора, ассемблера и интерпретатора можно найти в книге «Pascal Implementation», написанной Стивеном Пембертоном (Steven Pemberton) и Мартином Даниэлсом (Martin Daniels). Книга размещена в Интернете по адресу __________________

3 Напомним, что в языке Pascal процедуры могут быть вложенными, и вложенная процедура имеет доступ к переменным объемлющей процедуры.

4 Подробное описание (Java Virtual Machine Specification) можно найти на сайте фирмы Sun Microsystems Inc. по адресу java.sun.com.

5Для представления элементов Java-машины используется С-подобный псевдокод, описанный в Java Virtual Machine Specification.

6 Подобная структура команд была реализована в советских ЭВМ типа M-20.

7 Под «кнопкой Пуск» в данном случае понимается начало работы интерпретатора виртуальной машины (см. главу 2 «Реализация интерпретаторов»).

8 Аналогичное свойство было у советской ЭВМ БЭСМ-6.

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

10 Типы данных VM, хотя и называются так же, не всегда совпадают с типами указанных языков программирования.

11 В программе есть одна ошибка: при некоторых входных данных программа завершится аварийно. Поиск и упражнение ошибки оставляем читателю в качестве упражнения (см. «Контрольные вопросы и упражнения»).