3_Учебная машина (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования), страница 4
Описание файла
Файл "3_Учебная машина" внутри архива находится в папке "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования". PDF-файл из архива "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 4 страницы из PDF
Что, например, будет происходить после выполнения команды из ячейки садресом 511? Какое значение после нажатия кнопки ПУСК имеют ячейки, расположенные вне введённого массива машинных слов? Как представляются целые и вещественные числа? Как будет, например, выполняться такая машинная команда ввода массива: ВВВ 500 100 000 ?Для ответа на почти все такие вопросы мы приведём формальное описание нашей учебноймашины.
При этом в качестве метаязыка мы будем использовать язык Турбо-Паскаль,1 которыйдолжен быть достаточно хорошо Вам знаком. Другими словами, мы напишем программу на ТурбоПаскале, выполнение которой моделирует работу нашей учебной машины, т.е. наша машина, поопределению, работает "почти так же", как и эта написанная нами программа-модель.Ниже приведена реализация учебной машины на языке Турбо-Паскаль:program УМ_3(input, output);constN = 511;typeAddress = 0..N;Tag = (kom, int, fl);{В машинном слове может хранится команда, целоеили вещественное число}Komanda = packed recordKOP: 0..31;A1, A2, A3: Address;end;Slovo = packed recordcase Tag ofkom: (k: Komanda);int: (i: LongInt)fl: (f: Single);endMemory = array[0..N] of Slovo;varMem: Memory;S, R1, R2: Slovo; {Регистры АЛУ}RK: Komanda; {Регистр команд}RA: Address; {Счётчик адреса}Om: 0..2;{Регистр w}Err: Boolean;beginInput_Program; {Эта процедура должна вводить текст программы с устройстваввода в память по кнопке ПУСК}Om := 0; Err := False; RA := 1; {Начальная установка регистров}with RK dorepeat {Основной цикл выполнения команд}RK := Mem[RA].k;RA := (RA+1) mod (N+1);case KOP of {Анализ кода операции}1Так как наша учебная ЭВМ является не языком, а исполнителем алгоритмов, то в качестве метаязыка необходимо выбрать не просто формальный язык (например, язык синтаксических диаграмм), а формальный алгоритмический язык, т.е.
язык, правильные слова в котором являются записями алгоритмов для некоторого исполнителя.1000: { ПЕР }begin R1 := Mem[A3]; Mem[A1] := R1 end;01: { СЛВ }beginR1 := Mem[A2]; R2 := Mem[A3]; S.f := R1.f + R2.f;if S.f = 0.0 then OM := 0 elseif S.f < 0.0 then OM := 1 else OM := 2;Mem[A1] := S; { Err := ? }end;09: { БЕЗ }RA := A2;15: { МОД }beginR1 := Mem[A2]; R2 := Mem[A3];if R2.i = 0 then Err := True else beginS.i := R1.i mod R2.i; Mem[A1] := S;if S.i = 0 then OM := 0 elseif S.i < 0 then OM := 1 else OM := 2;endend;31: { СТОП } ;{ Реализация остальных кодов операций }elseErr := True;end; { case }until Err or (KOP = 31)end.Прокомментируем эту программу, описывающую работу учебной машины.
Отметим сначала,что некоторая трудность возникает при моделировании начального ввода программы в память учебной машины при нажатии кнопки ПУСК. В нашей модели для задания такого начального ввода мыиспользовали вызов процедуры с именем Input_Program, описание этой процедуры не приводится.1Для хранения машинных слов учебной машины мы описали тип данных Slovo, который является записью с вариантами языка Турбо-Паскаль. В такой записи на одном и том же месте памятимогут располагаться команды, длинные (32-битные) целые числа или же 32-битные вещественныечисла стандартного типа Single.2 Таким образом, этот тип данных позволяет нам реализовать впрограмме на Паскале неразличимость представления команд, целых и вещественных чисел учебноймашины.Наша программа ведёт себя почти так же, как учебная машина.
Одно из немногих мест, где этоповедение расходится, показано в тексте программы комментариями с вопросительным знаком, например, при реализации команды сложения вещественных чисел. Программа на Паскале при переполнении (когда результат сложения не помещается в переменную S) просто производит аварийноезавершение программы, а учебная машина сначала присваивает регистру Err значение 1, а затем(неаварийно) останавливает выполнение программы.Заметим, что наше формальное описание отвечает и на вопрос о том, как в учебной машинепредставляются целые и вещественные числа: точно так же, как в переменных соответствующих типов программы на Турбо-Паскале.
Это представление мы подробно изучим в нашем курсе несколькопозже.В нашей модели мы привели реализацию выполнение только некоторых типичных команд изязыка учебной машины. Реализацию остальных команд Вы легко можете выполнить сами.1В архитектуре ЭВМ принято выделять центральную часть, куда входит основная (оперативная) память ицентральный процессор. Вся остальная аппаратура ЭВМ относится к так называемой периферии (периферийным устройствам). Таким образом, наша модель на Паскале формально описывает только центральную частьучебной машины.2Более привычный для программистов тип real Турбо-Паскаля здесь не подходит, потому что имеетдлину 48 бит, а не 32 бита, как нам нужно.11Обратите также внимание, как в нашей модели вычисляется адрес следующей выполняемой команды: RA: = (RA+1) mod (N+1) .
Такое правило перехода к следующей по порядку командепрограммы позволяет считать, что память учебной машины как бы замкнута в кольцо: после выполнения команды из ячейки с адресом 511 (если это не команда перехода) следующая команда будетвыполняться из ячейки с адресом ноль. Такая организация памяти типична для многих современныхЭВМ.Вопросы и упражнения1.2.3.4.5.6.7.8.9.10.Что такое код операции?Для чего необходим регистр признака результата?Объясните, как в нашей учебной машине должна выполняться такая команда ввода массивавещественных чисел ВВВ 100 500 000 .
Напишите соответствующую ветвь в формальномописании УМ-3 для реализации команды ввода вещественных чисел.Реализуйте в модели на Паскале выполнение команд ввода/вывода учебной машины.Почему при программировании на языке машины не существуют константы, как, например, вязыке Паскаль?Что такое переменная с начальным значением и как такую переменную разместить в памятиучебной ЭВМ?Что такое псевдокод?Объясните, почему для машины УМ-3 при решении некоторой задачи нельзя сделать такоераспределение памяти: "Пусть массив X располагается в ячейках с адресами от 100 до 199, аконстанта n=100 – в ячейке с адресом 200" ?Что такое самомодифицирующаяся программа?Почему в учебной машине УМ-3 обработка больших массивов возможна только при помощисамомодифицирующейся программы?.