Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
Согласно принципу Неймана - принципу хранимой в памяти программы, наряду с данными в оперативную память компьютера помещается программа управления его работой. Способ представления программы "понятный" процессору ЭВМ называется языком машинных команд – ЯМК. Программа на ЯМК реализует алгоритм решения вычислительной задачи на компьютере-исполнителе. У любого исполнителя есть своя СКИ. Опишем систему команд УК "НЕЙМАН". Машинная команда должна содержать в себе ответы на следующие вопросы:
В УК "Нейман" машинные команды имеют трехадресную структуру (формат). Это значит, что ячейка, в которой храниться команда, делится на 4 части (по одному байту на каждую часть). Будем их обозначать следующим образом: КОП - код операции, А1 - адрес первого операнда, А2 - адрес второго операнда, А3 - адрес результата.
Операндами называют данные, с которыми производится операция. В арифметических операциях это слагаемые, сомножители, уменьшаемое и вычитаемое, делимое и делитель. Вот пример команды сложения двух чисел:
Для всех арифметических операций ответ на вопрос "Какую команду выполнять следующей?" всегда одинаковый: следующей выполняется команда, находящаяся в следующей ячейке. Записывать команды будем в шестнадцатеричной форме. В памяти ЭВМ команда имеет двоичный вид. Используя связь между двоичной и шестнадцатеричной системами, легко получить внутреннее представление приведенной команды.
В табл.1 содержится система команд УК "НЕЙМАН". Запись (A1) + (A2) ==> A3 надо понимать так: содержимое ячейки с адресом A1 сложить с содержимым ячейки с адресом A2 и результат записать в ячейку A3; (A1) ==> A3 - содержимое ячейки A1 занести (скопировать) в ячейку A3.
Каждое число, участвующее в расчетах, занимает ячейку памяти. Программист должен сам распределять память под данные. Команды программы тоже занимают память. Пусть, например, требуется вычислить выражение Под величины А, В, С выделим следующие ячейки памяти:
В графе "Адрес" указываются номера ячеек, в которых располагаются команды. Команды этой программы выполняются в "естественном порядке" возрастания адресов: сначала 0С, затем 10. Ячейке 2С значение присваивается дважды: сначала результат суммирования, затем - умножения. Первый результат - промежуточный, второй - окончательный. Однако эта программа не может быть исполнена. Во-первых, не определены значения исходных данных А, В, С. Во-вторых, пользователь не сможет узнать результаты вычислений, поскольку они останутся внутри памяти, в ячейке 2С, а в нее не заглянешь. Исходные данные задаются вводом. Устройством ввода на УК "НЕЙМАН" является клавиатура. Результаты вычислений должны быть выведены. Вывод делает результаты выполнения программы обозримыми для пользователя. Устройством вывода на УК "НЕЙМАН" является дисплей. Договоримся о следующем способе организации ввода-вывода. С клавиатурой и дисплеем связана последняя ячейка памяти УК "НЕЙМАН" - ячейка FC. Будем называть ее буферной ячейкой ввода-вывода. При вводе набираемое на клавиатуре значение попадает в ячейку FC. На дисплее постоянно отражается содержимое ячейки FC в шестнадцатеричном виде. Поэтому для вывода значения из любой ячейки памяти его надо переслать в буферную ячейку FC. В УК "НЕЙМАН" ячейка FC выполняет роль своеобразной видеопамяти. На индикаторе пользователь всегда видит содержимое ячейки FC. Структура команды пересылки следующая:
Эта команда, фактически, двухадресная. Содержимое второго адреса (А2) не влияет на ее исполнение (в дальнейшем на месте второго адреса будем писать нули). В результате выполнения команды пересылки значение в ячейке А3 становится равным (А1). При этом значение в ячейке А1 не меняется. Иначе это называется так: ячейке А3 присваивается значение ячейки А1. Поясним на примере. Пусть в 10-й ячейке находится число 5, а в 20-й ячейке число 7:
После выполнения команды их значения станут одинаковыми
В рассмотренной задаче на дисплей нужно вывести результат вычислений, полученный в ячейке 2С. Для этого его следует присвоить ячейке FC. Значит, команда вывода будет такой: А как запрограммировать ввод значения А в ячейку 20? Делается это так: Процессор, обнаружив команду, у которой КОП=00 и А1=FC, прерывает работу и ждет действий пользователя. Пользователь набирает на клавиатуре вводимое число. Это число заносится в ячейку FC и, одновременно, высвечивается на дисплее. Затем пользователь нажимает клавишу <ВВОД>. Процессор выполняет команду пересылки из ячейки FC в ячейку 20. Ввод завершился, процессор переходит к выполнению следующей команды. Запишем команды ввода и вывода в общем виде:
А теперь запишем программу вычисления выражения (А+В)С в окончательном виде. Договоримся, что любая программа будет занимать ячейки в начале памяти. Первая команда всегда находится в ячейке 00. Таблица 2
В ячейке 18 находится команда останова с кодом операции 77. Результат ее выполнения - остановка работы машины. Содержимое адресной части в этой команде не имеет значения. Предположим, что по этой программе мы хотим вычислить выражение при А=26, В=74, С=3. Как же происходит исполнение программы? Процессор начинает исполнять программу с команды, находящейся в ячейке 00. В нашей программе это команда ввода А. ЭВМ останавливается и ждет действий пользователя. Пользователь набирает на клавиатуре шестнадцатеричный код числа 26: После нажатия клавиши <ВВОД> число 26 введено в ячейку 20. Следующая команда требует ввода значения В. Пользователь вводит: Последним вводится значение С: Следующие команды программы выполняются автоматически. После выполнения команды вывода (ячейка 14) происходит остановка. Она нужна для того, чтобы пользователь успел разглядеть результат на дисплее, если в программе несколько команд вывода. Для введенных значений исходных данных результат на дисплее будет таким: Программа продолжит исполнение после нажатия клавиши <ВВОД>. Работа программы завершится по команде останова. Полученный результат - это шестнадцатеричная форма внутреннего представления. Чтобы получить ответ в десятичной системе, нужно выполнить перевод 16 ==> 10. Наверняка у читателя не вызвало энтузиазма то, что числа вводятся и выводятся в шестнадцатеричном виде. Выполняя расчеты на современных ЭВМ, пользователь имеет дело с десятичными числами. Про двоичную и шестнадцатеричную системы он может вообще ничего не знать. Но не надо забывать, что наш компьютер - учебный. На его примере мы стремимся понять, как работает ЭВМ. Родной язык компьютера - это язык машинных команд и двоичных чисел. Автоматический перевод чисел из двоичной в десятичную систему и обратно производится с помощью специальных программ перевода, а это уже программный сервис. Но мы сейчас рассматриваем ЭВМ, лишенную всякого программного обеспечения. С такой машиной можно общаться только на языке двоично-шестнадцатеричных кодов. © И.Г.Семакин, 2001 Полный текст статьи в виде документа MS Word можно загрузить здесь. © Оформление Web-страницы Е.А.Еремин, 2001 |