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

Turbo Pascal / Stud_2_1 / G / G2 / G2

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

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

12.1 Архитектура ЭВМ G2

Учебная ЭВМ G2 представляет собой машину с двумя регистрами-аккумуляторами и модифицируемыми адресами. Структурная схема ЭВМ G2 приведена на рис.12. В состав ЭВМ входят следующие основные узлы:

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

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

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

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

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

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

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

  • сумматор адреса SA, предназначенный для формирования исполнительного адреса;

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

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

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

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

Состояние бита RP[4] (признак E) изменяет лишь команда «Инкремент ячейки».

Адреса ячеек памяти изменяются от 0 до 255 (от 00000000 до 11111111 в двоичной системе счисления). Ячейки ОЗУ с адресами 0 – 7 используются для хранения базовых адресов. Ячейка ОЗУ с адресом 8 используется при организации подпрограмм для хранения адреса возврата.

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

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

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

  • поле В (биты 6 – 8) содержит номер одной из первых восьми ячеек ОЗУ, в которой задан базовый адрес;

  • поле D (биты 9 – 12) содержит смещение адреса относительно базового.

Формирование исполнительных адресов осуществляется следующим образом:

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

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

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

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

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

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

Код

опер.

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

Признаки

Выполнение

команды

S

Z

C

E

0000

Останов

0001

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

0010

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

0011

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

0100

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

0101

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

0110

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

0111

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

1000

Сложение

+

+

+

1001

Вычитание

+

+

+

1010

Умножение

+

+

+

1011

Деление

+

+

+

1100

Конъюнкция

+

+

1101

Дизъюнкция

+

+

1110

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

+

+

1111

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

+

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

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

12.2 Выполнение команд в ЭВМ G2

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

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

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

Формирование исполнительного адреса осуществляется во всех командах, кроме команды «Возврат из подпрограммы». При этом по значению поля В, переданному в регистр RA, выбирается одна из первых восьми ячеек ОЗУ. Базовый адрес, находящийся в битах 5 – 12 заданной ячейки ОЗУ, через регистр RS поступает на первый вход сумматора адреса SA. На второй вход сумматора подается смещение адреса D. Исполнительный адрес, полученный в результате суммирования в SA, передается в счетчик SAK (в командах изменения хода программы) или в регистр RA (в арифметико-логических командах и командах работы с аккумуляторами).

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

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

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

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

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

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

В командах “Загрузка аккумулятора” и “Сохранение аккумулятора” передача данных из ОЗУ в регистр R1 (или R2) и обратно осуществляются через регистр RS.

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

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

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

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

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

При выполнении команды «Вызов подпрограммы» в регистре RA устанавливается значение «8», содержимое счетчика SAK через регистр RS запоминается в битах 5 – 12 восьмой ячейки ОЗУ. Затем происходит формирование адреса и запись его в счетчик SAK.

При выполнении команды «Возврат из подпрограммы» в регистре RA устанавливается значение «8», затем содержимое битов 5 – 12 восьмой ячейки ОЗУ через регистр RS возвращается в счетчик SAK.

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

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

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

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

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

;

Базовые ячейки с адресами 0 – 7 (000 – 111 в двоичной системе счисления), как и остальные ячейки оперативной памяти ЭВМ G2, имеют размер 12 разрядов. В разрядах 5 – 12 (восемь последних разрядов) содержится базовый адрес. Следовательно, базовый адрес может определять любую ячейку ОЗУ (начало сегмента памяти). Размер сегмента определяется максимальным значением смещения D относитеьно начала сегмента. Для поля D в составе команды выделено 4 разряда. Следовательно, максимальный размер сегмента составляет 16 ячеек.

В связи с вышесказанным машинную программу и обрабатываемые данные целесообразно размещать в различных сегментах. Если в состав программы входит свыше 16 команд, то ее следует размещать в смежных сегментах, например, в сегментах с базовыми адресами 20 ( = ) и 36 = 20+16 ( = ).

Обрабатываемые данные размещаются в отдельном сегменте, не смежным с сегментами программы, например, в сегменте с базовым адресом 100 ( = ). Это дает возможность корректировать программу при ее отладке, не изменяя адресов обрабатываемых операндов.

Для рассматриваемой программы отведем два сегмента, условно обозначив их базовые адреса, размещенные в ячейках 1 и 3 ( и ) через и .

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

k+0 0001 0 011 k1+4

k+1 0010 0 001 k+7

k+2 0001 0 011 <-5>

