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

Turbo Pascal / Stud_2_1 / F / F1 / F1

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

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

9.1 Архитектура ЭВМ F1

Учебная ЭВМ F1 представляет собой одноадресную ЭВМ с двумя регистрами-аккумуляторами. Ее структурная схема приведена на рис.9. В состав ЭВМ F1 входят следующие основные узлы:

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

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

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

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

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

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

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

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

  • схема формирования адреса СФА;

  • восьмиразрядный регистр РС для хранения промежуточного адреса;

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

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

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

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

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

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

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

  • поле Х (биты 9 – 11) содержит номер ячейки памяти, в которой записан индекс;

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

Адреса ячеек памяти изменяются от 0 до 255 (от 00000000 до 11111111 в двоичной системе счисления). В нулевой ячейке всегда находится нуль; содержимое этой ячейки можно читать, но не записывать в нее какое-либо значение. Ячейки памяти с адресами от 1 до 7 предназначены для хранения базовых адресов и индексов, разряды 1 – 8 этих ячеек не используются. Формирование исполнительных адресов происходит следующим образом:

Это означает, что исполнительный адрес формируется как сумма трех компонентов:

  • содержимое ячейки памяти, заданной базовым адресом;

  • содержимое ячейки памяти, заданной индексом;

  • смещение.

В частном случае, когда X = 0, индекс в формировании исполнительного адреса не участвует.

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

Код

опер.

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

Признаки

Выполнение команды

S

Z

C

0000

Останов

0001

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

0010

Сохранение акк-тора

0011

Сложение

+

+

+

0100

Вычитание

+

+

+

0101

Умножение

+

+

+

0110

Деление

+

+

+

0111

Дизъюнкция

+

+

1000

Сдвиг вправо арифм.

+

+

1001

Сдвиг влево арифм.

+

+

1010

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

1011

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

1100

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

1101

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

1110

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

1111

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

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

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

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

  • команды сдвига: «Сдвиг вправо арифметический» и «Сдвиг влево арифметический»;

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

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

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

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

В командах сдвига содержимое заданного регистра-аккумулятора арифметически сдвигается на количество разрядов, заданное в ячейке памяти по адресу .

По команде «Вызов подпрограммы» управление передается по адресу , адрес возврата запоминается в ячейке памяти с адресом 8. Команда «Возврат из подпрограммы» восстанавливает значение адреса возврата в счетчике SAK.

9.2 Выполнение команд в ЭВМ F1

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

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

Далее во всех командах, кроме команд «Останов» и «Возврат из подпрограммы», выполняется формирование исполнительного адреса . Формирование осуществляется в два этапа. Вначале значение поля В передается в регистр RA и по нему выбирается из ОЗУ базовый адрес (разряды 9 – 16 соответствующей ячейки), который через регистр RS поступает на второй вход схемы формирования адреса СФА; на первый вход СФА подается значение поля D, результат суммирования записывается в регистр РС. Затем по значению поля Х регистра RK из ОЗУ аналогично базовому адресу на второй вход СФА подается индекс, который добавляется к значению адреса, находящегося в регистре РС. В результате второго суммирования регистр РС будет содержать исполнительный адрес . Если в поле Х находятся нули, то индекс не используется, и второй этап формирования адреса не выполняется.

В командах условного перехода анализируется состояние регистра признаков RP. Если соответствующий признак равен 1, значение исполнительного адреса из регистра РС передается в счетчик SAK.

В команде «Загрузка аккумулятора» значение адреса передается в регистр RA, после чего выбирается соответствующая ячейка памяти и ее содержимое записывается в регистр RS, затем, в зависимости от поля R команды, содержимое RS загружается в регистр R1 (R = 0) или в регистр R2 (R=1). Команда «Сохранение аккумулятора» выполняет обратную запись из регистров R1 или R2 в регистр RS, а затем в ячейку ОЗУ, определяемую адресом .

Команды сдвига ориентированы только на аккумулятор. Особенностью арифметического сдвига, в отличие от логического, является то, что при сдвиге влево знаковый разряд не затрагивается, при этом освобождаемые в правой части аккумулятора разряды заполняются нулями; при сдвиге вправо разряд знака (0 или 1) распространяется на сдвигаемые разряды. Количество сдвигов определяется значением исполнительного адреса .

Если > 14, то сдвиг разрядов аккумулятора не выполняется; в этом случае по команде сдвига влево разряды 1..15 заполняются нулями, по команде сдвига вправо – значением разряда знака (0 или 1).

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

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

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

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

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

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

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

В команде «Вызов подпрограммы» после формирования исполнительного адреса в регистр адреса RA записывается значение 8, которое определяет ячейку ОЗУ, в битах 9 – 16 которой сохраняется текущее значение счетчика SAK (адрес возврата). Затем в счетчик SAK из регистра РС пересылается адрес .

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

В команде безусловного перехода (БП) значение заносится в счетчик SAK.

В команде условного перехода (УП) по S вначале анализируется значение битов регистра RP. Если признак S = 1 (результат предыдущей операции меньше нуля), то значение передается в счетчик SAK. Аналогично в команде УП по Z и УП по С адрес пересылается в SAK, если соответственно признак Z = 1 (результат операции равен нулю) или С =1 (некорректность выполнения операции).

