Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Turbo Pascal / Stud_2_1 / G / G1 / G1

.doc
Скачиваний:
89
Добавлен:
03.03.2016
Размер:
635.4 Кб
Скачать

11. УЧЕБНАЯ ВЫЧИСЛИТЕЛЬНАЯ МАШИНА G1

11.1 Архитектура ЭВМ G1

Структурная схема ЭВМ G1 приведена на рис.11. В состав ЭВМ G1 входят следующие основные узлы:

  • оперативное запоминающее устройства ОЗУ емкостью 256 14-разрядных слов;

  • восьмиразрядный регистр адреса RA, определяющий номер ячейки памяти, с которой происходит взаимодействие в данный момент времени;

  • четырнадцатиразрядный регистр слова RS для временного хранения читаемой или записываемой информации;

  • восьмиразрядный счетчик адреса команд SAK, предназначенный для хранения адреса следующей команды;

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

  • два четырнадцатиразрядные регистры-аккумуляторы R1 и R2 для приема и хранения операндов;

  • арифметико-логическое устройство АЛУ, выполняющее операцию, заданную кодом операции команды;

  • дешифратор кода операции DC;

  • четырехразрядный регистр признаков завершения операции RP.

При выполнении арифметической операции первый бит RP устанавливается в «1», если ее результат отрицательный; второй бит устанавливается в «1» при нулевом результате этой операции; третий бит принимает значение «1» в случае некорректности выполнения операции (переполнение аккумулятора или попытка деления на нуль). Изменение состояния четвертого бита зависит лишь от команды «Инкремент ячейки». Указанные биты обозначены на схеме ЭВМ как признаки S, Z, C и E.

Для логических операций производится лишь анализ результата на равенство нулю: RP[1] = 1, если результат операции не равен нулю; RP[2] = 1, если этот результат равен нулю.

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

  • код выполняемой операции KOP (биты 1 – 4),

  • поле R (бит 5) задает регистр, используемый в качестве аккумулятора: R = 0 – регистр R1, R = 1 – регистр R2;

  • поле РА (бит 6) задает способ адресации: РА = 0 – прямая адресация; РА = 1 – косвенная адресация;

  • поле A (биты 7 – 14) содержит базовый адрес.

Адреса ячеек памяти изменяются от 0 до 255 (от 00000000 до 11111111 в двоичной системе счисления). В ячейке с нулевым адресом постоянно находится нуль, который можно только считывать.

Система команд ЭВМ G1, приведенная в табл.11, включает в себя:

  • команды работы с аккумуляторами: “Загрузка аккумулятора” и “Сохранение аккумулятора”;

  • арифметико-логические команды: “Сложение”, “Вычитание”, “Умножение”, “Деление”, “Вычитание модулей”, “Конъюнкция”, “Дизъюнкция” и “Сумма по модулю 2”;

  • команды управления порядком выполнения программы: “Безусловный переход”, “Условный переход по S”, “Условный переход по Z”, “Инкремент ячейки”, “Вызов подпрограммы” и “Останов”.

В команде «Останов» разряды 5 – 14 не используются.

Таблица 11. Система команд ЭВМ G1

Код

опер.

Наименование

Признаки

Выполнение

команды

S

Z

C

E

0000

Останов

0001

Загрузка аккумулятора

0010

Сохранение аккумулятора

0011

Сложение

+

+

+

0100

Вычитание

+

+

+

0101

Умножение

+

+

+

0110

Деление

+

+

+

0111

Вычитание модулей

+

+

1000

Конъюнкция

+

+

1001

Дизъюнкция

+

+

1010

Сумма по модулю 2

+

+

1011

Инкремент ячейки

+

1100

Условный переход по S

1101

Условный переход по Z

1110

Безусловный переход

1111

Вызов подпрограммы

См.описание

Круглые скобки в графе «Выполнение команды» означают содержимое регистра или ячейки памяти. Например, запись – это адрес ячейки, а () – содержимое ячейки с адресом .

Обозначение «АС» в табл. 11 определяет один из двух возможных регистров-аккумуляторов – R1 или R2, что зависит от значения поля R регистра команды RK.

Значение исполнительного адреса зависит от состояния поля РА:

РА = 0 (прямая адресация);

РА = 1 (косвенная адресация).

При косвенной адресации исполнительным адресом считается содержимое ячейки памяти ОЗУ с адресом А.

11.2 Выполнение команд в ЭВМ G1