k+3 0010 0 011 <сч>

k+4 0001 0 011 <0>

k+5 0010 0 011 <R>

k+6 0001 0 011 <R>

k+7 1000 0 011 <>

k+8 0010 0 011 <R>

k+9 0001 0 001 k+7

k+10 1000 0 011 <1>

k+11 0010 0 001 k+7

k+12 1111 0 001 <cч>

k+13 0111 0 001 k+6

k+14 0011 0 011 <8>

k+15 1010 0 011 <a>

k+16 1001 0 011 <R>

k+17 0100 0 011 <y>

k+18 0000 0 000 0000

Сегмент, содержащий обрабатываемые данные:

k1+0 0

k1+1 1

k1+2 -5

k1+3 8

k1+4 1000 0010 k1+4

k1+5 a = 31

k1+6 x1 = 10

k1+7 x2 = -15

k1+8 x3 = 20

k1+9 x4 = 30

k1+10 x5 =40

k1+11 y

k1+12 счетчик

k1+13 R

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

Первая команда программы обнуляет ячейку, предназначенную для накапливаемой суммы R. Обнуляется также счетчик повторений цикла (ячейка k1+10).

В команде суммирования элементов массива Х (команда с адресом k+7) должен изменяться адрес операнда, что приводит к соответствующему изменению самой команды. Поэтому до начала цикла производится восстановление этой команды путем засылки в ячейку k+7 первоначального вида команды из ячейки k1+4. После этого производится засылка в счетчик его первоначального значения «-5» и обнуление ячейки k1+13, предназначенной для накапливаемой суммы R.

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

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

Рассматриваемая программа имеет три отдельные группы информации:

  • содержимое базовых ячеек;

  • машинные команды программы;

  • значения обрабатываемых данных.

Для ввода указанной информации в оперативную память ЭВМ G2 можно было бы использовать три отдельные файлы. Однако это нецелесообразно с методической точки зрения. Для отладки эмулятора необходимо отработать несколько тестов, содержащих ограниченное количество функциональных параметров ЭВМ G2 (ограниченный набор машинных команд, различные методы адресации и т.п.). При использовании нескольких файлов для одного теста в Паскаль-программе эмулятора нужно было бы настраивать несколько процедур Assign на конкретные имена файлов и использовать несколько программ для ввода этих файлов. В этом смысле более предпочтительно каждый тест оформлять в виде отдельного текстового файла. При этом процедура ввода должна самостоятельно определять тип вводимой информации.

Структура текстового файла для ЭВМ G2 может быть следующей:

БА базовая-ячейка базовый-адрес

БА базовая-ячейка базовый-адрес

ПА пусковой-адрес-программы

НА начальный-адрес-программного-сегмента

машинные-команды

НА начальный-адрес-сегмента-данных

обрабатываемые-данные

Здесь БА, ПА и НА – признаки базового, пускового и начального адресов, причем значения этих адресов должны быть заданы в десятичной системе счисления. При этом нужно учесть, что пусковой адрес не всегда совпадает с начальным, например, в случае, когда в машинной программе вначале записана подпрограмма, а затем – основная программа.

Заменим теперь условные адреса реальными, указав в ячейке 1 базовый адрес первого сегмента (например, ), в ячейке 3 – базовый адрес второго сегмента (например, ), а в машинных командах сегментов – смещения адресов относительно начала сегмента.

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

БА 1 20 БА 1 20

БА 3 100 БА 3 100

ПА 20 ПА 20

НА 20 НА 20

000100110100 134

001000010111 217

000100110010 132

001000111101 23D

000100110000 130

001000111011 23B

000100111011 13B

100000110110 836

001000111011 23B

000100010111 117

100000110001 831

001000010111 217

111100011011 F1B

011100010110 716

001100110011 333

101000110101 A35

100100111011 93B

010000111100 43C

000000000000 000

НА 100 НА 100

000000000000 000

000000000001 001

111111111011 FFB

000000001000 008

100000100100 824

000000011111 01F

000000001010 00A

111111110001 FF1

000000010100 014

000000011110 01E

000000101000 028

Нетрудно заметить, что в машинных командах условное обозначение адреса операнда заменено смещением относительно базового адреса. Например, в шестой машинной команде (k+5) в последних четырех разрядах вместо условного обозначения <R> записано смещение .

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

Соседние файлы в папке G2
  • #
    03.03.2016701.04 Кб90G2.doc
  • #
    03.03.201646.08 Кб89G2.VSD