Из сборника Введение в информатику. Лабораторные работы. Ч. II / Авт.-сост. А.П. Шестаков; Перм. ун-т. Пермь, 1999. 71 с.
В состав E97 входят центральный процессор, оперативное и постоянное запоминающие устройства (ОЗУ и ПЗУ), дисплей и клавиатура.
Основным устройством в E97, построенном на основе неймановской архитектуры, является шестнадцатиразрядный процессор E97. Его система команд позволяет обрабатывать двухбайтовые машинные слова и отдельные байты.
Процессор содержит программно доступные регистры: четыре регистра общего назначения (R0-R3), указатель стека (SP stack pointer); служебные регистры: счетчик адреса команд (PC programm counter), регистр состояния процессора (PS); и программно недоступные (внутренние), которые процессор использует в своих целях: регистр команд (РК), регистры операндов (Рг1, Рг2) и сумматор (См).
Счетчик адреса команд PC при работе программы всегда указывает на адрес очередной команды, выполняя которую, автоматически изменяется согласно основному алгоритму работы процессора. Регистры общего назначения можно рассматривать как внутреннюю память процессора. Они используются для промежуточного сохранения данных и адресов данных.
Напомним основной алгоритм работы процессора:
Согласно этому алгоритму процессор исполняет программу до тех пор, пока не встретится команда СТОП.
Указатель стека SP чаще всего используется при организации подпрограмм, о чем речь пойдет ниже.
Регистр словосостояния (точнее говоря, отдельные его биты) анализируются при организации переходов, прерываний и т.д. Реально мы будем использовать только два бита: Z и N. Значения этих битов при возможных значениях результатов операций указаны ниже в таблице.
Результат | Значение бита Z | Результат | Значение бита N |
Нулевой (=0) | 1 | Отрицательный (<0) | 1 |
Ненулевой (≠ 0) | 0 | Неотрицательный (>= 0) | 0 |
При работе программы в регистр команд считывается очередная команда для дешифрирования и дальнейшего выполнения; в регистры операндов считываются согласно выполняемой команде операнды из регистров общего назначения или из оперативной памяти; в сумматоре выполняется действие, и сохраняется его результат до тех пор, пока не будет выполнено следующее действие. Последние четыре регистра доступны лишь для наблюдения, их содержимое программист изменить не может (в отличие от программно доступных).
Минимальной адресуемой ячейкой памяти в микрокомпьютере E97, как и в любой современной персональной ЭВМ, является байт. Номера байтов (адреса) лежат в диапазоне от 0000(16) до FFFF(16). Гораздо чаще приходится работать с машинными словами (в E97 они двухбайтовые напомним, что это связано с разрядностью процессора). Адрес машинного слова совпадает с номером младшего байта, входящего в слово, поэтому адреса всех машинных слов четные.
Для размещения программы и данных в распоряжении программиста ОЗУ (с адреса 0000 до адреса 00FE включительно). Программа и данные записываются в память E97 (в том числе и в регистры) в шестнадцатеричном коде. При этом целые числа задаются в дополнительном коде.
ПЗУ содержит полезные подпрограммы автора E97 и размещается с адреса 4000 по адрес 4106.
Рассмотрим способы адресации данных в E97. Основных здесь два прямой регистровый, когда данные для обработки содержатся в регистрах, и косвенный регистровый, когда данные расположены в ОЗУ, а их адреса находятся в регистрах общего назначения. Указанные способы адресации кодируются следующим образом:
Код операнда | ||
Регистр | Регистровая адресация | Косвенная адресация |
R0 | 0 | 4 |
R1 | 1 | 5 |
R2 | 2 | 6 |
R3 | 3 | 7 |
Условным обозначением косвенной адресации, в отличие от регистровой, служит название регистра, заключенное в круглые скобки. Например (R2).
Кроме рассмотренных способов адресации имеется еще адресация по командному счетчику PC. Если в качестве операнда указано значение D, то соответствующий операнд входит непосредственно в команду и расположен в ОЗУ по следующему за командой адресу; если E, то по следующему за командой адресу указан адрес, где хранится величина. Более подробно об этих способах адресации в примерах.
Познакомимся с некоторыми командами процессора E97. Все их можно разделить на безадресные (без операндов), одноадресные (с одним операндом) и двухадресные (с двумя операндами).
Безадресная команда имеет формат
Третий полубайт (отсчет ведется справа налево), как и в других командах, занимает код операции (КОП) то действие, которое необходимо выполнить. Другие полубайты могут содержать все, что угодно, так как они не задействованы; по традиции туда записывают нули.
К безадресным относятся команды нет операции (0) и стоп (F). Согласно принятым соглашениям в полной форме эти команды запишутся так:
Всякую программу обязательно должна завершать команда СТОП.
Двухадресная команда имеет формат
На приведенной схеме модификатор (МОД) некоторый вспомогательный код; ОП1 и ОП2 операнды в команде.
Вот список таких команд
Команда | Код | Команда | Код |
Переписать | 1 | Логическое И (AND) | 7 |
Сложить | 2 | Логическое ИЛИ (OR) | 8 |
Вычесть | 3 | ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR) | 9 |
Сравнить | 4 | Ввести в порт | A |
Умножить | 5 | Вывести из порта | B |
Разделить | 6 |
Действия выполняются по схеме ОП2 операция ОП1 ==> ОП2. Как видно из схемы, конечный результат операции всегда помещается во второй операнд.
Особое место занимает операция сравнения: при ее выполнении содержимое операндов не изменяется, а действие ОП2 - ОП1 выполняется лишь для установления значений управляющих битов Z и N регистра состояния PS.
В каждой из указанных здесь команд значение МОД (модификатора) равно нулю. Модификатор может быть отличен от нуля, об этом позднее.
Приведем примеры использования команд.
1) 0123 переслать содержимое регистра R2 в регистр R3, содержимое R2 сохраняется;
2) 0534 умножить содержимое регистра R3 на содержимое ячейки памяти, адрес которой указан в регистре R0, результат поместить в эту ячейку памяти.
При разработке и отладке программ для E97 целесообразно действовать так:
Пример 1. В регистрах R0, R1 содержатся целые числа. Получить сумму этих чисел в регистре R3, не изменяя содержимого R0, R1.
План решения
Распределять память в этой задаче уже не требуется, т.к. это сделано согласно условию.
Тест
R0 | R1 | R2 | R3 |
FFFE | 5 | | 3 |
Программа
Адрес Команда Действие Замечания 0000 0103 R0 => R3 R3 := R0 0002 0213 R1 + R3 => R3 R3 := R3 + R1 0004 0F00 стоп
При решении задачи использовалась только регистровая адресация.
Пример 2. В последовательных ячейках памяти расположены пять целых чисел. Получить произведение этих чисел. Содержимое памяти не изменять.
Идея решения. Поскольку величины хранятся в памяти последовательно, в одном из регистров будем изменять адреса от адреса первого числа до последнего, а в другом накапливать произведение.
Распределение памяти
R0 | R1 | R2 | R3 |
Адрес очередного числа | | | P |
Заданные числа будем хранить с адреса 0050.
Тест
Адрес | 0050 | 0052 | 0054 | 0056 | 0058 |
Величина | 0002 | FFFE | 000A | FFFF | 0003 |
Ответ: 120(10)=78(16)
Замечание. Целые числа записываются в память в дополнительном коде.
Программа
Адрес Команда Действие Замечания 0000 0143 (R0) => R3 R3 := (R0) 0002 02D0 R0 + 2 => R0 адрес второго числа 0004 0002 0006 0543 R3 * (R0) => R3 R3 := R3 * (R0) 0008 02D0 R0 + 2 => R0 адрес третьего числа 000A 0002 000C 0543 R3 * (R0) => R3 R3 := R3 * (R0) 000E 02D0 R0 + 2 => R0 адрес четвертого числа 0010 0002 0012 0543 R3 * (R0) => R3 R3 := R3 * (R0) 0014 02D0 R0 + 2 => R0 адрес пятого числа 0016 0002 0018 0543 R3 * (R0) => R3 R3 := R3 * (R0) 001A 0F00 стоп
При решении задачи использованы способы адресации: регистровая, косвенная и по счетчику команд.
Пример 3. Дано трехзначное натуральное число, записанное в десятичной системе счисления. Получить число, записанное теми же цифрами, но расположенными в обратном порядке.
Идея решения. Пусть данное число имеет вид N=abc, тогда ответ должен быть M=cba=c × 100 + b × 10 + a. Из исходного числа N цифры могут быть получены так:
Здесь через div обозначена операция целочисленного деления одного целого числа на другое, которая и используется в E97.
План решения
Распределение памяти
R0 | R1 | R2 | R3 |
N | цифры | | M |
и разности | и произведения |
Тест. Дано: 684(10)=2AC(16).
Ответ: 486(10)=1E6(16).
Программа
Адрес Команда Действие Замечания 0000 0101 R0 => R1 0002 06D1 R1 / 100 a := N / 100 0004 0064 0006 0113 R1 => R3 M := a 0008 05D1 R1 * 100 a * 100 000A 0064 000C 0310 R0 := R0 - R1 N := N - a * 100 000E 0101 R0 => R1 0010 06D1 R1 / 10 b := (N - a * 100) / 10 0012 000A 0014 05D1 R1 * 10 0016 000A 0018 0213 R3 := R3 + R1 M := M + b * 10 001A 0310 R0 := R0 - R1 c := N - a * 100 - b * 10 001C 05D0 R0 * 100 001E 0064 0020 0203 R3 := R3 + R0 M := M + c * 100 0022 0F00 стоп
При разработке программы были использованы регистровая и адресация по PC.