Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Stud_2_1 / KursRab / TextKurs.doc
Скачиваний:
93
Добавлен:
03.03.2016
Размер:
4.78 Mб
Скачать

3 Разработка эмулятора

3.1 Программные модели узлов ЭВМ М1

Моделируемыми узлами ЭВМ М1 являются оперативная память, регистры и дешифратор. Им соответствуют в эмуляторе определенные переменные или массивы. Арифметико-логическое устройство АЛУ и сумматор адреса SA явным образом не моделируются: их функции выполняют соответствующие операторы программы.

Каждая ячейка памяти на машинном уровне – это последовательность битовых элементов. Две смежные ячейки памяти ЭВМ М1 могут интерпретироваться в машине как команда, если их содержимое направлено в регистр команд RK, или как обрабатываемые данные, если это содержимое поступает в блок регистров R или в операционные регистры OR1, OR2. В последнем случае данные могут обрабатываться как числа, если на дешифратор поступил код арифметической команды, или как последовательности бит, если дешифрирована логическая команда.

В общем случае память – это массив битовых строк. Однако язык Турбо Паскаль не имеет в явном виде средств для изображения и обработки таких строк. В связи с этим могут быть предложены два варианта моделирования памяти.

В первом варианте ячейка памяти рассматривается как строка типа string[8], каждый байт которой может принимать значение ‘0’ или ‘1’. Тогда модель памяти может быть представлена в следующем виде:

Type

string8 = string[8];

MemoryAr = array[0..255] of string8;

Var

Memory : MemoryAr;

Во втором варианте ячейка памяти изображается как множество из восьми элементов. Модель памяти для второго варианта:

Type

set8 = set of 1..8;

MemoryAr = array[0..255] of set8;

Var

Memory : MemoryAr;

Хотя внутренним представлением множества является битовая строка, но на уровне Паскаль-программы множество не может интерпретироваться как строка бит. Множество типа set8 лишь указывает, входят или не входят в его состав элементы 1 .. 8, что косвенным образом определяет значения 1 или 0 соответствующих разрядов ячейки памяти.

Регистры RS, OR1, OR2, Res, RP и блок регистров R моделируются аналогично памяти (string или set).

Регистр команд RK, включающий в себя поля KOP, MA, NR и AM, целесообразно моделировать записью, компонентами которой являются модели битовых строк.

Модель регистра RK для первого варианта:

Type

string2 = string[2];

string4 = string[4];

string8 = string[8];

RKType = record

KOP : string4;

MA,NR : string2;

AM : string8

end;

Var

RK : RKType;

Модель регистра RK для второго варианта:

Type

set2 = set of 1..2;

set4 = set of 1..4;

set8 = set of 1..8;

RKType = record

KOP : set4;

MA,NR : set2;

AM : set8

end;

Var

RK : RKType;

Рассмотрим теперь вопрос о модели дешифратора. В общем случае дешифратор – это устройство, имеющее входных ивыходных шин. Его функцией является активизация выходной шины, порядковый номер которой соответствует значению-разрядного двоичного числа на входе дешифратора. Моделью дешифратора является операторCase.

Предположим, что код операции RK.KOP (строка или множество) преобразован в программе в значение целочисленной переменной NumKOP типа byte. Тогда модель дешифратора может иметь вид:

Соседние файлы в папке KursRab