Научная статья на тему 'Модель компьютера фон Неймановской архитектуры, ориентированная на начальное обучение программированию'

Модель компьютера фон Неймановской архитектуры, ориентированная на начальное обучение программированию Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
675
170
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОМПЬЮТЕРНАЯ АРХИТЕКТУРА / АРХИТЕКТУРА ФОН НЕЙМАНА / ПРОГРАММИРОВАНИЕ / ЯЗЫКИ ПРОГРАММИРОВАНИЯ / ОБУЧЕНИЕ / МОДЕЛИ ОБУЧЕНИЯ / ПРОГРАММНОЕ МОДЕЛИРОВАНИЕ / НИЗКОУРОВНЕВОЕ ПРОГРАММИРОВАНИЕ / АССЕМБЛЕР / COMPUTER ARCHITECTURE / VON NEUMANN ARCHITECTURE / PROGRAMMING / PROGRAMMING LANGUAGES / LEARNING / LEARNING MODELS / PROGRAM MODELING / LOW-LEVEL PROGRAMMING / ASSEMBLER

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Тлюстен Валерий Шахамболетович

Предложена схема построения простейшего компьютера фон Неймановской архитектуры, ориентированного на использование при начальном обучении студентов информатике и программированию. Приведена общая аппаратная структура и система команд компьютера. Обоснована целесообразность его применения в рамках общих начальных курсов программирования.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Computer model of Von Neumann architecture focused on the initial learning computer programming

The paper proposes a scheme for the construction of the simplest Von Neumann architecture computer, which can be used during the initial training of students in informatics and programming. General hardware structure and command system of the computer are provided. The expediency of its application in the general initial programming courses is discussed.

Текст научной работы на тему «Модель компьютера фон Неймановской архитектуры, ориентированная на начальное обучение программированию»

УДК 004.43:378 ББК 32.973.26-18 Т 49

Тлюстен В.Ш.

Кандидат физико-матаиатических наук, доцент кафедры прикладной .математики и информационных технологий факультета .математики и компьютерных наук Адыгейского государственного университета, Майкоп, тел. (8772) 59-39-04, e-mail: val_t@mail.ru

Модель компьютера фон Неймановской архитектуры, ориентированная на начальное обучение программированию

(Рецензирована)

Аннотация

Предложена схема построения простейшего компьютера фон Неймановской архитектуры, ориентированного на использование при начальном обучении студентов информатике и программированию. Приведена общая аппаратная структура и система команд компьютера. Обоснована целесообразность его применения в рамках общих начальных курсов программирования.

Ключевые слова: компьютерная архитектура, архитектура фон Неймана, программирование, языки программирования, обучение, модели обучения, программное моделирование, низкоуровневое программирование, ассемблер.

Tlyusten V.Sh.

Candidate of Physics and Mathematics, Associate Professor of Applied Mathematics and Information Technologies Department of Faculty of Mathematics and Computer Sciences, Adyghe State University, Maikop, ph. (8772) 59-39-04, e-mail: val_t@mail.ru

Computer model of Von Neumann architecture focused on the initial learning computer programming

Abstract

The paper proposes a scheme for the construction of the simplest Von Neumann architecture computer, which can be used during the initial training of students in informatics and programming. General hardware structure and command system of the computer are provided. The expediency of its application in the general initial programming courses is discussed.

Keywords: computer architecture, Von Neumann architecture, programming, programming languages, learning, learning models, program modeling, low-level programming, assembler.

Введение

Повсеместно сложившаяся практика начального обучения программированию студентов естественно-научных, технических и университетских специальностей почти всегда основана на безусловном приоритете логического, машинно-независимого аспекта процесса разработки программного кода над аспектом его физической интерпретации в конкретной аппаратной среде.

Указанный приоритет реализуется, в частности, тем, что введение в предмет (т.е., собственно, обучение программированию) уже на самых ранних этапах учебного процесса преподаватель, как правило, осуществляет едва ли не исключительно за счет обучения студентов одному из высокоуровневых языков программирования (ЯП), оставляя за скобками вопросы структуры машинного кода, в который соответствующие программы транслируются.

Такой подход методически оправдан, отвечает тенденциям развития современных технологий разработки программ и обеспечивает наиболее быструю траекторию перехода к практическому программированию.

Вместе с тем, полный отказ от рассмотрения структуры, поддерживающей программный код физической исполнительной среды в самом начале процесса обучения предмету, имеет и отрицательный эффект. Он мешает пониманию того, что на самом деле происходит с программой, написанной, например, на Паскале при ее «запуске», вплоть до полной подмены в сознании обучаемого физической архитектуры компьютера, исполняющего программу, структурой самой этой программы и структурой ЯП, на котором эта программа написана.

