Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
Моделирование работы ЭВМ при помощи табличного процессора ExcelКак известно, любой универсальный табличный процессор пригоден для моделирования самого широкого круга задач, причем не обязательно чисто вычислительных (см., например, статьи [1-4]). Возможности пользователей еще более возрастают, если электронные таблицы имеют встроенный язык программирования. Широко распространенный в нашей системе образования программный продукт MS Excel, базирующийся на мощной системе программирования Visual Basic, не является в этом отношении исключением. Хотя наиболее часто областью задач все же является экономика [5], для образовательных целей заметный интерес как раз представляют примеры «неэкономического» содержания. Творческие преподаватели разработали большое количество таких примеров; в частности, в Интернете можно отыскать огромное разнообразие подобных моделей, начиная от размножения кроликов [6] до демонстрации осцилограм напряжения [7]. В связи с этим подбор тематики заданий для моделирования являет собой определенную методическую проблему: из широчайшего перечня доступных задач надо выбрать интересные, познавательные, соответствующие уровню знаний учеников и т.д. В данной статье в качестве одного из достойных внимания вариантов предлагается для углубления знаний учеников в области информатики смоделировать наиболее важные принципы работы ЭВМ. В новом стандарте знаний по школьному курсу информатики [8] (попутно заметим, что он отличается некоторым уменьшением внимания к устройству компьютера) предусмотрено изучение программного принципа работы ЭВМ, так что имитация процесса исполнения программы есть задача безусловно полезная. Моделирование в данной статье базируется на применении макросов MS Excel. При изложении предполагается, что читатели знакомы с основами языка Basic, способны набрать простейшую программу макроса и подключить ее к созданной кнопке. В противном случае можно обратиться к весьма распространенным учебникам [9-10] или к одной из имеющихся в распоряжении книг по MS Excel, например, [11]. В качестве основы для изучения удобно взять наиболее простую из моделей, которые описываются в учебной литературе. Если проанализировать школьные учебники, то с позиции простоты устройства выбор практически неизбежно будет сделан в пользу ЭВМ «Кроха» [12]. Данная модель «по духу» близка к ЭВМ первых двух поколений, что делает ее несколько устаревшей, но зато по простоте и наглядности она не имеет себе равных. Поскольку главной целью нашего моделирования является на основе простейших методов изучить наиболее общие принципы работы вычислительной машины, то, по мнению автора, для этих целей «Кроху» можно признать вполне подходящей. Опишем кратко учебную ЭВМ «Кроха», на базе которой мы будем моделировать в Excel фундаментальные принципы исполнения программы. Учебная ЭВМ «Кроха»Максимально простую модель для изучения ЭВМ предложил в своем учебнике информатики [12] коллектив авторов из Екатеринбурга. Она не случайно была названа «Крохой» – в памяти этой машины всего восемь(!) ячеек и она способна выполнить столько же различныхnопераций. Но, несмотря на столь примитивное устройство, «Кроха» дает весьма правильное представление о наиболее общих и принципах работы ЭВМ. В частности заметим, что на базе этой, казалось бы, примитивной модели при некоторой модификации удается создать демонстрационный компилятор с языка Паскаль [13]. Не видно никакой принципиальной причины, по которой описанную в статье методику моделирования нельзя применить к более сложной машине: ничто, кроме трудоемкости, не может помешать, например, создать в Excel модель реального компьютера на базе процессора фирмы Intel. Основу модели «Кроха» составляет оперативная память. Кстати в классической работе по описанию основ работы ЭВМ [14], до сих пор не утратившей своего фундаментального значения, роль организации памяти в конструкции машины в целом также подчеркивалась особо: «Мы начинаем с рассмотрения органа памяти, так как наш опыт показывает, что выбор данного элемента в качестве элементарной ячейки памяти более или менее определяет также и значительную часть организации машины». На количество ячеек ОЗУ и их разрядность заметное влияние оказывает структура машинной команды. В частности, если взять за основу наиболее наглядную трехадресную систему команд, которая обычно применялась в первых ЭВМ (очевидно, что все арифметические операции имеют два операнда и результат), то разрядность команды будет существенным образом зависеть от максимальной длины адреса ячеек. Поскольку, как упоминалось выше, ОЗУ «Крохи» состоит из восьми ячеек, для их нумерации достаточно трех двоичных разрядов (23 = 8). Кроме того, естественно положить длину кода операции также равную трем битам. В итоге общая длина команды составит 12 двоичных разрядов: три адреса и код операции по три разряда каждый.
Длину обрабатываемых чисел также удобно принять равной 12 битам. Для выполнения арифметических операций в ЭВМ «Кроха» служит специальный регистр – сумматор. Он символизирует собой арифметико-логическое устройство – АЛУ, которое в реальной ЭВМ, разумеется, гораздо сложнее. Все команды в вычислительной машине должны выполняться автоматически, что обеспечивается отдельным узлом – устройством управления УУ. В его состав в «Крохе» входит счетчик команд, отслеживающий движение по программе и запоминающий номер очередной команды, а также регистр команд, где хранится исполняемая в данный момент команда. Подробнее механизм выполнения программы будет рассмотрен ниже. Напомним, что АУ и УУ в современных компьютерах объединяются единый блок, который принято называть процессором. Наконец, в качестве устройства вывода у «Крохи» имеется мини-дисплей, на котором могут отображаться значения трех чисел. Устройства ввода модели в учебнике не конкретизируются, видимо по умолчанию полагается, что это некий специализированный пульт управления. Ввод данных в ОЗУ «Крохи» не связан с наличием какой-либо инструкции программы. На первый взгляд это может показаться удивительным, но во многих старых моделях вычислительных машин именно так и было: адрес ОЗУ и его содержимое набирались на пульте с помощью специальных переключателей, причем машина при этом находилась в остановленном состоянии. Еще более удивительным оказывается тот факт, что подобная «древняя» философия прекрасно согласуется с технологией ввода данных в электронную таблицу: набор идет непосредственно в ее ячейки и затем табличный процессор производит необходимые вычисления. Полная система команд учебной ЭВМ «Кроха» приводится в следующей таблице.
Содержание арифметических операций над целыми положительными числами очевидно из таблицы. «Кроха» также имеет два условных перехода (когда результат последней операции равен нулю или если он больше нуля), которые обеспечивают возможность программирования развилки или цикла. Наконец, наиболее экзотически смотрится последняя команда: она не просто останавливает машину, но предварительно выводит содержимое ячеек с указанными адресами на дисплей. И хотя такой команды в реальной ЭВМ по многим причинам не бывает, подобная специфическая универсальная инструкция позволяет уложиться в выбранное количество команд. Рассмотрим теперь подробнее, каким образом «Кроха» выполняет программу, что обязательно нам потребуется в процессе проведении моделирования. При пуске счетчик всегда устанавливается в ноль, так что исполнение программы всегда начинается с нулевого адреса. Далее машина следует приведенному ниже несложному алгоритму:
Вследствие особой важности, сформулированный выше алгоритм имеет специальное название – его часто называют основным алгоритмом работы процессора. Наличие подобного алгоритма является неотъемлемым свойством классической фон-неймановской архитектуры, которая с некоторыми модификациями продолжает использоваться до сих пор. Нетрудно понять, что благодаря основному алгоритму процессор способен автоматически выполнять последовательно расположенные в памяти инструкции программы. Однако чисто линейные программы на практике встречаются довольно редко – необходимы еще разветвляющиеся, обеспечивающие разные действия в зависимости от получившихся в ходе обработки результатов, и циклические, организующие многократное повторение тех или иных фрагментов программы. Такими средствами являются инструкции переходов. Их суть состоит в том, что на этапе 3 в случае выполнения указанного условия происходит замена текущего содержимого счетчика команд на значение, закодированное в инструкции перехода. Таким путем осуществляется нарушение естественной последовательности команд и происходит переход на любой произвольный фрагмент программы. Описанные выше принципы выполнения программы на ЭВМ «Кроха» и будут служить предметом моделирования в табличном процессоре Excel. Завершая описание учебной ЭВМ «Кроха», рассмотрим пример программы для нее. Данный пример пригодится нам в дальнейшем в качестве тестового для проверки работоспособности нашей модели. Реализуем традиционную задачу – вычисление значения факториала числа n. Обозначим k рабочую переменную, которая является текущим множителем для факториала и меняется от 1 до n. Начальное значение k придется задавать перед каждым запуском «вручную», т.к. для команды пересылки константы 1 из ячейки 7 в ячейку 4 у «Крохи» уже не хватает памяти. То же самое можно сказать и про начальное значение n!, которое перед каждым запуском естественно установить равным 1. Не забудьте также в ячейку 6 занести число n + 1, которое является верхней границей цикла (цикл будет выполняться, пока k < n+1 и, следовательно, завершится после умножения на n).
При работе с программой полезно обратить внимание на эффект переполнения, который для быстрорастущего выражения типа факториал достигается довольно быстро. В самом деле, как подробно обсуждается в учебнике [12], максимально допустимое число для 12-разрядной «Крохи» равняется 4095. Таким образом, уже попытка вычислить 7! = 5040 приводит «Кроху» к непреодолимым вычислительным трудностям. Моделирование ЭВМ «Кроха» в ExcelПерейдем к непосредственному моделированию описанной в предыдущем разделе учебной ЭВМ «Кроха». Прежде всего подчеркнем, что для реализации даже простейшей автоматически работающей модели наличие внутреннего языка программирования является обязательным; в частности, Visual Basic в Excel содержит более чем достаточное для наших целей количество разнообразных языковых средств. И еще одно важное для понимания дальнейшего замечание. Хотя оригинальная «Кроха» для наглядности описывается в двоичной системе (см. [12]), при моделировании в Excel удобнее воспользоваться восьмеричной; в последнем случае команда представляет собой четыре восьмеричных цифры, причем каждая из них соответствует отдельной части команды (см. рис.1). С точки зрения простоты представления команд это обстоятельство необычайно удобно. Реализацию «Крохи» в клетках электронной таблицы начнем с планирования назначения ячеек. Предусмотрев место под заголовки и тексты пояснений, разместим ячейки памяти учебной ЭВМ в блоке ячеек B4:E11. Количество строк очевидным образом равняется числу ячеек, причем любая из них делится на четыре части: код операции и три адреса. Таким образом, при наборе команды каждая из четырех цифр заносится в отдельную клетку, как это сделано на рис.2. ![]() Рис.2. Общий вид ЭВМ «Кроха» в электронной таблице Рядом с ОЗУ в группе клеток F4:G6 разместим дисплей, отображающий содержимое адресов ОЗУ в восьмеричной и десятичной системах счисления. Наконец, в строках 13-15 расположим описанные в предыдущем разделе регистры АЛУ и УУ. Отметим, что все нижележащие строки есть просто справочный материал. Картину завершают две кнопки управления Start и Step, первая из которых служит для запуска исполнения всей программы, а вторая – только одной ее очередной команды. Последняя возможность позволяет производить пошаговое выполнение программы, что особенно удобно при отладке. После выделения цветом фона ячеек, соответствующих различным устройствам машины, и нанесения необходимых подписей перейдем к написанию программы. Ее назначение состоит в том, чтобы реализовать исполнение основного алгоритма «Крохи». Полный листинг программы приводится ниже.
Объясним главные моменты устройства приведенной программы. Константы, описанные в начале программы, обеспечивают возможность легко передвинуть функциональные блоки «Крохи» по электронной таблице. Например, для авторской реализации ячейки ОЗУ расположены начиная с четвертой строки, а счетчик команд находится в тринадцатой. Далее в листинге следуют вспомогательные процедуры и функции:
Собственно логика функционирования учебной ЭВМ «Кроха» сосредоточена в двух основных процедурах, каждая из которых связана со своей кнопкой. Первая – do_command – выполняет одну очередную операцию (процедура вызывается по кнопке Step, т.е. шаг). Вторая – do_program – организует полное выполнение программы, производя все подготовительные действия и циклически вызывая предыдущую процедуру. Прекращение выполнения обеспечивается установкой у переменной doing значения false. Данное действие обеспечивается внутри процедуры do_command по команде стоп или в случаях аварийных ситуаций типа деления на ноль. С точки зрения целей нашего моделирования следует подчеркнуть, что процедура do_command отчетливо повторяет основной алгоритм работы процессора, описанный выше. Используя имеющиеся в тексте листинга комментарии, легко проследить основные этапы выполнения команды: считывание очередной инструкции, увеличение счетчика команд и выполнение выбранной в регистр команд операции. Последний этап, в свою очередь, делится на извлечение адресов A1 и A2, их обработке согласно коду операции КОП и, если выбрана одна из арифметических инструкций или перепись, записи полученного результата. Команды перехода и остановки имеют определенную специфику выполнения: первые проверяют требуемое условие и в случае его выполнения заносят в счетчик величину A3, а инструкция останова обслуживает вывод всех трех своих адресов на дисплей. Таким образом, все разнообразие поведения при выполнении различных команд «Крохи» обеспечивается оператором выбора On KOP + 1 GoSub, где переменная KOP есть не что иное, как код исполняемой инструкции. Учитывая подробные комментарии, читателям нетрудно будет разобраться в приведенном листинге. Остается только ввести полученную программу. Для этого сначала создадим самый первый макрос, воспользовавшись меню Сервис → Макрос → Макросы... После этого внимательным образом наберем весь текст программы (напомним читателям, что в любой момент можно вернуться в редактор языка Visual Basic, нажимая сочетание клавиш <Alt> и <F11>). Наконец, последнее, что нам предстоит сделать – это связать управляющие кнопки с соответствующими процедурами. Учебная ЭВМ «Кроха» готова! {Готовую версию программы можно закачать здесь} Для тестирования введем программу вычисления факториала, которая была разобрана ранее (перед вводом полезно еще раз внимательно рассмотреть расположение информации в ячейках таблицы на рис.2). Нажмем кнопку Start и убедимся в том, что получился правильный результат. Итак, пользуясь табличным процессором MS Excel, мы смоделировали работу ЭВМ. Остается внимательно пронаблюдать за тем, как «Кроха» выполняет программу, обратив внимание на следующие моменты:
Таким образом, мы видим, что изучение описанной в статье задачи позволяет проиллюстрировать наиболее фундаментальные принципы устройства современных компьютеров. Учитывая простоту (даже, можно сказать, примитивность) модели «Кроха», такой результат для некоторых читателей может оказаться неочевидным. Ссылки
© Е.А.Еремин, 2006 Статья: Еремин Е.А. Моделирование работы ЭВМ с помощью программы Microsoft Excel. Информатика, 2006, N 21, с.37-40; N 22, с.42-45. |