
Общая структура программы в машинных кодах.
У разных вычислительных машин разный ассортимент выполняемых команд. Основными командами всех машин являются: арифметические команды, команды индексной арифметики и команды передачи управления. Команда состоит из адреса, количества используемых сумматоров, доначнительного разряда косвенной адресации и кода операции, конкретизирующего выполняемую операцию.
Программа в машинных кодах представляет из себя упорядоченную последовательность пронумерованных ячеек памяти. Память (программы) состоит из двух частей: рабочей и программной. Рабочая память предназначена для таблицы идентификаторов. В программной памяти размещаются команды для выполнения операций над величинами из рабочей памяти. Последовательность ячеек памяти – это чередование частей (кусков) рабочей и программной памяти. Для того чтобы перескочить через ячейки рабочей памяти, используются команды передачи управления. Таким образом, конец программной памяти предложения (куска) всегда конечен командой перехода.
В
сложных программах с подпрограммами
используют переход с возвратом. Переход
с возвратом – это переход, использующий
ячейку косвенной адресации, т.е. ячейку
в которой хранится адрес точки возврата
в основную программу.
Пример:
1
о
10о
2 о 11о
3 о 12о
4 о 13о
5
о
14о
6о 5о 15о
7 о Подпрограмма
8 о
9 о
Основная
программа
4о - ячейка, содержащая команду передачи управления;
15о - ячейка косвенной адресации памяти, т.е. ячейка 15о содержит адрес 5о возврата.
5о - ячейка точки возврата.
Замечание. Чтобы иметь возможность выполнять многократные переходы на подпрограммы, необходимо предусмотреть магазин ячеек косвенной адресации. Что уже относится к динамическим аспектам организации памяти.
Процесс выполнения программы в машинных кодах.
Основными устройствами вычислительной машины являются: исполнительное, запоминающее и управляющее. В управляющем устройстве содержится счетчик, в котором находится адрес команды, выполняемой следующей (счетчик команд – обозначен на рис.). Как уже говорилось, программа в машинных кодах – это упорядоченная последовательность адресов ячеек памяти. После исполнения любой команды (обозначим её адрес расположения через), не являющейся командой передачи управления, счетчик команд увеличивается на единицу и затем выполняется команда, имеющая адрес io+1. (См. рис. 1 и 2).
Исполнительно
устройство
Адресная
Код
часть операции
Счетчик
Команд
Запоминающее
устройство
Рис. 1. Код операции – передача управления. Адресная часть не содержит ссылок на индекс-регистр и косвенную адресацию.
Адресное
Исполнительное
арифметическое
устройство
устройство
Адресная
+UР
Код
часть операции
Счетчик
команд
Запоминающее
устройство
Рис. 2. Код операции – не передача управления. Адресная часть содержит ссылку на индекс – регитр.
Арифметические команды, содержащие адрес, осуществляются в два такта:
Управляющее устройство запускает процесс формирования адреса и его передачи в запоминающее устройство. На рис.1 и 2 представлены два метода (их гораздо больше) формирование адреса.
Первый метод (Рис. 1) – текущий адрес io получен из io-1 путем его увеличения на 1.
Второй метод (Рис.2) – текущей адрес получен:
а) из io – UР путем его увеличения на значение ИР. Этот метод используется, когда, например, необходимо перешагнуть через участок рабочей памяти основной программы.
Замечание 1. Здесь не идет речь о передачи управления. Передача управления производится только на подпрограмму (самостоятельный модуль).
б) io - результат косвенной адресации, т.е. io содержался в предыдущей команде. В этом случае адресная часть сразу передает io в запоминающее устройство (рисунок отсутствует ! См. книгу Ф. Бауэр и Г. Гооз).
Управляющее устройство на основании кода операции запускает исполнительное устройство, которое осуществляет необходимую переработку полученного из ячейки памяти запоминающего устройства (рис. 1, 2).
Действие команды передачи управления заключается в том, что значение счетчика команд устанавливается равным адресу, указанному в команде передачи управления (рис. 3).
Исполнительное
устройство
Адресная
Код
часть операции
Счетчик команд
Запоминающее устройство
Рис. 3. Код операции – передача управления.
Замечание 2. После передачи управления процесс обработки программы продолжается либо, схемам представленным на рис. 1, 2, либо каким-то другим. Поэтому в данной схеме (рис. 3) не задействовано исполнительное устройство.
Управляющее устройство наряду со счетчиком команд содержит еще командный регистр, в котором располагается код команды.
Первые вычислительные машины (фон Нейман) не имели адресного арифметического устройства до тех пор, пока рабочая и программная память не были полностью отделены друг от друга (Эйкен). Включение адресных арифметических устройств в структуру вычислительной машины (Шехер) позволило учесть индексацию и наличие многих уровней имен.
Полная структурная схема процессов обработки программы в вычислительном устройстве изображена на рис. 4.
Адресное
Исполнительное
арифметическое
устройство
устройство
рим Адресная +UР Код
часть
операции
+1
Счетчик
команд
Управляющее
устройство
Запоминающее
устройство
Примечание. рим – оператор извлечения содержимого какого-либо объекта или оператор разыменования – уменьшает (разыменовывает) уровень объекта на единицу.
Пример 1. const int n или конст. цел. N
n=5
x=рим n
х – имеет целый тип и равно 5.
Пример 2. х=рим у+7
х- равно содержимому «у» +7.
Пример 3. к=рим 545о+9
к – есть сумма значения, расположенного по адресу 545о и 9.
Пример 4. io=рим 34o+UP
Содержимое ячейки 34о есть адрес – косвенная адресация.