Как следствие, в процессе «высокоуровневого обучения» без дидактической опоры остаются, а потому плохо усваиваются такие важнейшие понятия ЯП, как «компиляция», «объектный код», «оптимизация», «индекс», «переменная», «ссылочный тип», «блок», «динамическое распределение памяти» и др., суть которых наиболее адекватно могла бы раскрываться их физической интерпретацией в терминах машинной архитектуры (ячеек памяти, адресов, команд, процессорного времени и т. п.).

Осознание этой проблемы приводит к необходимости предварения основной, машинно-независимой («высокоуровневой») части курса программирования хотя бы кратким введением в принципы построения машинных архитектур на некотором конкретном и, желательно, типовом примере. При этом архитектуры реально существующих компьютеров (такие, например, как популярная архитектура на базе микропроцессора Intel 8086) для такого экспресс введения мало подходят в силу своей сложности и отягощенности многими техническими деталями непринципиального характера.

Очевидным выходом из этой ситуации может быть создание виртуальных низкоуровневых машин, сконструированных специально для целей обучения. Наиболее широко известным проектом такого рода является ставшая уже классикой машина MIX Д. Кнута [1].

При всех несомненных достоинствах архитектуры той же машины MIX (впитавшей существенные черты многих реальных компьютеров, отсюда и название - «смесь») и других подобного рода проектов, следует признать, что они, как правило, избыточны и ориентированы отнюдь не на новичков.

Для целей же экспресс ознакомления студентов с простейшей типовой архитектурой компьютера и элементарными принципами создания машинного кода, в рамках общих начальных курсов программирования и с учетом содержания современных образовательных стандартов по соответствующим специальностям нужна, на наш взгляд, другая модель. Сохраняя свойства архитектурной реалистичности и функциональной полноты, она должна быть предельно примитивной и легкой в освоении. Возможный вариант такой учебной модели, под условным названием МиК, предлагается ниже.

Общая структура МиК

Общий состав машины МиК, по части основных блоков, совпадает с типовой структурой любого компьютера фон Неймановского типа.

Основу аппаратной архитектуры МиК, как показано на рисунке 1, составляют процессор, оперативная память (ОП), состоящая из некоторого числа прямо адресуемых ячеек, и периферийные устройства - клавиатура (Kb) и дисплей (Dsp).

Процессор, в соответствии с главным его назначением, осуществляет алгоритмический процесс исполнения программы, в то время как сама эта программа, наряду с

*

обрабатываемыми ею данными , размещается в ОП. Клавиатура при этом используется

* Обрабатывает данные, конечно, процессор, действующий по программе, а не сама программа. Но, следуя сложившейся терминологии и с учетом полной предопределенности действий процессора структурой исполняемой им программы, мы, для краткости, будем употреблять выражения типа: «программа обрабатывает...», «программа работает...» и т.п.

для ввода в ОП исходной информации, а дисплей - для вывода и визуализации получаемых результатов.

Рис. 1. Аппаратная архитектура МиК

Структура процессора МиК

Рассмотрим теперь более подробно структуру процессора и ОП машины МиК.

Для реализации встроенного аппаратного алгоритма выполнения команд процессор МиК содержит два подблока: УУ - устройство управления и АЛУ - арифметикологическое устройство.

УУ выполняет административные функции и имеет в своем составе два регистра сверхбыстрой памяти - регистр адресов (РА) и регистр команд (РК).

В ходе выполнения программы, РА всегда содержит адрес (указание на место размещения в ОП) текущей команды, т.е. той команды программы, которая подлежит исполнению в рассматриваемый момент времени. В частности, предполагается, что перед началом выполнения (запуском) программы адрес первой ее команды, вручную, размещается в РА.

Сама текущая команда, для ее анализа и организации исполнения, предварительно копируется из ОП в РК.

