Учебный эмулятор процессора TOYCOMP
Д.С. Дубинин
Национальный исследовательский
Иркутский государственный технический университет
Рассматриваются основные принципы организации вычислительной машины и программирования на языке очень простой модели ЭВМ. Это упрощенная машина под названием TOYCOMP (сокращенное от Toy Computer - игрушечный компьютер), существующая в виде имитирующей программы, написанной на языке высокого уровня и использующейся в учебном процессе студентами специальности «Вычислительные машины, комплексы, системы и сети» при изучении курса «Машинно-ориентированные языки».
Ключевые слова: эмулятор; машинная команда; машинный код.
TRAINING EMULATOR OF THE TOYCOMP PROCESSOR
D. Dubinin, National Research Irkutsk State Technical University
This paper discusses the basic organizational principles of a computing machine and programming on a language of a very simple model of a computer.
Key words: emulator, computer instruction, machine code.
Курс «Машинно-ориентированные языки» по учебному плану специальности ЭВМ изучается на восьмом семестре и предназначен для обучения программированию непосредственно в машинных кодах.
К этому моменту студенты уже являются программистами, привыкшими к языкам высокого уровня. И это не может не формировать определённый образ мышления и стиль программирования, мешающий воспринять этот курс.
Изначально разработка программного обеспечения осуществлялась при помощи набора кода программы непосредственно в машинных кодах, системе команд конкретной вычислительной машины, которая интерпретируется непосредственно микропроцессором вычислительной машины.
Для облегчения трудоемкого программирования на машинных кодах был разработан мнемонический язык низкого уровня - ассемблер. Основа любого ассемблера в том, чтобы одна мнемокоманда (текстовое обозначение) соответствовала команде (или микрокоманде) вычислительного устройства. Применение ассемблера привело к моментальному появлению различного рода программного обеспечения, но так как в 1950-1970-е гг. основными пользователями компьютеров являлись НИИ и военные учреждения, то и задачи они выполняли узконаправленные. Недостатки ассемблеров выявились при первых же модернизациях вычислительных устройств. Все, что было ранее разработано сотрудниками, приходилось заново переписывать для новых процессоров.
Со временем программистам пришла мысль - создать язык программирования, который имел бы синтаксис, независящий от машинных кодов. Вначале он напоминал, скорее макросы для ассемблера - какая-нибудь примитивная команда заменялась одной или несколькими командами процессора.
После дело дошло до создания интуитивно понятного синтаксиса, где например, арифметическая формула использовала синтаксические обозначения арифметических операции: сложений (+), вычитания (-), умножений (*), деления (/) и т. д.
С помощью таких языков писались несложные программы, где не требовалось быстродействие и хватало объема памяти компьютера. Можно сказать, что такое предназначение языкам высокого уровня сохранилось и до сих пор - все, что некритично к качеству, быстродействию и объему создается на языках высокого уровня.
В отличие от языков высокого уровня ассемблер имеет сложность в обучении, то есть для качественного изучения требуются время и практика. Вопрос нехватки квалифицированных кадров до сих пор стоит очень остро среди производителей программного обеспечения.
TOYCOMP разработана исключительно в педагогических целях. Перед изучением современной вычислительной машины целесообразно познакомиться с TOYCOMP. Замена современной ЭВМ типа INTEL на TOYCOMP позволяет не рассматривать многие сложные характеристики реальной машины, часто неудобные для начального освоения, и облегчает переход от принципов программирования на языках высокого уровня к языкам низкого уровня.
учебный эмулятор процессор toycomp
Рис. 1
Главная форма программы TOYCOMP состоит из устройства ввода, центрального процессора (ЦП) и снова устройства вывода (рис 1). На форме сплошными линиями обозначена пересылка данных, а пунктирными - пересылка сигналов управления. В центральный процессор входят регистр команд (РК), счетчик команд (СК) и регистр, именуемый аккумулятором (АК). Регистры представляют собой специальные ячейки памяти, обмен информацией с которыми происходит с большой скоростью. Регистры имеют такой же размер, что и ячейки основной памяти. Регистр-аккумулятор является источником исходных данных и местом записи результатов выполнения многих команд TOYCOMP. Образно говоря, аккумулятор - это место, где происходит большинство основных событий во время вычислительного процесса. Другие два регистра будут рассмотрены ниже.
Память TOYCOMP состоит из последовательности отдельных ячеек, именуемых словами. В каждом слове памяти может содержаться целое четырехзначное число со знаком в диапазоне от -9999 до 9999. Память TOYCOMP состоит из 100 слов, к которым можно обращаться, используя в качестве их адресов целые числа от 0 до 99.
В общем случае команду TOYCOMP можно представить следующим образом: ААВВ, где АА - код операции (КОП), а ВВ - операнд, определяющий адрес ячейки памяти. Коды операции в TOYCOMP являются двузначными десятичными числами, адреса операндов являются также двухразрядными десятичными числами. Программа в машинных кодах TOYCOMP представляет собой последовательность четырехразрядных десятичных чисел. Поскольку TOYCOMP - машина с запоминаемой программой, то в ней отсутствует средства определения, является ли то или иное слово памяти - командой или данными. Любое слово, выбираемое процессором для выполнения, рассматривается им как команда. Какое слово памяти выполнять процессору следующим, определяется кодом предыдущей операции и реализованной в машине логикой управления последовательностью выполнения команд.
00 Останов
01 Загрузка в аккумулятор (пересылка содержимого ячейки памяти в АК)
02 Запись в память (пересылка содержимого АК в ячейку памяти)
03 Сложение
04 Вычитание
05 Умножение
06 Деление
07 Ввод (обеспечивает ввод числа с клавиатуры в ячейку памяти)
08 Вывод (обеспечивает вывод на дисплей числа из ячейки памяти)
09 Переход безусловный
10 Переход, если больше нуля
11 Переход, если равно нулю
Команды для выполнения арифметических действий в TOYCOMP просты по своей структуре и похожи одна на другую. При их выполнении предполагается, что значение первого операнда находится в аккумуляторе. Вторым операндом всегда является адресуемая в команде ячейка памяти. Результат выполнения операции помещается в аккумулятор, что приводит к уничтожению его предыдущего содержимого.
Программы загружаются в память TOYCOMP, начиная с адреса 0, всегда являющегося адресом первой команды программы. Если в программе отсутствуют команды перехода, то выполнение команд будет происходить последовательно, одна за другой: после команды с адресом 0 будет выполнена команда с адресом 1, и т. д. до тех пор, пока не встретится команда с кодом 00 (останов).
В эмуляторе предусмотрены основные процессорные прерывания (рис. 2 и 3):
1. Деление на 0.
2. Некорректный ввод данных.
3. Неизвестная операция.
4. Переполнение.
Рис. 2. Деление на 0
Рис. 3. Неверная команда
Таблицы "Память" и "Программа" имеют одно и то же содержание и существуют для удобства просмотра хода выполнения программы и наблюдения за памятью (область данных слева, сама программа справа).
Для изменения значения ячейки памяти достаточно навести указатель мышки на нужное поле в таблице "Память" или в таблице "Программа" и нажать левую кнопку, откроется окошко ввода кода программы (рис. 4).
Рис. 4. Окно ввода кода
Нажатие кнопки "Старт" на главной форме программы установит "Регистр команд" и поместит указатель текущей выполняемой команды (00) в таблицу "Программа", так же кнопка переименуется в "ReBoot", и текущее состояние памяти эмулируемой машины будет сохранено.
При нажатии кнопки "ReBoot" сбрасываются регистры ЦП, из таблицы "Программа" удаляется указатель и восстанавливается состояние памяти, бывшее до запуска программы, кнопка переименуется в "Старт".
Кнопка "Шаг" позволит выполнить текущую операцию и установить счётчики команд на 1 выше или на указанную командой ячейку памяти.
Результаты. Программа уже используется для обучения студентов специальности ЭВМ в 2011 г. По ходу внедрения программы выявлялись отдельные недостатки, которые были успешно устранены. Преподаватели отмечают повышение эффективности обучения и облегчение процесса адаптации при переходе от программирования на ЯВУ к машинно-ориентированным языкам. У студентов появляется более полное представление о принципах программного управления, свойствах ячеек памяти. Пошаговая эмуляция позволяет наблюдать за выполнением команд программы и состоянием регистров.
Библиографический список
1. Абель П. Язык ассемблера для IBM PC и программирования. М.: Высш. шк., 1992. 447 с.
2. Гук М. Процессоры Intel: от 8086 до Pentium II: Архитектура. Интерфейс. Программирование. СПб.: Питер, 1998. 220 с.