Данному образовательному сайту пришлось несколько раз менять свое имя. С 2011 года доступ к нему обеспечивается по URL
http://educomp.runnet.ru

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта

Согласно принципу Неймана - принципу хранимой в памяти программы, наряду с данными в оперативную память компьютера помещается программа управления его работой. Способ представления программы "понятный" процессору ЭВМ называется языком машинных команд – ЯМК. Программа на ЯМК реализует алгоритм решения вычислительной задачи на компьютере-исполнителе. У любого исполнителя есть своя СКИ. Опишем систему команд УК "НЕЙМАН".

Машинная команда должна содержать в себе ответы на следующие вопросы:

  • какую операцию выполнить?
  • где находятся операнды?
  • куда поместить результат операции?
  • какую команду выполнять следующей?

В УК "Нейман" машинные команды имеют трехадресную структуру (формат). Это значит, что ячейка, в которой храниться команда, делится на 4 части (по одному байту на каждую часть). Будем их обозначать следующим образом: КОП - код операции, А1 - адрес первого операнда, А2 - адрес второго операнда, А3 - адрес результата.

КОП А1 А2 А3

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

Вот пример команды сложения двух чисел:

КОП А1 А2 А3
014448
где01 - это код операции сложения;
 44 - адрес первого слагаемого;
 48 - адрес второго слагаемого;
 4С - адрес ячейки, в которую помещается сумма.

Для всех арифметических операций ответ на вопрос "Какую команду выполнять следующей?" всегда одинаковый: следующей выполняется команда, находящаяся в следующей ячейке.

Записывать команды будем в шестнадцатеричной форме. В памяти ЭВМ команда имеет двоичный вид. Используя связь между двоичной и шестнадцатеричной системами, легко получить внутреннее представление приведенной команды.

КОПА1А2А3
00000001010001000100100001001100

В табл.1 содержится система команд УК "НЕЙМАН".

Запись (A1) + (A2) ==> A3 надо понимать так: содержимое ячейки с адресом A1 сложить с содержимым ячейки с адресом A2 и результат записать в ячейку A3; (A1) ==> A3 - содержимое ячейки A1 занести (скопировать) в ячейку A3.

Таблица 1.

КОПОперация Пояснение
00Пересылка (A1) ==> A3
01Сложение (A1) + (A2) ==> A3
02Вычитание (A1) - (A2) ==> A3
03Умножение (A1) x (A2) ==> A3
04Деление нацело (A1) div (A2) ==> A3 целая часть от деления
05Получение остатка
от деления нацело
(A1) mod (A2) ==> A3
остаток от деления нацело
0AУсловный переход Переход к ячейке A3 по регистру-признаку результата W=1
0BБезусловный переход Безусловный переход к ячейке A3
77Останов Прекращение выполнения программы
FFПустая команда При выполнении пропускается

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

Пусть, например, требуется вычислить выражение

( А + B ) x C.

Под величины А, В, С выделим следующие ячейки памяти:

А - 20, В - 24, С - 28.
Результат вычисления выражения поместим в ячейку 2С. Вот фрагмент программы, решающей эту задачу:

Адрес КОПА1 А2А3 Пояснение
0C 012024 2C(20) + (24) ==> 2C A+B
10 032C28 2C(2C) x (28) => 2C (A+B) x C

В графе "Адрес" указываются номера ячеек, в которых располагаются команды. Команды этой программы выполняются в "естественном порядке" возрастания адресов: сначала , затем 10.

Ячейке значение присваивается дважды: сначала результат суммирования, затем - умножения. Первый результат - промежуточный, второй - окончательный.

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

Исходные данные задаются вводом.

Ввод - это занесение данных в оперативную память через устройства ввода.

Устройством ввода на УК "НЕЙМАН" является клавиатура.

Результаты вычислений должны быть выведены.

Вывод - это отражение информации из оперативной памяти на устройствах вывода.

Вывод делает результаты выполнения программы обозримыми для пользователя. Устройством вывода на УК "НЕЙМАН" является дисплей.

Договоримся о следующем способе организации ввода-вывода. С клавиатурой и дисплеем связана последняя ячейка памяти УК "НЕЙМАН" - ячейка FC. Будем называть ее буферной ячейкой ввода-вывода.

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

В УК "НЕЙМАН" ячейка FC выполняет роль своеобразной видеопамяти. На индикаторе пользователь всегда видит содержимое ячейки FC.

