заполнения регистров необходимо перевести указатель мыши на часть Регистры
и нажать левую кнопку мыши, либо нажать клавишу Tab. При заполнении
регистров стоит вспомнить, что максимальное число, которое может храниться
в регистре, равно 32767, а минимальное -32768. Поэтому если вы попытаетесь
ввести число больше максимального или меньше минимального, то цифра
разряда, которую вы ввели, будет равна максимальной цифре, которая может
находится в данном разряде числа. Аналогично при исполнении программы,
если число заносимое в регистр будет меньше минимального или больше
максимального, то значение соответствующего регистра будет минимальным,
либо максимальным. Также необходимо помнить что, регистр R7 является
счетчиком команды, поэтому туда необходимо занести адрес ячейки начала
программы. При использовании подпрограммы в регистр R6 необходимо занести
адрес начала стека.
В последнюю очередь при написании программы необходимо занести данные в
память. Но это необходимо сделать, только если вы используйте в своей
программе косвенный или автоинкрементный способ адресации. Для занесения
данных в память необходимо активизировать окно Память. Это можно сделать,
нажав кнопку Память (если окна Память нет), либо направив курсор мыши на
окно Память нажать левую кнопку мыши. Следует помнить, что в те ячейки
памяти, которые отведены под программу, данные заносить нельзя.
Таким образом, следуя вышеизложенным рекомендациям, вы сможете написать
свою программу. Советую написанную программу сохранить, используя пункты
меню Сохранить и Сохранить как.
Исполнение программы
Теперь рассмотрим, как написанная вами программа исполняется. Здесь я
затрону только общие моменты исполнения вашей программы. Конкретно
исполнение каждой команды можно посмотреть в разделе описания.
Исполнение любой программы начинается с нажатия клавиши F9 или пункт меню
Пуск. Вначале считывается значение регистра R7 (счетчика команд). Значение
R7 увеличивается на 2. Исполняется команда, находящаяся по адресу,
считанному из счетчика команд. Эти три операции повторяются пока не
встретится команда Стоп или пока не возникнет ошибка исполнения.
Исполнение может быть остановлено самим пользователем (кнопка Стоп или
пункт меню Стоп). Также пользователь может приостановить исполнение
(кнопка Пауза или пункт меню Пауза) и затем продолжить приостановленное
исполнение (кнопка Продолжить или пункт меню Продолжить).
Выполнить можно также только одну команду. При нажатии клавиши F8
исполняется команда, находящаяся по адресу указанному в R7, при этом
значение счетчика команд увеличивается на 2.
При исполнении вашей программы могут возникнуть следующие ошибки:
Неверное значение счетчика команд - значение регистра R7 не попадает в
диапазон 1000…2024.
Пустая строка, не могу выполнить - нет команды в ячейке, адрес которой
указан в R7, либо нет команды Стоп в конце программы.
Неверный адрес - адрес, указанный в регистре, при использовании косвенной
адресации не попадает в диапазон 1000…2024.
Данные заносятся в адрес, отведенный под программу - при использовании
косвенной адресации данные заносятся в память по адресу, который
используется программой.
Данные не должны содержать букв - в памяти хранятся данные, которые
содержат посторонние символы (не цифры).
Переполнение диапазона чисел - число, хранимое в памяти очень большое.
Неверный адрес перехода - значение адреса перехода не принадлежит
диапазону 1000…2024.
Неверные символы в команде перехода - адрес перехода в команде перехода
содержит посторонние символы (не цифры).
Нет адреса подпрограммы - команда Вызов подпрограммы по адресу не содержит
адреса начала подпрограммы.
Неверный адрес подпрограммы - адрес начала подпрограммы не принадлежит
диапазону 1000…2024, либо адрес подпрограммы содержит посторонние символы
(не цифры).
Неверный адрес возврата - адрес возврата не принадлежит диапазону
1000…2024.
При исполнении могут возникнуть и другие ошибки, которые мне не удалось
предусмотреть.
Особое внимание следует уделить исполнению программы с подпрограммой (см.
пример программы с подпрограммой). При исполнении команд обращения к
подпрограмме и возврата из подпрограммы происходит обращение к стеку,
адрес начала которого хранится в регистре R6. Принцип работы стека изложен
в первой части курсовой, в разделе способы адресации.
Примеры программ
1. Простая программа, использующая регистровую адресацию.
Найти сумму всех чисел от А до В.
Число А хранится в R0, число В в R1, сумма в R3. Пусть А=1, В=5.
+---------------------------------------+
| Регистры | Редактор |
|-------------+-------------------------|
| R0 = +00001 | 1000 Переслать R0 в R2 |
|-------------+-------------------------|
| R1 = +00005 | 1002 Сравнить R2 c R1 |
|-------------+-------------------------|
| R2 = +00000 | 1004 Переход на 3 слов |
|-------------+-------------------------|
| R3 = +00000 | 1006 Добавить R2 к R3 |
|-------------+-------------------------|
| R7 = +01000 | 1008 Увеличить на 1 R2 |
|-------------+-------------------------|
| | 1010 Переход на -5 слов |
|-------------+-------------------------|
| | 1012 Стоп |
+---------------------------------------+
В данной программе не используются регистры R4, R5, R6.
2. Программа, использующая косвенную адресацию.
Найти сумму всех чисел от А до В.
Число А хранится в ячейке 1016, число В в ячейке 1018, результат в ячейке
1020. Регистр R0 хранит адрес первого числа, R1 - второго числа, R3 -
результата.
+-------------------------------------------------+
| Регистры | Редактор | Память |
|-------------+--------------------------+--------|
| R0 = +01016 | 1000 Переслать (R0) в R2 | 1016 1 |
|-------------+--------------------------+--------|
| R1 = +01018 | 1002 Сравнить R2 c (R1) | 1018 5 |
|-------------+--------------------------+--------|
| R2 = +00000 | 1004 Переход на 3 слов | 1020 0 |
|-------------+--------------------------+--------|
| R3 = +01020 | 1006 Добавить R2 к (R3) | |
|-------------+--------------------------+--------|
| R7 = +01000 | 1008 Увеличить на 1 R2 | |
|-------------+--------------------------+--------|
| | 1010 Переход на -5 слов | |
|-------------+--------------------------+--------|
| | 1012 Стоп | |
+-------------------------------------------------+
3. Программа работы с массивом данных.
Посчитать число положительных элементов массива и занести его в R5.
В R0 хранится адрес начала массива 1030. В R1 - адрес конца массива 1036.
+---------------------------------------------------------+
| Регистры | Редактор | Память |
|-------------+---------------------------------+---------|
| R0 = +01016 | 1000 Сравнить (R0)+ c R3 | 1030 -1 |
|-------------+---------------------------------+---------|
| R1 = +01018 | 1002 Если < переход на 1 слов | 1032 2 |
|-------------+---------------------------------+---------|
| R5 = +00000 | 1004 Увеличить на 1 R5 | 1034 3 |
|-------------+---------------------------------+---------|
| R7 = +01000 | 1006 Сравнить R0 с R1 | 1036 -4 |
|-------------+---------------------------------+---------|
| | 1008 Если <= переход на -5 слов | |
|-------------+---------------------------------+---------|
| | 1010 Cтоп | |
+---------------------------------------------------------+
4. Программа с подпрограммой.
Даны два массива одинаковой размерности. Произвести обмен максимальными
элементами. В качестве подпрограммы оформить нахождение максимального
элемента массива.
Адрес начала первого массива 1050 хранится в R0. Адрес конца первого
массива 1060 в R1. Адрес начала второго массива 1070 в R2. Адрес конца
второго массива 1080 в R3. Начало стека 1200 в R6.
+---------------------------------------------------------+
| Регистры | Редактор | Память |
|-------------+---------------------------------+---------|
| R0 = +01050 | 1000 Вызов подпрограммы | 1050 1 |
|-------------+---------------------------------+---------|
| R1 = +01060 | 1002 по адресу 1022 | 1052 2 |
|-------------+---------------------------------+---------|
| R2 = +01070 | 1004 Переслать R2 в R0 | 1054 3 |
|-------------+---------------------------------+---------|
| R3 = +01080 | 1006 Переслать R3 в R1 | 1056 -2 |
|-------------+---------------------------------+---------|
| R6 = +01200 | 1008 Переслать R4 в R2 | 1058 4 |
|-------------+---------------------------------+---------|
| R7 = +01000 | 1010 Переслать R5 в R3 | 1060 1 |
|-------------+---------------------------------+---------|
| | 1012 Вызов подпрограммы | … |
|-------------+---------------------------------+---------|
| | 1014 по адресу 1022 | 1070 -2 |
|-------------+---------------------------------+---------|
| | 1016 Переслать R2 в (R5) | 1072 5 |
|-------------+---------------------------------+---------|
| | 1018 Переслать R4 в (R3) | 1074 6 |
|-------------+---------------------------------+---------|
| | 1020 Стоп | 1076 -3 |
|-------------+---------------------------------+---------|
| | 1022 Очистить R4 | 1078 7 |
|-------------+---------------------------------+---------|
| | 1024 Переслать R0 в R5 | 1080 -7 |
|-------------+---------------------------------+---------|
| | 1026 Переслать (R0)+ в R4 | |
|-------------+---------------------------------+---------|
| | 1028 Сравнить (R0) с R4 | |
|-------------+---------------------------------+---------|
| | 1030 Если < переход на 2 слов | |
|-------------+---------------------------------+---------|
| | 1032 Переслать R0 в R5 | |
|-------------+---------------------------------+---------|
| | 1034 Переслать (R0) в R4 | |
|-------------+---------------------------------+---------|
| | 1036 Увеличить на 1 R0 | |
|-------------+---------------------------------+---------|
| | 1038 Увеличить на 1 R0 | |
|-------------+---------------------------------+---------|
| | 1040 Сравнить R0 с R1 | |
|-------------+---------------------------------+---------|
| | 1042 Если <= переход на -8 слов | |
|-------------+---------------------------------+---------|
| | 1044 Возврат | |
+---------------------------------------------------------+
В данной программе регистры R4 и R5 используются как вспомогательные.
Заключение.
Разработанная программа-имитатор позволяет наглядно иллюстрировать
логическую структуру процессора и показать как он исполняет программы
написанные пользователем. Фактически мой имитатор во многом повторяет
написанную для ПЭВМ \"Yamaha\" программу-имитатор PDP.
Программа предназначена для изучения основных принципов устройства ЭВМ, а
именно, устройства микропроцессора как основной части практически любой
ЭВМ. Данный имитатор позволяет пользователю написать свою программу,
используя данную систему команд, и проследить, как процессор выполняет
заданную программу. В систему команд имитатора были отобраны наиболее
важные инструкции, предназначенные для обработки целых чисел.
Как уже было сказано данная программа написана в среде Delphi и хранится
на диске в файле pdp.exe. Примеры предложенные в тексте курсовой работы вы
также сможете найти на диске в файлах test1.pdp, test2.pdp, test3.pdp,
test4.pdp. Программа предназначена для работы на компьтерах PC AT 486 и
выше. На компьютере также необходимо наличие операционной системы
WINDOWS\'95/98. Рекомендуется также минимальное разрешение экрана 800 на
600.
Литература.
1. Еремин Е. А. Как работает современный компьютер. - Пермь, 1997.
2. Зальцман Ю. А. Архитектура и программирование на языке ассемблера
БК-0010. Информатика и образование, 1990, №1-4.
3. Смирнов А. Д. Архитектура вычислительных систем. - М.: \"Наука\", 1990.
4. Фаронов В. В. Delphi 3 Учебный курс. - М.: \"Нолидж\", 1998.
5. Туррот П., Брент Г. и др. Супербиблия Delphi 3. - Киев, \"ДиаСофт\",
1997.
6. Орлик С. Секреты Delphi на примерах. - М.: \"Бином\" 1996.
1
- 1-
7.