Если в регистре RP установлен признак С = 1, то команда условного перехода по С производит передачу управления по адресу , в противном случае – следующей по порядку команде. При отсутствии команды условного перехода по С никакой реакции на признак С = 1 не происходит.

В реальных ЭВМ команда условного перехода по С определяла бы переход на подпрограмму обработки аварийного прерывания. В ЭВМ F1 по адресу достаточно вывести на экран сообщение об аварийном прерывании (код операции и адрес команды), после чего произвести останов работы ЭВМ.

Рассмотрим теперь методику формирования циклического фрагмента программы в системе команд ЭВМ F1.

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

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

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

;

Отличительным свойством ЭВМ F1 является то, что при формировании адреса используется заранее заданный базовый адрес, содержащийся в разрядах 9 – 16 ячеек ОЗУ с адресами 1 – 7. Базовый адрес, размер которого составляет 8 разрядов, определяет некоторую область оперативной памяти в пределах емкости ОЗУ. Этот адрес можно считать начальным адресом сегмента оперативной памяти. Размер сегмента определяется максимальным значением смещения D. Поскольку для смещения в составе регистра RK выделено 5 разрядов, то его максимальное значение равно . Следовательно, размер сегмента ОЗУ не может превышать 32 ячейки памяти ЭВМ F1.

В соответствии с вышесказанным, машинные команды программы и обрабатываемые данные целесообразно размещать в различных сегментах памяти. Это дает возможность при отладке программы корректировать машинные команды, не изменяя адреса данных.

Если в состав программы входит свыше 32 команд, то программу нужно располагать в нескольких смежных сегментах.

Обозначим базовый адрес для команд машинной программы через k, для данных – через k1. Будем считать, что эти базовые адреса записаны в ячейках ОЗУ с номерами 1 и 3, а в качестве индексного регистра будем использовать ячейку с адресом 5. Тогда фрагмент программы может иметь следующий вид:

k+0 0001 0 011 000 <0>

k+1 0010 0 011 000 <R>

k+2 0010 0 011 000 <сч>

k+3 0010 0 000 000 00101

k+4 0001 0 011 000 <R>

k+5 0011 0 011 101 <>

k+6 0010 0 011 000 <R>

k+7 0001 0 000 000 00101

k+8 0011 0 011 000 <1>

k+9 0010 0 000 000 00101

k+10 0001 0 011 000 <сч>

k+11 0011 0 011 000 <1>

k+12 0010 0 011 000 <сч>

k+13 0100 0 011 000 <5>

k+14 1101 0 001 000 k+4

k+15 0001 0 011 000 < 8 >

k+16 0101 0 011 000 < a >

k+17 0100 0 011 000 < R >

k+18 0010 0 011 000 < y >

k+19 0000 0 000 000 00000

k1+0 0

k1+1 1

k1+2 5

k1+3 8

k1+4 a = 31

k1+5 x1 = 10

k1+6 x2 =-15

k1+7 x3 = 25

k1+8 x4 = 40

k1+9 x5 = 50

k1+10 y

k1+11 счетчик

k1+12 R

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

В условной записи программы поля команд разделены пробелами. Каждая строка программы имеет следующий смысл:

адрес команды; код операции; поле R; поле B; поле Х; поле D.

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

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

В каждом цикле срабатывает команда k+5, по которой к сумме добавляется очередной элемент . В этой команде записан номер индексной ячейки, к содержимому которой в конце цикла добавляется единица. Это позволяет, не изменяя машинную запись команды, в каждом цикле выполнять переадресацию, т.е. переходить к следующему элементу массива .

Управление работой цикла осуществляет команда “УП по S”.

Если сч – 5 < 0, то управление передается на начало цикла (команда k+4), в противном случае – следующей команде.

Для загрузки и изменения индексной ячейки использовано то обстоятельство, что в нулевой ячейке ОЗУ всегда находится нуль. Поэтому в командах k+3, k+7 и k+9 в качестве базового адреса задано значение 000.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

БА 1 20 БА 1 20

БА 3 100 БА 3 100

ПА 20 ПА 20

НА 20 НА 20

0001001100000000 1300

0010001100001100 230C

0010001100001011 230B

0010000000000101 2005

0001001100001100 130C

0011001110100101 33A5

001000110000110 2306

0001000000000101 1005

0011001100000001 3301

0010000000000101 2005

0001001100001011 130B

0011001100000001 3301

0010001100001011 230B

0100001100000010 4302

1101000100000100 D104

0001011000000011 1303

0101001100000100 5304

0100001100001100 430C

0010001100001010 230A

0000000000000000 0000

НА 100 НА 100

0000000000000000 0000

0000000000000001 0001

0000000000000101 0005

0000000000001000 0008

0000000000011111 001F

0000000000001010 000A

1111111111110001 FFF1

0000000000011001 0019

0000000000101000 0028

0000000000110010 0032

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

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

9

Соседние файлы в папке F1
  • #
    03.03.2016196.1 Кб89F1.doc
  • #
    03.03.201643.01 Кб89Структурная схема ЭВМ F1.vsd