Turbo Pascal / Stud_2_1 / K / K1 / K1
.doc
13. УЧЕБНАЯ ВЫЧИСЛИТЕЛЬНАЯ МАШИНА K1
13.1 Архитектура ЭВМ K1
Структурная схема ЭВМ K1 приведена на рис.13. В состав ЭВМ K1 входят следующие узлы:
-
оперативная память MEMORY емкостью 512 16-разрядных ячеек;
-
девятиразрядный регистр адреса ячейки памяти RA;
-
шестнадцатиразрядный буферный регистр слова RS для временного хранения читаемой или записываемой информации;
-
девятиразрядный счетчик адреса команд SAK, предназначенный для хранения адреса следующей команды;
-
шестнадцатиразрядный регистр команд RK, хранящий выполняемую команду;
-
шестнадцатиразрядный аккумулятор AC для хранения промежуточных результатов выполнения программы;
-
шестнадцатиразрядный операционный регистр OR для временного хранения операнда;
-
арифметико-логическое устройство АЛУ, выполняющее операцию, заданную кодом операции команды;
-
шестнадцатиразрядный регистр результата RR, предназначенный для временного хранения результата операции, выполняемой АЛУ;
-
дешифратор кода операции DC;
-
четырехразрядный регистр признаков RP.
При выполнении арифметической операции первый бит RP устанавливается в «1», если ее результат отрицательный; второй бит устанавливается в «1» при нулевом результате этой операции; третий бит - при положительном результате; четвертый бит устанавливается в «1» в случае некорректности выполнения операции (переполнение регистра результатов RR или попытка деления на нуль).
Для логических операций производится лишь анализ результата на равенство нулю: RP[1] = 1, если результат операции не равен нулю; RP[2] = 1, если этот результат равен нулю.
В состав команды входят код выполняемой операции KOP (биты 1 – 5) и адрес ячейки памяти A (биты 6 – 16).
Адреса ячеек изменяются от 0 до 511 (от 00000000000 до 01100011111 в двоичной системе счисления). В нулевой ячейке памяти всегда находится нуль, содержимое этой ячейки можно только читать, но в нее ничего нельзя записывать.
Система команд ЭВМ K1, приведенная в табл.13, включает в себя:
-
команды загрузки и сохранения аккумулятора;
-
арифметико-логические команды;
-
команды сдвига;
-
команды управления порядком выполнения программы.
К арифметико-логическим командам относятся: сложение, вычитание, умножение, деление, вычитание модулей, сравнение, приращение, отрицание, конъюнкция, дизъюнкция, сумма по модулю 2.
Набор команд сдвига включает в себя сдвиг вправо арифметический и сдвиг влево арифметический.
В состав команд управления порядком выполнения программы входят: безусловный переход, условный переход по знаку «+», по знаку «-», по нулю и по признаку некорректности, команды останова и перехода к подпрограмме.
Таблица 13. Система команд ЭВМ K1
Код опер. |
Наименование
|
Признаки |
Выполнение команды |
||||
< |
= |
> |
нк |
||||
00000 |
Останов |
– |
– |
– |
– |
|
|
00001 |
Загрузка аккумулятора |
– |
– |
– |
– |
|
|
00010 |
Сохранение аккумулятора |
– |
– |
– |
– |
|
|
00011 |
Сложение |
+ |
+ |
+ |
+ |
|
|
00100 |
Вычитание |
+ |
+ |
+ |
+ |
|
|
00101 |
Умножение |
+ |
+ |
+ |
+ |
|
|
00110 |
Деление |
+ |
+ |
+ |
+ |
|
|
00111 |
Вычитание модулей |
+ |
+ |
+ |
– |
|
|
01000 |
Сравнение |
+ |
+ |
+ |
– |
|
|
01001 |
Отрицание |
+ |
+ |
– |
– |
|
|
01010 |
Конъюнкция |
+ |
+ |
– |
– |
|
|
01011 |
Дизъюнкция |
+ |
+ |
– |
– |
|
|
01100 |
Сложение по модулю 2 |
+ |
+ |
– |
– |
|
|
01101 |
Сдвиг вправо арифм. |
+ |
+ |
+ |
– |
|
|
01110 |
Сдвиг влево арифм. |
+ |
+ |
+ |
– |
|
|
01111 |
Безусловный переход |
– |
– |
– |
– |
|
|
10000 |
Усл.переход по знаку «+» |
– |
– |
– |
– |
|
|
10001 |
Усл.переход по знаку «-» |
– |
– |
– |
– |
|
|
10010 |
Усл.переход по нулю |
– |
– |
– |
– |
|
|
10011 |
Усл.переход по «нк» |
– |
– |
– |
– |
|
|
10100 |
Вызов подпрограммы |
– |
– |
– |
– |
См.описание |
|
10101 |
Приращение |
– |
+ |
+ |
+ |
|
Круглые скобки в графе «Выполнение команды» означают содержимое регистра или ячейки памяти. Например, запись А – это адрес ячейки, а (А) – содержимое ячейки с адресом А.
13.2 Выполнение команд в ЭВМ K1
В ЭВМ К1 используются шестнадцатиразрядные числа с фиксированной запятой (целые числа со знаком). Отрицательные значения таких чисел хранятся в дополнительном коде.
Выполнение команды начинается с загрузки содержимого ячейки памяти, адрес которой задан в SAK, в регистр команд RK. В этом случае значение адреса выполняемой команды из SAK переписывается в регистр адреса RA, по этому адресу читается содержимое соответствующей ячейки памяти MEMORY и через буферный регистр слова RS пересылается в регистр RK. Затем из RK выделяются поля KOP и AM. Для подготовки выборки следующей команды значение счетчика SAK увеличивается на единицу. Дешифратор DC анализирует значение KOP и определяет команду, которая должна выполняться в данный момент.
В команде «Загрузка аккумулятора» производится непосредственная передача информации из регистра RS в аккумулятор AC, в команде «Сохранение аккумулятора» - из AC в RS с последующей записью в заданную ячейку памяти. В выполнении этих двух команд АЛУ не участвует.
Команда «Приращение» увеличивает содержимое аккумулятора на значение адресной части А данной команды, при этом содержимое поля А предварительно переписывается в регистр OR. Результат операции записывается в выходной регистр RR и затем пересылается в аккумулятор AC.
Команды сдвига также ориентированы на аккумулятор. Особенностью арифметического сдвига, в отличие от логического, является то, что при сдвиге влево знаковый разряд не затрагивается, при этом освобождаемые в правой части аккумулятора разряды заполняются нулями; при сдвиге вправо разряд знака (0 или 1) распространяется на сдвигаемые разряды. Разряды, выходящие при сдвиге за пределы аккумулятора, теряются. Количество сдвигов определяется значением адреса A, который предварительно переписывается в операционный регистр OR из регистра команд RK.
Если A > 14, то сдвиг разрядов аккумулятора не выполняется; в этом случае по команде сдвига влево разряды 1..15 заполняются нулями, по команде сдвига вправо – значением разряда знака. Результат операции сдвига, как и операции «Приращение», записывается в регистр RR и сохраняется в аккумуляторе.
Во всех арифметико-логических операциях, кроме операции «отрицание», участвуют два операнда, расположенные на аккумуляторе AC и в операционном регистре OR. При этом адрес A, указываемый в регистре команд RK, используется по цепочке A – RA – Memory – RS для пересылки в регистр OR второго операнда. Получаемый результат операции временно запоминается в регистре результатов RR, после чего записывается в аккумулятор AC.
При выполнении операции «отрицание» производится инвертирование разрядов аккумулятора, а получаемый результат, как и в остальных арифметико-логических операциях, через регистр RR снова записывается в аккумулятор.
Команда “Сравнение” в основном аналогична команде “Вычитание”, но ее результат не записывается в аккумулятор, а влияет лишь на формирование регистра признаков RP.
Большинство команд, выполняемых в арифметико-логическом устройстве АЛУ, кроме непосредственного формирования своего результата, изменяют также все или часть битов регистра признаков RP, что используется в дальнейшем в АЛУ при выполнении команд условного перехода. Требуемые изменения регистра RP отражены в табл.13. Признак «нк» (некорректность операции) означает, что в результате выполнения данной операции возникает переполнение регистра результатов RR или же здесь отмечена попытка деления на нуль.
Символ “–” в графе признаков табл.13 определяет ситуацию, которая не может возникнуть в данной операции (например, некорректность при выполнении операции сдвига), или то, что данная операция не изменяет регистр RP (например, команда безусловного перехода).
Сущность изменения регистра RP рассмотрим на конкретном примере. Предположим, что в программе выполнена команда сложения и при этом получен положительный результат. Тогда в состояние «1» должен быть установлен лишь третий бит регистра RP, остальные биты должны быть сброшены на нуль.
Примечание. Если в команде, приведенной в табл.12, все три графы признаков отмечены символом “–”, то это означает лишь то, что при этом сохраняются предыдущие значения признаков (но не выполняется сброс их на нуль).
По команде безусловного перехода адрес A пересылается в счетчик SAK, после чего происходит выборка новой команды и ее выполнение.
Каждая из команд условного перехода, список которых приведен в табл.13, выполняет передачу управления по адресу A, если установлен в единицу соответствующий бит регистра RP.
Команда условного перехода по некорректности в реальных ЭВМ, как правило, выполняет переход на подпрограмму обработки прерывания. В ЭВМ K1 при выполнении данной команды, если RP[4]=1, достаточно вывести на экран сообщение об аварийном прерывании, указав при этом код операции и адрес команды, вызвавшей прерывание, после чего произвести останов ЭВМ.
При обращении к подпрограмме должны быть выполнены два действия: передача управления на начальный участок подпрограммы и возврат в вызывающую программу после отработки подпрограммы. Эта работа в ЭВМ K1 выполняется следующим образом.
При разработке подпрограммы в качестве ее первой команды нужно записать безусловную передачу управления по нулевому адресу, т.е. команду 01111000000000000, а в качестве последней команды – безусловную передачу управления на первую команду подпрограммы. Если обозначить адрес первой команды подпрограммы через k, то команда обращения к подпрограмме выполняет:
-
запись в адресную часть k-ой команды, т.е. первой команды подпрограммы текущего содержимого SAK, чем обеспечивается возврат в вызывающую программу;
-
безусловную передачу управления (k+1)-ой команде.
Все команды ЭВМ K1, кроме команд сдвига и приращения, используют прямую адресацию операндов. В командах сдвига применена непосредственная адресация, поскольку количество сдвигов определяется не содержимым ячейки памяти с адресом A, а непосредственно значением A. Аналогичная ситуация имеет место также в команде приращения.
Отсутствие индексной адресации вызывает необходимость непосредственно изменять команды, входящие в тело цикла, при их переадресации.
Предположим, что в ЭВМ K1 адрес операнда в команде сложения должен увеличиваться в каждом цикле на единицу. Поскольку адресная часть команды должна изменяться, то до начала работы цикла эту команду нужно восстановить, используя для этого ее исходное значение, записанное после команды останова. До начала цикла нужно также послать нуль в счетчик количества повторений этого цикла.
Ниже приведен пример описанной выше работы при вычислении выражения
При этом предполагается, что элементы массива Х расположены в смежных ячейках памяти.
Представим заданное выражение в виде
,
k+0 00001 00000000000
k+1 00010 <счетчик>
k+2 00010 < R >
k+3 00001 k+21
k+4 00010 k+6
k+5 00001 < R >
k+6 00011 < >
k+7 00010 < R >
k+8 00001 k+6
k+9 10101 00000000001
k+10 00010 k+5
k+11 00001 <счетчик>
k+12 10101 00000000001
k+13 00010 <счетчик>
k+14 01000 k+22
k+15 10001 k+5
k+16 00001 < 8 >
k+17 00101 < a >
k+18 00100 < R >
k+19 00010 < y >
k+20 00000 00000000000
k+21 00011 < x1 >
k+22 0000000000000101
k+23 0000000000001000
k+24 a = 31
k+25 x1 = 10
k+26 x2 = -15
k+27 x3 = 25
k+28 x4 = 40
k+29 x5 = 50
k+30 y
k+31 счетчик
k+32 R
Здесь k, k+1, … - условное обозначение адреса команды, < y > - обозначение адреса ячейки, отведенной для переменной y.
В конечной части цикла производится добавление единицы к адресной части изменяемой команды, добавление единицы к счетчику, после этого полученное значение счетчика сравнивается с его конечным значением и, если текущее значение меньше конечного, то с помощью команды условного перехода выполняется передача управления на начало цикла.
Из мнемонических соображений изменяемый адрес в команде k+6 обозначен символом “*”, чтобы четко организовать модификацию и восстановление изменяемой команды.
Для кода операции в машинной команде ЭВМ К1 отведено 5 разрядов, что позволяет иметь в составе системы команд команды. Для адреса в регистре RK отведено 11 разрядов, что позволяет иметь размер оперативной памяти ячеек. В то же время по описанию ЭВМ максимальный код команды равен , максимальный адрес ОЗУ равен . Следовательно, при записи машинных команд должны быть учтены указанные ограничения.
Предположим, что пусковой адрес программы задан равным . Тогда текстовый файл, подготовленный для загрузки машинных команд и обрабатываемых данных в память ЭВМ К1, будет иметь следующий вид (пусковой адрес представлен в 10 с/с, остальная информация – в 2 с/с и параллельно в 16 с/с):
20 20
0000100000000000 0800
0001000000110011 1033
0001000000110100 1034
0000100000101001 0829
0001000000011010 1034
0000100000110100 0834
0001100000101101 182D
0001000000110100 1034
0000100000011010 081A
1010100000000001 C801
0001000000011001 1019
0000100000110011 0833
1010100000000001 C801
0001000000110011 102A
0100000000101010 402A
1000100000011001 8819
0000100000101011 082B
0010100000101100 282C
0010000000110100 2032
0001000000110010 1032
0000000000000000 0000
0001100000101101 182D
0000000000000101 0005
0000000000001000 0008
0000000000011111 001F
0000000000001010 000A
1111111111110001 FFF1
0000000000011001 0019
0000000000101000 0028
0000000000110010 0032
Примечание. В состав текстового файла не включено содержимое ячеек <y>, <счетчик> и <R>, поскольку это содержимое формируется в программе, а не вводится извне.