АЛУ предназначено, собственно, для осуществления операций, «заказываемых» УУ, и включает в себя три регистра сверхбыстрой памяти: рабочий регистр (Ю), особый регистр, называемый сумматором (Б), и специальный регистр признака результата (').

Исходные данные к очередной операции готовятся в регистрах Б и Ю, а результат записывается в Б.

Помимо этого, основного результата в регистре Б, некоторые команды, в регистре ', формируют признак результата (ПР) - целое число -1, 0 или 1, выбираемое в зависимости от того, является ли результат выполненной операции отрицательным, нуле-

вым или положительным, соответственно. Анализируя ПР, команды условного перехода могут, в некоторых случаях, нарушать естественный порядок выполнения команд программы (т.е. порядок, соответствующий порядку их последовательного размещения в ОП), реализуя, тем самым, разветвления и циклы.

Структура памяти МиК

ОП МиК состоит из 10000 ячеек, пронумерованных десятичными числами из диапазона 0000-9999. Ячейки называются байтами, а их номера - адресами. Каждый байт в определенный момент времени может находиться в одном из 100 различных состояний, кодируемых двузначными числами 00, 01, ..., 99.

Любые два байта с последовательными адресами составляют более крупную единицу памяти - машинное слово. При этом адресом слова считается адрес первого из этих двух байтов (т. е. меньший адрес).

Например, два байта с адресами 0186 и 0187 образуют машинное слово, имеющее адрес 0186.

Слова используются для хранения единственного вида данных МиК - целых десятичных чисел. Не рассматривая здесь детали принятого при этом способа кодирования, мы просто констатируем, что полное множество целых чисел, любое из которых может быть записано в машинное слово МиК, составляет отрезок [-7999;+7999].

Как это и принято для фон Неймановского типа архитектур, собственно, обработка данных, сохраняемых в ОП, выполняется внутри процессора, куда они должны быть помещены непосредственно перед выполнением соответствующей операции. Именно этим целям, т. е. для запоминания исходных данных очередной операции, служат регистры Ю и Б.

Форматы команд МиК

Как упоминалось выше, наряду с данными, в ОП размещаются также и команды их обработки. Подобно данным команды хранятся в ОП в числовой десятичной форме и, в зависимости от их формата, могут занимать один или три байта. Адресом команды в ОП считается адрес первого (или единственного) из составляющих ее байтов. При этом, все команды, составляющие единую программу, размещаются в памяти строго последовательно, занимая в ней непрерывный участок фиксированной длины.

В МиК используются два формата машинных команд - одноадресный и ноль-адресный.

Команды одноадресного формата (формата Б1) занимают три байта и имеют следующую структуру (рис. 2):

Рис. 2. Одноадресный формат команд

В этой структуре:

«КОП» - код операции (двузначное неотрицательное целое число, занимающее первый байт);

«А» - адрес слова ОП (четырехзначное неотрицательное целое число, которое занимает следующие два байта).

Большая часть команд данного формата выполняется по схеме £:=£ # А, где ‘:=’

имеет смысл присваивания, а ‘#’ - соответствующая заданному значению «КОП» произвольная, бинарная операция МиК (такая, например, как сложение или вычитание). Т.е., используя в качестве операндов два числа, выбранных, соответственно, из сумматора и из слова ОП с адресом А, любая команда, отвечающая этой схеме, выполнит операцию и запишет полученный результат в сумматор, замещая его прежнее содержимое. При этом значение слова по адресу А непосредственно перед операцией автоматически будет скопировано в Я1. Ни содержимое регистра Я1, ни содержимое слова с адресом А в результате операции не изменятся.

Например, команда МиК «10 0572» означает: сложить (код операции сложения -10) содержимое сумматора с числом, выбираемым по адресу 0572; полученную сумму записать в сумматор на место первого из использованных слагаемых.

Команды ноль-адресного формата (формата Б0). Эти команды состоят только из кода операции и, занимая в памяти по одному байту, имеют тривиальную структуру (рис. 3).

КОП

Рис. 3. Ноль-адресный формат команд

Отсутствие адресной части в любой такой команде означает, что соответствующая операция либо вообще не требует операндов, либо ее операнды представлены регистрами, однозначно фиксированными для этой операции.

Например, команда ‘02’ означает: вывести (код операции вывода - 02) число из сумматора на дисплей или, в обозначениях Паскаля, выполнить присваивание RDsp := S (здесь, RDsp понимается как фиксированное имя специальной регистровой переменной, связанной с дисплеем так, что любое присваивание значения этой переменной приводит к отображению присвоенного значения на экране дисплея).

Система команд МиК

Рассмотрим теперь полную систему команд машины МиК. При этом, описывая команды, наряду с числовыми их кодами операций, будем приводить также мнемонические обозначения этих кодов.

Начнем с команд формата F0. Их всего три.

1. Команда ввода (коп - 01, мнемоника - ‘in’) работает так. В начале ее выполнения выдается запрос на ввод данных с клавиатуры. Далее выполнение команды приостанавливается в ожидании действий оператора.

После набора на клавиатуре вводимого числа (по мере набора оно отображается на экране дисплея) и нажатия клавиши Enter набранное число копируется (загружается) в сумматор и выполнение команды на этом завершается.

На основе введенного значения в зависимости от его знака (см. выше) формируется ПР.

Подобно тому, как информационный обмен между сумматором и дисплеем осуществляется через специальный регистр RDsp (см. выше), обмен между сумматором и клавиатурой предполагает использование другого специального регистра - RKb: информация о набираемом на клавиатуре числе попадает в RKb, а затем, после нажатия «Enter», копируется в сумматор.

2. Команда вывода (коп - 02, мнемоника - ‘out’). Она двойственна команде ввода и в результате своего выполнения показывает содержимое сумматора, отображая его на экран дисплея.

На основе выводимого значения здесь также формируется ПР.

3. Команда останова (коп - 99, мнемоника - ‘halt’) просто останавливает процесс выполнения той программы, в которой она встретилась.

Команд формата F1 - девять. Вот они.

1. Команда сложения (коп - 10, мнемоника - ‘add’). Добавляет к содержимому сумматора число, выбираемое из слова с указанным в команде адресом А. Сумма записывается в сумматор и на ее основе в регистре W формируется ПР.

2. Команда вычитания (коп - 11, мнемоника - ‘sub’). Вычитает из содержимого сумматора число, выбираемое из слова с указанным в команде адресом А. Разность записывается в сумматор и на ее основе в регистре W формируется ПР.

3. Команда сравнения (коп - 12, мнемоника - ‘стр’). Выполняется также, как и вычитание, но при этом разность нигде не сохраняется. Команда применяется только для формирования ПР, в зависимости от значения которого одна из последующих команд условного перехода (см. ниже) может изменить естественный порядок выполнения команд.

4. Команда загрузки (коп - 21, мнемоника - ‘ld’). В сумматор из ОП копируется (загружается) содержимое слова, имеющего указанный в команде адрес А. На основе загруженного значения, в регистре W формируется ПР. Например, если по адресу 0456 хранится число -55, то в результате выполнения команды «21 0456», в регистр S будет записано число -55, а в регистр W - число -1.

5. Команда выгрузки (коп - 22, мнемоника - ‘st’). Выполняет действие, противоположное загрузке, т.е. записывает (выгружает) в ОП по адресу А содержимое сумматора. На основе выгруженного значения в регистре W формируется ПР.

6. Загрузка адреса (коп - 23, мнемоника - ‘ld’). В сумматор копируется число, указанное в качестве адресной части А данной команды. Текущее содержимое W при этом не меняется. Команда, в частности, полезна для создания неотрицательных числовых констант. Например, после выполнения команды «23 0001» в сумматор попадет число 0001, т.е. единица.

7. Безусловный переход (коп - 30, мнемоника - ‘jmp’). Подобна предыдущей команде, но адрес А копируется не в сумматор, а в регистр РА, явным образом определяя тем самым адрес следующей для выполнения команды. Другими словами, осуществляется безусловная передача управления команде, записанной в ОП по адресу А. Текущее содержимое W при этом не меняется.

8. Условный переход по нулю (коп - 33, мнемоника - ‘jz’). Передается управление команде с адресом А, если текущий ПР=0. В противном случае, сохраняется естественный порядок выполнения команд, т.е. выполняется команда, записанная в ОП непосредственно за текущей. Содержимое W не меняется.

9. Безусловный переход по минусу (коп - 34, мнемоника - ‘jm’). Передается управление команде с адресом А, если текущий ПР<0. В противном случае, сохраняется естественный порядок выполнения команд, т.е. выполняется команда, записанная в ОП непосредственно за текущей. Содержимое W не меняется.

Ниже, все команды МиК сведены в таблицу 1. Обозначение IAI в этой таблице выражает числовое значение самого адреса А, а не соответствующего содержимого ОП.

Таблица 1

Система команд МиК

№ Название КОП Мне- моника Выпол- нение Комментарий

1 Ввод 01 in S: = Rxb Копирование вводимого значения с клавиатуры в сумматор; установка ПР

2 Вывод 02 out RDsp: = S Копирование выводимого значения из сумматора на дисплей; установка ПР

3 Останов 99 halt Stop Прекращение работы текущей программы

4 Сложение 10 add S := S + A Формирование в £ суммы и ПР в W

5 Вычитание 11 sub S := S - A Формирование в £ разности и ПР в W

6 Сравнение 12 cmp S - A Установка ПР разности; разность не сохраняется

7 Загрузка 21 ld S : = A Копирование в £ содержимого слова с адресом А; установка ПР

8 Выгрузка 22 st A: = S Копирование по адресу А содержимого £; установка ПР

9 Загрузка Адреса 23 ld S := /A/ Копирование в £ адреса А (как неотрицательной целой константы)

10 Переход 30 jmP Безусловный переход на команду с адресом А

11 Переход по нулю 33 jz если W=0, РА := /A/ Условный переход на команду с адресом А, если ПР, содержащийся в W, равен нулю

12 Переход по минусу 34 jm если W<0, РА := /A/ Условный переход на команду с адресом А, если ПР, содержащийся в W, меньше нуля

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Алгоритм выполнения машинных команд

Процессор, выполняя программу в машинном коде МиК, следует аппаратно реализованному алгоритму поведения, который для команд типа сложения в общих чертах выглядит так:

Шаг_1. УУ считывает из ОП в РК команду, адрес которой содержится в РА;

Шаг_2. К содержимому РА добавляется длина считанной команды (таким образом, в РА оказывается подготовленным адрес следующей команды);

Шаг_3. Из команды в РК вычленяется КОП (первый байт); если КОП соответствует команде останова (т.е. равен 99), процесс выполнения программы завершается, иначе выполняется следующий шаг;

Шаг_4. КОП посылается в АЛУ, которое настраивается на выполнение соответствующей операции;

Шаг_5. Из команды в РК вычленяется адресная часть (последующие два байта) и происходит обращение по указанному в ней адресу ОП;

Шаг_6. Содержимое слова по месту обращения к ОП передается в регистр Ю АЛУ (теперь уже в АЛУ все готово для выполнения операции, первый операнд которой содержится в сумматоре Б, а второй - в рабочем регистре Ю);

Шаг_7. АЛУ выполняет подготовленную предыдущими шагами операцию и записывает ее результат в Б; признак результата при этом записывается в ';

Шаг_8. УУ переходит к выполнению шага 1.

Тот же алгоритм в нотации Паскаля может быть записан следующим образом:

РК:=ОП[РА]; While (РК.КОП<>99) do Begin

PA:=PA+Length (РК); АЛУ.КОП:=РК.КОП; R1:=On[PKAap];

S:=S АЛУ.КОП R1;

End;

W:=OP(S АЛУ.ШП R1); РК:=ОП[РА];

{копировать в РК из ОП команду, расположенную по адресу, который представлен содержимым регистра РА} {пока РК не содержит команды останова, выполнять цикл ...}

{увеличить содержимое РА на длину текущей команды} {наслоить АЛУ на КОП текущей команды}

{переслать из ОП в рабочий регистр Я1 второй операнд} {выполнить операцию над содержимым Б и Я1 с записью результата в Б}

{записать в ' признак результата операции}

{загрузить в РК следующую команду}

В зависимости от выполняемой команды, описанный выше порядок действий процессора может несколько видоизменяться. Так, при выполнении, например, команды выгрузки ф), на шаге 6 происходит не выборка информации из слова по найденному адресу ОП, а наоборот, запись информации (содержимого £) по этому адресу.

Заключение

Остается добавить, что рассмотренная выше модель компьютера программно реализована в форме виртуальной МиК-машины, поддержана разработанным для нее языком ассемблера и в течение ряда лет используется при обучении студентов факультета математики и компьютерных наук Адыгейского государственного университета.

Иллюстративный пример учебной МиК-программы, вычисляющей функцию У:=2*\Х\-1, представлен в таблице 2.

Таблица 2

Пример ассемблерного МиК-кода и результата его компиляции

Код на ассемблере Комментарий Абсолютный код

La 1; s:=1 0000) 23 0001

St one; one:=1 0003) 22 0035

In; read(s) 0007) 01

St x; x:=s 0008) 22 0037

Jm M1; if x<0 then go to M1 0011) 34 0017

Jmp M2; goto M2 0014) 30 0026

M1: Sub x; s:=0 0017) 12 0037

Sub x s:=-x 0020) 12 0037

St x; x:=|x| 0023) 22 0037

M2: Add x; s:=2|x| 0026) 10 0037

Sub one; s:=2|x|-1 0029) 11 0035

Out; write(s) 0031) 02

Halt; stop 0032) 99

Дополнительные материалы по машинному языку и ассемблеру МиК, а так же примеры разработки МиК программ (в абсолютном коде и в языке ассемблера) можно найти на сайте http://it-starter.ru. Там же для зарегистрированных пользователей доступен МиК-интерпретатор и руководство к его использованию.

Примечания: References:

1. Кнут Д. Искусство программирования для 1. Knut D. The art of computer programming / ЭВМ / T. 1. Основные алгоритмы. М.: Мир, Vol. 1. Major algorithms. M.: Mir, 1976. 720 pp. 1976. 720 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.