Структура команды пересылки следующая:

00А1 - -А3

Эта команда, фактически, двухадресная. Содержимое второго адреса (А2) не влияет на ее исполнение (в дальнейшем на месте второго адреса будем писать нули). В результате выполнения команды пересылки значение в ячейке А3 становится равным (А1). При этом значение в ячейке А1 не меняется. Иначе это называется так: ячейке А3 присваивается значение ячейки А1.

Поясним на примере. Пусть в 10-й ячейке находится число 5, а в 20-й ячейке число 7:
10 20
5
 
7

После выполнения команды

00 10 00 20

их значения станут одинаковыми
10 20
5
 
5

В рассмотренной задаче на дисплей нужно вывести результат вычислений, полученный в ячейке . Для этого его следует присвоить ячейке FC. Значит, команда вывода будет такой:

00 2С 00 FC.

А как запрограммировать ввод значения А в ячейку 20? Делается это так:

00 FC 00 20.

Процессор, обнаружив команду, у которой КОП=00 и А1=FC, прерывает работу и ждет действий пользователя. Пользователь набирает на клавиатуре вводимое число. Это число заносится в ячейку FC и, одновременно, высвечивается на дисплее. Затем пользователь нажимает клавишу <ВВОД>. Процессор выполняет команду пересылки из ячейки FC в ячейку 20. Ввод завершился, процессор переходит к выполнению следующей команды.

Запишем команды ввода и вывода в общем виде:

00 FC - A3- ввод числа в ячейку А3
00 А1 - FC- вывод числа из ячейки А1

А теперь запишем программу вычисления выражения (А+В)С в окончательном виде. Договоримся, что любая программа будет занимать ячейки в начале памяти. Первая команда всегда находится в ячейке 00.

Таблица 2

Адрес КОП А1А2A3 Пояснения
00 00FC0020 ввод А
04 00FC0024 ввод В
08 00FC0028 ввод С
0C 0120242C A+B
10 032C282C (A+B)C
14 002C00FC вывод результата
18 77000000 Стоп

В ячейке 18 находится команда останова с кодом операции 77. Результат ее выполнения - остановка работы машины. Содержимое адресной части в этой команде не имеет значения.

Предположим, что по этой программе мы хотим вычислить выражение при А=26, В=74, С=3.

Как же происходит исполнение программы? Процессор начинает исполнять программу с команды, находящейся в ячейке 00. В нашей программе это команда ввода А. ЭВМ останавливается и ждет действий пользователя. Пользователь набирает на клавиатуре шестнадцатеричный код числа 26:

00 00 00 1А <ВВОД>.

После нажатия клавиши <ВВОД> число 26 введено в ячейку 20. Следующая команда требует ввода значения В. Пользователь вводит:

00 00 00 4А <ВВОД>.

Последним вводится значение С:

00 00 00 03 <ВВОД>.

Следующие команды программы выполняются автоматически. После выполнения команды вывода (ячейка 14) происходит остановка. Она нужна для того, чтобы пользователь успел разглядеть результат на дисплее, если в программе несколько команд вывода. Для введенных значений исходных данных результат на дисплее будет таким:

00 00 01 2С.

Программа продолжит исполнение после нажатия клавиши <ВВОД>. Работа программы завершится по команде останова.

Полученный результат - это шестнадцатеричная форма внутреннего представления. Чтобы получить ответ в десятичной системе, нужно выполнить перевод 16 ==> 10.

12С16 = 30010

Наверняка у читателя не вызвало энтузиазма то, что числа вводятся и выводятся в шестнадцатеричном виде. Выполняя расчеты на современных ЭВМ, пользователь имеет дело с десятичными числами. Про двоичную и шестнадцатеричную системы он может вообще ничего не знать. Но не надо забывать, что наш компьютер - учебный. На его примере мы стремимся понять, как работает ЭВМ. Родной язык компьютера - это язык машинных команд и двоичных чисел. Автоматический перевод чисел из двоичной в десятичную систему и обратно производится с помощью специальных программ перевода, а это уже программный сервис. Но мы сейчас рассматриваем ЭВМ, лишенную всякого программного обеспечения. С такой машиной можно общаться только на языке двоично-шестнадцатеричных кодов.


©
И.Г.Семакин, 2001
Полный текст статьи в виде документа MS Word можно загрузить здесь.
© Оформление Web-страницы Е.А.Еремин, 2001


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com