- •В. Г. Баула Введение в архитектуру эвм и системы программирования
- •Предисловие
- •1. Понятие об архитектуре эвм
- •2. Машина Фон Неймана
- •2.1. Память
- •2.2. Устройство Управления
- •2.3. Арифметико–Логическое Устройство
- •2.4. Взаимодействие уу и алу
- •3. Учебная машина
- •3.1. Схема выполнения команд
- •3.2. Примеры программ для учебной машины.
- •3.2.1. Пример 1. Оператор присваивания.
- •3.2.2. Пример 2. Условный оператор.
- •3.2.3. Пример 3. Реализация цикла.
- •3.2.4. Пример 4. Работа с массивами.
- •3.3. Формальное описание учебной машины
- •4. Введение в архитектуру эвм
- •4.1. Адресность эвм
- •4.2. Сравнительный анализ эвм различной адресности
- •4.3. Дробно-адресная архитектура
- •4.4. Способы адресации
- •4.5. Многообразие форматов данных
- •4.6. Форматы команд
- •4.7. Базирование адресов
- •5. Понятие семейства эвм
- •6. Архитектура младшей модели семейства Intel
- •6.1. Память
- •6.2. Форматы данных
- •6.3. Вещественные числа
- •6.4. Целые числа
- •6.5. Сегментация памяти
- •6.6. Мнемонические обозначения регистров
- •6.7. Структура команд
- •6.8. Команды языка машины
- •6.8.1. Команды пересылки
- •6.8.2. Арифметические команды
- •7. Язык Ассемблера
- •7.1. Понятие о языке Ассемблера
- •7.2. Применение языка Ассемблера
- •7.3. Классификация предложений языка Ассемблер
- •7.4. Пример полной программы на Ассемблере
- •7.5. Переходы
- •7.6. Команды переходов
- •7.6.1. Команды безусловного перехода
- •7.6.2. Команды условного перехода
- •7.6.3. Команды цикла
- •7.7. Работа со стеком
- •7.8. Команды вызова процедуры и возврата из процедуры
- •7.9. Программирование процедур на Ассемблере
- •7.9.1. Стандартные соглашения о связях
- •8. Система прерываний.
- •9. Дополнительные возможности Ассемблера.
- •9.1. Строковые команды.
- •9.2. Логические команды.
- •9.3. Команды сдвига.
- •10. Модульное программирование
- •10.1. Модульное программирование на Ассемблере.
- •10.2. Схема работы редактора внешних связей.
- •10.3. Схема работы статического загрузчика.
- •10.4. Схема работы динамического загрузчика.
- •11. Понятие о системе программирования.
- •11.1. Компоненты системы программирования.
- •11.2. Характеристики исполняемых модулей.
- •11.2.1. Перемещаемые модули.
- •11.2.2. Повторно-выполняемые модули.
- •11.2.3. Повторно-входимые (реентерабельные) модули.
- •12. Макросредства языка Ассемблер.
- •12.1. Сравнение процедур и макроопределений.
- •13. Схема работы транслятора с языка Ассемблера.
- •14. Понятие о мультипрограммном режиме работы.
- •14.1. Требования к аппаратуре для обеспечения возможности работы в мультипрограммном режиме.
- •14.1.1. Система прерываний.
- •14.1.2. Механизм защиты памяти.
- •14.1.3. Аппарат привилегированных команд.
- •14.1.4. Таймер.
- •15. Архитектурные особенности современных эвм.
- •15.1. Конвейерные эвм.
- •15.2. Эвм различной архитектуры.
- •15.2.1. Архитектура эвм с общей шиной.
- •15.2.2. Достоинства и недостатки архитектуры с общей шиной.
- •15.2.3. Архитектура эвм с каналами ввода/вывода.
- •15.3. Уровни параллелизма.
- •Список литературы.
3.2.2. Пример 2. Условный оператор.
Составим теперь программу, реализующую условный оператор присваивания. Пусть целочисленная переменная yпринимает значение в зависимости от вводимой целочисленной переменнойxв соответствии с правилом:
В данном примере при записи программы на месте кода операции мы будем для удобства вместо числа указывать его мнемоническое обозначение. Разумеется, потом, перед вводом программы необходимо будет заменить эти мнемонические обозначения соответствующими им числами.
Для определения того, является ли значение переменной xбольше, меньше или равным константе2, мы будем выполнять операцию вычитанияx–2, получая в регистреwзначение0приx=2,1приx<2и2приx>2. При этом сам результат операции вычитания нам не нужен, но по нашему формату команд указание адреса ячейки для записи результата является обязательным. Для записи таких ненужных значений мы будем чаще всего использовать ячейку с номером0. В соответствии с принципом однородности памяти, эта ячейка ничем не отличается от других, то есть, доступна как для записи, так и для чтения данных. В некоторых реальных ЭВМ этот принцип нарушается: при считывании из этой ячейки всегда возвращался нуль, а запись в ячейку с адресом ноль физически не осуществляется (на практике такой принцип работыcс этой ячейкой иногда удобнее).
Для хранения переменных xиyвыделим ячейки100и101соответственно. Программист сам определяет порядок размещения в программе трёх ветвей нашего условного оператора присваивания. Мы будем сначала располагать вторую ветвь (x=2), затем первую (x<2), а потом третью (x>2). На рис. 3.2 приведён текст этой программы.
№ |
Команда |
Комментарий | |||
001 |
ВВЦ |
100 |
001 |
000 |
Read(x) |
2 |
СЛЦ |
101 |
100 |
011 |
y := x+2 |
3 |
ВЧЦ |
000 |
100 |
011 |
<000> := x–2; формирование w |
4 |
УСЛ |
005 |
007 |
009 |
Case w of 0: goto 005; 1: goto 007; 2: goto 009 end |
5 |
ВЫЦ |
011 |
001 |
000 |
Write(2) |
6 |
СТОП |
000 |
000 |
000 |
Конец работы |
7 |
ВЫЦ |
101 |
001 |
000 |
Write(y) |
8 |
СТОП |
000 |
000 |
000 |
Конец работы |
9 |
УМЦ |
101 |
011 |
101 |
y := 2 * y |
010 |
БЕЗ |
000 |
007 |
000 |
Goto 007 |
011 |
00 |
000 |
000 |
002 |
Целая константа 2 |
Рис 3.2. Текст программы второго примера.
Обратите внимание, что константа 2неотличима от команды пересылки содержимого второй ячейки памяти в нулевую ячейку, именно такая команда и будет выполняться, если эта константа будет выбрана на регистр команд устройства управления.
3.2.3. Пример 3. Реализация цикла.
В качестве следующего примера напишем программу для вычисления начального отрезка гармонического ряда:
Для хранения переменных n,yиiвыделим ячейки100,101и102соответственно. В этом алгоритме мы реализуемцикл с предусловием, поэтому при вводеn<1тело цикла не будет выполняться ни одного раза, и наша программа будет выдавать нулевой результат. На рис. 3.3 приведена возможная программа для решения этой задачи.
Сделаем некоторые замечания к этой программе. В нашем языке у нас нет команды деления целого числа на вещественное, поэтому при вычислении величины 1.0/iнам пришлось отдельной командой
ВЕЩ 000 000 102
преобразовать значение целой переменной iв вещественной значение. Обратите также внимание, что для нашей учебной машины мы ещё не определили формат представления вещественных чисел, поэтому в ячейке с адресом 14 стоит пока просто условное обозначение константы1.0, а не её машинное представление.
№ |
Команда |
Комментарий | |||
001 |
ВВЦ |
100 |
001 |
000 |
Read(n) |
2 |
ВЧВ |
101 |
101 |
101 |
y := 0.0 |
3 |
ПЕР |
102 |
000 |
013 |
i := 1 |
4 |
ВЧЦ |
000 |
102 |
100 |
i := i–n; формирование w |
5 |
УСЛ |
006 |
006 |
011 |
Ifi>nthen goto011 |
6 |
ВЕЩ |
000 |
000 |
102 |
<000> := Real(i) |
7 |
ДЕВ |
000 |
014 |
000 |
<000> := 1.0/<000> |
8 |
СЛВ |
101 |
101 |
000 |
y := y+<000> |
9 |
СЛЦ |
102 |
102 |
013 |
i := i+1 |
010 |
БЕЗ |
000 |
004 |
000 |
Следующая итерация цикла |
1 |
ВЫВ |
101 |
001 |
000 |
Write(y) |
2 |
СТОП |
000 |
000 |
000 |
Стоп |
3 |
00 |
000 |
000 |
001 |
Целая константа 1 |
4 |
<1.0> |
Вещественная константа 1.0 |
Рис 3.3. Текст программы третьего примера.