Программа является машинно-зависимой, если при ее разработке необходимо учитывать особенности архитектуры. Например, генератор кода в любом компиляторе является машинно-зависимой частью
Вид материала | Программа |
СодержаниеПример программы для виртуальной машины VM Контрольные вопросы и упражнения |
- Примерная инструкция по охране труда при подготовке к работе сельскохозяйственных машин, 301.45kb.
- Рабочая программа дисциплины «Машинно-зависимые языки программирования» Направление, 136.33kb.
- Качественная работа машинно-тракторного пахотного агрегата позволяет хорошо подготовить, 410.19kb.
- И программа 13-ой Международной научно-практической конференции машинно-технологическое, 257.75kb.
- Е. А. Цветков Московский физико-технический институт (государственный университет), 381.58kb.
- Неотъемлемой частью работ при разработке или модификации программных систем является, 22.36kb.
- Одним из эффективных математических методов для определения зависимости по множеству, 139.29kb.
- А тесноту связи между зависимой и независимой переменными, 526.21kb.
- Вопросы по курсу «Допглавы эконометрики» Преподаватель : доцент, к ф. м н. Пяткина, 7.26kb.
- Контрольная работа по гражданской обороне, 433.65kb.
Пример программы для виртуальной машины 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. Сравнительный анализ программ показывает, что наличие регистров в архитектуре позволяет сократить общий объем программ.
Контрольные вопросы и упражнения
Объясните, что такое «машинная зависимость», и какие программы считаются машинно-зависимыми.
- Перечислите важнейшие особенности архитектуры команд.
- Чем отличается RISC-архитектура от CISC-архитектуры?
- Каковы достоинства и недостатки использования виртуальной машины?
- Приведите примеры промышленных виртуальных машин.
- Какие способы реализации исполнителя команд виртуальной машины вы знаете?
- Объясните, что означает термин «мобильность программного обеспечения».
- Какие целые типы используются в виртуальной машине VM и насколько они типичны?
- Каковы функции верификатора в составе виртуальной машины JVM?
- Определите набор битовых операций and, or, not, xor для абстрактной машины AMS.
- Покажите признаки ROSС-архитектуры в учебной виртуальной машине VM.
- Объясните, что такое фрейм стека.
- Сколько форматов команд реализовано в учебной виртуальной машине?
- Какие методы адресации аргументов используются в командах виртуальной машины VM?
- Какие группы команд реализованы в составе системы команд VM?
- В чем команды перехода принципиально отличаются от других команд?
- Покажите признаки RISС-архитектуры в учебной виртуальной машине.
- Чем отличается абсолютный переход по адресу от относительного?
- Объясните, почему промышленные абстрактные машины имеют ROSC-архитектуру.
- Почему наличие регистров сокращает общий размер программы?
- Каким образом можно фактически бесконечно расширять набор команд виртуальной машины?
- Какие группы команд определены в составе системы команд машин AMF и AMS?
- Найдите и исправьте ошибку в программе для виртуальной машины VM.
- Определите набор безадресных стековых операций для VM.
- Объясните принцип 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 В программе есть одна ошибка: при некоторых входных данных программа завершится аварийно. Поиск и упражнение ошибки оставляем читателю в качестве упражнения (см. «Контрольные вопросы и упражнения»).