Язык машинных командТеперь познакомимся еще с одним принципом архитектуры ЭВМ, предложенным фон Нейманом. Он называется принципом хранимой программы.
Компьютер является исполнителем программ и, следовательно, обладает своей системой команд (СКИ).
Компьютеры разных типов имеют разную структуру команд.
В «УК Нейман» машинные команды имеют трехадресную структуру (формат). Это
значит, что ячейка, в кото-рой хранится команда, делится на четыре части (по
одному байту на каждую часть). Будем их обозначать следующим образом:
Операндами называют данные, над которыми производится операция. В арифметических операциях это слагаемые, сомножители, уменьшаемое и вычитаемое, делимое и делитель. Вот пример команды сложения двух чисел (в шестнадцатеричной форме):
01 — это код операции сложения; 44 — адрес первого слагаемого; 48 — адрес второго слагаемого; 4С — адрес ячейки, в которую помещается сумма. Для всех арифметических операций ответ на вопрос: «Какую команду выполнять следующей?» всегда одинаковый: следующей выполняется команда, находящаяся в следующей ячейке памяти. Записывать команды на бумаге удобнее в шестнадцатеричной форме. В памяти ЭВМ команда имеет двоичный вид. Используя двоично-шестнадцатеричную таблицу, легко получить внутреннее представление приведенной выше команды:
В ТАБЛИЦЕ 2 содержится система команд «УК Нейман». ТАБЛИЦА 2. Система команд «УК Нейман»:
Запись (А1) + (А2) => A3 надо понимать так: содержимое ячейки с адресом А1
сложить с содержимым ячейки с адресом А2 и результат записать в ячейку A3;
Рассмотрим пример небольшой программы на машинном языке. Пусть, например, требуется вычислить выражение Каждое число, участвующее в расчетах, занимает ячейку памяти. Программист должен сам распределять память под данные. Под величины А, В, С выделим следующие ячейки памяти: Результат вычисления выражения поместим в ячейку 2С. Команды программы тоже помещаются в определенные ячейки. Вот фрагмент программы, решающей нашу задачу:
В графе «Адрес» указываются номера ячеек, в которых располагаются команды. Команды этой программы выполняются в «естественном порядке» возрастания адресов ячеек: сначала ОС, затем 10 (еще раз напомним, что адреса ячеек меняются с шагом 4).
Ячейке 2С значение присваивается дважды: сначала результат суммирования, затем — умножения. Первый результат — промежуточный, второй — окончательный. Однако приведенная программа не может быть исполнена. Во-первых, не определены значения исходных данных А, В, С. Во-вторых, пользователь не сможет узнать результаты вычислений, поскольку они останутся внутри памяти, в ячейке 2С, а в нее не заглянешь. Исходные данные должны задаваться вводом.
Результаты вычислений должны быть выведены.
Вывод делает результаты выполнения программы доступными для пользователя. Устройством ввода на «УК Нейман» является клавиатура. Устройством вывода — экран. В «УК Нейман» ввод и вывод организованы следующим образом: с клавиатурой и экраном связана последняя ячейка памяти — ячейка FC. Будем называть ее буферной ячейкой ввода-вывода. При вводе набираемое на клавиатуре значение попадает в ячейку FC. На экране постоянно отражается содержимое ячейки FC в шестнадцатеричном виде. Поэтому для вывода значения из любой ячейки памяти его надо переслать в буферную ячейку FC. Из ТАБЛИЦЫ 2 следует, что команда пересылки имеет вид:
В этой команде содержимое адреса А2 не влияет на ее исполнение (в дальнейшем на месте А2 будем писать нули). В результате выполнения команды пересылки значение в ячейке A3 становится равным (А1). При этом значение ячейки А1 не меняется. Иначе это называется так: ячейке A3 присваивается значение ячейки А1.
Поясним на примере. Пусть в 10-й ячейке находится число 5, а в 20-й ячейке число 7:
После выполнения команды их значения станут одинаковыми:
В рассмотренной выше задаче вычисления (А + В) * Сна экран нужно вывести результат, полученный в ячейке 2С. Для этого его следует присвоить ячейке FC. Значит, команда вывода будет такой: Как запрограммировать ввод значения А в ячейку 20? Делается это так: Процессор, обнаружив команду, у которой КОП=00 и A1=FC, прерывает работу и ждет действий пользователя. Пользователь набирает на клавиатуре вводимое число. Это число заносится в ячейку FC и одновременно высвечивается на экране. Затем пользователь нажимает клавишу <ВВОД>. Процессор выполняет команду пересылки из ячейки FC в ячейку 20. Ввод завершился, процессор переходит к выполнению следующей команды. Запишем команды ввода и вывода в общем виде: А теперь запишем программу вычисления выражения (А+В) * С в окончательном виде. Договоримся, что любая программа будет располагаться в начале памяти. Первая команда всегда находится в ячейке 00.
В ячейке 18 находится команда останова с кодом операции 77. Результат ее
Коротко о главномПрограмма, управляющая работой компьютера, помещается в его оперативную память. В машинной команде заключена следующая информация: какая выполняется операция, где хранятся операнды, куда поместить результат, какую команду выполнять следующей (если нет указания, то следующей выполняется команда, расположенная в следующей ячейке). Машинная команда состоит из кода операции (КОП) и адресной части. «УК Нейман»имеет трехадресную структуру команды: КОП A1 A2 A3. Для арифметических операций А1 и А2 — адреса операндов, A3 — адрес результата. Исходные данные вводятся в память по команде ввода, результаты выводятся по команде вывода. Вопросы и задания
|