В ЭВМ G1 используются 14-разрядные числа с фиксированной запятой (целые числа со знаком). Отрицательные значения чисел записываются в дополнительном коде.

Выполнение команды начинается с загрузки содержимого ячейки памяти, адрес которой задан в SAK, в регистр команд RK. При этом значение адреса выполняемой команды из SAK переписывается в регистр адреса RA, по этому адресу читается содержимое соответствующей ячейки памяти MEMORY и через буферный регистр слова RS пересылается в регистр RK. В последующем из RK выделяются поля KOP, R, PA и A. Для подготовки выборки следующей команды значение счетчика SAK увеличивается на единицу. Дешифратор DC анализирует значение KOP и определяет команду, которая должна выполняться в данный момент (дешифратор имеет 16 выходов по количеству дешифрируемых команд).

В зависимости от значения кода операции КОР дешифратор DC вырабатывает управляющие сигналы, которые определяют тип выполняемой операции.

Для всех команд, кроме команды останова, формируется исполнительный адрес. При этом анализируется бит РА регистра команды: если РА = 0, то в поле А уже содержится исполнительный адрес, в противном случае значение поля А передается в регистр RA, значение исполнительного адреса выбирается из разрядов 7 – 14 ячейки ОЗУ с адресом, равным содержимому RA, и через регистр RS записывается в поле А регистра команды. Следовательно, в обоих случаях (при РА = 0 и РА = 1) в поле А регистра RK будет находиться исполнительный адрес операнда.

После формирования исполнительного адреса в арифметико-логических командах анализируется бит R. Если R = 0, на первый вход АЛУ подается содержимое регистра-аккумулятора R1; если R = 1, то регистра R2. Значение второго операнда выбирается из ОЗУ по адресу . Арифметико-логическое устройство АЛУ выполняет заданную двухместную операцию, записывая полученное значение в регистр-аккумулятор.

Результат арифметической операции используется для формирования в регистре RP признака S (S = 1, если результат меньше нуля), Z (Z = 1, если результат равен нулю) или C (C = 1, если отмечена некорректность выполнения операции – переполнение аккумулятора или попытка деления на нуль). Требуемые изменения регистра RP отражены в табл.11.

Для логических операций производится лишь анализ результата на равенство нулю: S = 1, если результат операции не равен нулю; Z = 1, если этот результат равен нулю.

Символ “–” в графе признаков табл.11 определяет ситуацию, которая не может возникнуть в данной операции (например, некорректность при выполнении операции вычитания модулей), или то, что данная операция не изменяет регистр RP (например, команда безусловного перехода).

Сущность изменения регистра RP рассмотрим на конкретном примере. Предположим, что в программе выполнена команда сложения и при этом получен отрицательный результат. Тогда в состояние «1» должен быть установлен лишь первый бит регистра RP, остальные биты должны быть сброшены на нуль.

Примечание. Если в команде, приведенной в табл.11, все графы признаков отмечены символом “–”, то это означает лишь то, что при этом сохраняются предыдущие значения признаков (но не выполняется сброс их на нуль).

В командах «Условный переход по S» и «Условный переход по Z» формирование адреса и передача его в счетчик SAK производится, если значение соответствующего признака равно единице.

В регистре RP нет бита, устанавливающегося в 1, если результат арифметической операции положительный. Здесь подразумевается, что если результат такой операции не отрицательный и не нулевой, то он положительный. Следовательно, в этом случае первые три бита регистра RP должны быть установлены в нулевое положение.

По команде безусловного перехода адрес пересылается в счетчик SAK, после чего происходит выборка новой команды и ее выполнение.

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

При обращении к подпрограмме должны быть выполнены два действия: передача управления на начальный участок подпрограммы и возврат в вызывающую программу после отработки подпрограммы. Эта работа в ЭВМ G1 выполняется фактически одной командой «Вызов подпрограммы».

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

Адрес , указываемый в команде «Вызов подпрограммы» - это адрес первой команды подпрограммы. В своей работе команда «Вызов подпрограммы» осуществляет следующие действия:

– записывает в первую ячейку подпрограммы команду

1110 00 SAK,

где в качестве кода операции указан безусловный переход, а в адресной части находится текущее содержимое счетчика SAK, т.е. адрес команды, записанной в вызывающей программе после команды обращения к подпрограмме;

– пересылает в SAK адрес , т.е. адрес второй команды подпрограммы, с которой фактически начинается ее исполнение.

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

При выполнении команды «Инкремент ячейки» сформированный адрес из поля А регистра команд RK поступает в регистр RA, затем из ОЗУ выбирается ячейка с адресом , и ее содержимое через регистр RS поступает на второй вход АЛУ. В АЛУ к поступившему численному значению добавляется единица, и результат через регистр RS возвращается в ОЗУ по прежнему адресу. По значению результата формируется признак Е регистра RP. Если результат равен нулю, то устанавливается значение Е = 1, в противном случае записывается Е = 0. Если Е = 1, то содержимое счетчика SAK увеличивается на единицу, что приводит к пропуску следующей команды.

В качестве примера реализации циклической программы рассмотрим вычисление выражения

При этом предполагается, что элементы массива Х расположены в смежных ячейках памяти.

Представим заданное выражение в виде

;

Тогда фрагмент программы может иметь следующий вид:

k+0 0001 00 k+21

k+1 0010 00 k+7

k+2 0001 00 < -5 >

k+3 0010 00 < сч >

k+4 0001 00 < 0 >

k+6 0010 00 < R >

k+6 0001 00 < R >

k+7 0011 00 < >

k+8 0010 00 < R >

k+9 0001 00 k+7

k+10 0011 00 < 1 >

k+11 0010 00 k+7

k+12 1011 00 < сч >

k+13 1110 00 k+6

k+14 0001 00 < 8 >

k+15 0101 00 < a >

k+16 0100 00 < R >

k+17 0010 00 < y >

k+18 0000 00 00000000

k+19 0000 00 00000001

k+20 1111 11 11111011

k+21 0011 00 < x1 >

k+22 0000 00 00001000 8

k+23 a = 31

k+24 x1 = 10

k+25 x2 = -15

k+26 x3 = 25

k+27 x4 = 40

k+28 x5 = 50

k+29 y

k+30 счетчик

k+31 R

Здесь k, k+1, … - условное обозначение адреса команды, < y > - обозначение адреса ячейки, отведенной для переменной y (в данном случае k+29).

В команде суммирования элементов массива Х (команда с адресом k+7) должен изменяться адрес операнда, что приводит к соответствующему изменению самой команды. Поэтому до начала цикла производится восстановление этой команды путем засылки в ячейку k+7 первоначального вида команды из ячейки k+21.

Две следующие команды – это засылка в счетчик циклов начального значения, равного –5. После этого обнуляется ячейка, предназначенная для накапливаемой суммы R.

После добавления к переменной R значения элемента адрес операнда в команде k+7 увеличивается на единицу. Команда «Инкремент ячейки» добавляет единицу к отрицательному значению счетчика циклов. Если полученное значение больше нуля, то следующая за ней команда передает управление на начало цикла; в противном случае команда безусловной передачи управления пропускается, что приводит к прекращению работы цикла.

Из мнемонических соображений изменяемый адрес в команде k+7 обозначен символом “*”, чтобы четко организовать модификацию и восстановление изменяемой команды.

Предположим, что пусковой адрес программы задан равным . Тогда текстовый файл, подготовленный для загрузки машинных команд и обрабатываемых данных в память MEMORY, будет иметь следующий вид (пусковой адрес представлен в 10 с/с, остальная информация – в 2 с/с и параллельно в 16 с/с):

20 20

00010000101001 0429

00100000011011 081B

00010000101000 0428

00100000110010 0832

00010000000000 0400

00100000110011 0833

00010000110011 0433

00110000101100 0С33

00100000110011 0833

00010000011011 041B

00110000100111 0C27

00100000011011 081B

10110000110010 2C32

11100000011010 381A

00010000101010 042A

01010000101011 142B

01000000110011 1033

00100000110001 0831

00000000000000 0000

00000000000001 0001

11111111111011 3FF3

00110000101100 0C2C

00000000001000 0008

00000000011111 001F

00000000001010 000A

11111111110001 3FF1

00000000011001 0019

00000000101000 0028

00000000110010 0032

Примечание. В состав текстового файла не включено содержимое ячеек <y>, <счетчик> и <R>, поскольку это содержимое формируется в программе, а не вводится извне.

При формировании шестнадцатеричного представления текстового файла двоичные изображения машинных команд и данных разделены справа налево на тетрады, при этом первая тетрада получилась неполной (2 бита).

Соседние файлы в папке G1
  • #
    03.03.2016635.4 Кб89G1.doc
  • #
    03.03.201644.03 Кб89G1.VSD