1.3 Система команд микропроцессора
В микропроцессорах серии К1801 для представления адресов и данных используется двоично-восьмеричная система счисления. Шестнадцатиразрядное число представляется в виде пяти восьмеричных разрядов и одного (старшего) двоичного разряда. Значение каждого разряда (кроме старшего) меняется от 0 до 7 (рис.2), т.е. минимальное значение операнда или адреса равно 000000, максимальное – 177777.
15 |
14 |
13 |
12 |
11 |
10 |
09 |
08 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
0/1 |
0…7 |
0…7 |
0…7 |
0…7 |
0…7 |
Рис.2. Представление адресов и данных
В микропроцессорах серии К1801 используется три типа команд: безадресные, одноадресные и двухадресные. Безадресные команды содержат только код операции (выполняемую функцию). Одноадресные и двухадресные содержат: код операции, номер РОНа (или РОНов) и метод адресации.
К ячейкам памяти можно адресоваться как к байтам, так и к словам. . К регистрам тоже можно адресоваться как к байту, но только к младшему. А вот команды процессора всегда кратны двум байтам (слову).
Формат безадресной команды:
15 |
14 |
13 |
12 |
11 |
10 |
09 |
08 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
Код команды |
Рис. 3
Формат одноадресной команды:
15 |
14 |
13 |
12 |
11 |
10 |
09 |
08 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
Код команды |
адресация |
РОН |
Рис. 4
Формат двухадресной команды (src-источник, dst-приемник):
15 |
14 |
13 |
12 |
11 |
10 |
09 |
08 |
07 |
06 |
05 |
04 |
03 |
02 |
01 |
00 |
Код команды |
адресация src |
РОН |
адресация dst |
РОН |
Рис.5
Разряды 00…02 определяют один из восьми РОНов, который используется в конкретной команде (с R0 по R7).
Разряды 03…05 определяют метод адресации следующим образом:
- ноль в третьем разряде соответствует прямой адресации, единица – косвенной;
- код 00 в пятом и четвертом разрядах соответствует регистровой адресации, 01 – автоинкрементной, 10 – автодекрементной, 11 – индексной.
В двухадресных командах назначение разрядов 06…11 соответствует назначению разрядов 00…05. Например, в команде ХХ3405 используется косвенная автоинкрементная адресация к регистру R4 и прямая адресация к регистру R5.
Методы адресации процессора 1801 представлены в таблице 1.
Таблица 1
Методы адресации процессора 1801
Код адресации |
Название |
Описание |
Двухадресн. командa |
Одноадресн. командa |
000 |
Регистровый |
Операнд находится в регистре |
mov R0,R4 |
INC R0 |
010 (28) |
Автоинкрементный |
В регистре находится адрес операнда, после выполнения регистр увеличивается на 1(байтовая операция) или на 2(словная операция) |
mov R0,(R4)+ |
INC(R0)+ |
100 (48) |
Автодекрементный |
То же, но регистр уменьшается ДО выполнения команды |
mov R0,-(R4) |
INC-(R0) |
110 (68) |
Индексный |
Адресом операнда является сумма регистра и следующего за командой слова |
mov R0, 10(R4) |
CLR200(R3) |
001 |
Косвенно- регистровый |
Адрес операнда в регистре |
mov R0,(R4) или mov R0,@R4 |
CLR@(R3) |
011 (38) |
Косвенно- автоинкрементный |
В регистре находится адрес адреса (!), после выполнения команды регистр инкрементируется также, как при автоинкрементной адресации |
mov R0,@(R4)+ |
INC@(R0)+ |
101 (58) |
Косвенно- автодекрементный |
Содержимое выбранного РОН уменьшается на 2, а затем используется как косвенный адрес, т. е. адрес ячейки, в которой находится адрес операнда |
mov R0,@-(R4) |
INC@-(R0) |
111 (78) |
Косвенная индексация |
Адресом адреса операнда является сумма содержимого регистра и следующего за командой слова |
mov R0,@10(R4) |
CLR @200(R3) |
Следующие режимы адресации можно выделить как специальные, поскольку в качестве регистра в них используется R7 (PC), указывающий на адрес инструкции, подлежащей исполнению. |
||||
010 111 (278) |
Непосредственная |
Операнд следует за словом инструкции. По сути, это автоинкрементная адресация с иcпользованием PC |
|
mov #1,R0 |
011 111 (378) |
Абсолютная |
Слово, следующее за словом команды, является абсолютным адресом операнда |
mov R0,@#1000 |
INC@#4000 |
110 111 (678) |
Относительная |
Адресом операнда является сумма PC и смещения в следующем за командой слове. Код получается перемещаемый! |
mov R0,ADRES |
CLR200 |
111 111 (778) |
Относительно- косвенная |
Адрес адреса операнда вычисляется как сумма PC и следующего за командой слова |
mov R0,@ADRES |
CLR@200 |
Список команд центрального процессора серии К1801 приведен в табл.3. Часть команд может выполнять операции как с 16 р словами, так и с отдельными байтами. В последнем случае эти команды имеют обозначение (В) после основного имени. Для задания этих команд при выполнении байтовых операций в старший (15) разряд команды записывается единица, а при работе со словами – ноль. В табл.3 этот разряд обозначен *. Например, команда инвертирования слова имеет код 0051DD, а команда инвертирования младшего байта – код 1051DD, соответственно.
Дополнительно в табл.3 использованы следующие обозначения:
R – регистр общего назначения:
SS – поле адресации источника;
DD – поле адресации приемника результата;
В приложении 1 показаны последовательности операций выполнения команды при использовании разных методов адресации. При регистровом методе адресации операнд должен находится в выбранном регистре. Следовательно, любой из восьми РОНов может быть использован как накопитель.
При использовании автоинкрементного метода адресации содержимое выбранного регистра является адресом ячейки памяти, в которой находится операнд. Оно автоматически наращивается при выполнении команды, что упрощает доступ к массивам данных.
В случае использования индексного метода адресации исполнительный адрес определяется как сумма содержимого выбранного РОНа с индексным словом, которое содержится в следующей за командным словом ячейке памяти.
В косвенно-регистровом методе содержимое выбранного регистра является адресом операнда. В других косвенных методах содержимое регистра позволяет найти адрес операнда, а затем сам операнд.
II. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Лабораторная работа выполняется с помощью программы-эмулятора микропроцессора PDP 11.
1. Запустить программу PDP 11
2. Перечень команд управления программы-эмулятора приведен в табл.2.
Таблица 2
№ пп |
Команда эмулятора
|
Описание команды |
1. |
d Приемник (Значение операнда) |
Занести указанное значение в приемник (ячейку памяти или регистр ri, i=0..7), например: d 1000 005064, d r4 000777 |
2. |
ex Источник |
Посмотреть содержимое источника (ячейки памяти или РОНа), например: ex 1000, ex 1000-1010, ex r4 |
3. |
go Адрес |
Запустить программу с указанного адреса, go 1000 |
4. |
h |
Помощь |
5. |
q |
Выход из программы-эмулятора |
-
Пример.
Команда SWAB – перестановка байтов. При использовании прямой адресации к четвертому регистру – код команды 000304.
d 1000 000304
d 1002 000000
d r4 000777
go 1000
ex r4
r4: 177401
0 |
0 |
0 |
7 |
7 |
7 |
15р 8р 7р 0р
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
старший байт |
младший байт
|
||||||||||||||
1 |
7 |
7 |
4 |
0 |
1 |
4. Команды с прямой регистровой адресацией .
4.1. Команда INС Ri (j=0,1…7). По этой команде к содержимому регистра добавляется единица.
Выполнить команду инкрементирования третьего регистра (код 005203).
Примечания:
-
Для исключения дополнительных ошибок в конце программы (после последней исполняемой команды) рекомендуется помещать команду HALT (код 000000).
-
Для исследования команд использовать адресное пространство с 1000 до 17776 (нулевой банк памяти).
4.2. Команда ADD Ri, Rj (i,j=0…7). По этой команде осуществляется сложение двух операндов. Результат заносится по адресу второго операнда.
Сложить содержимое второго и четвертого регистров (код 060204).
4.3. Команда СОМВ Ri инвертирует содержимое младшего байта регистра
(с 0р по 7р).
Выполнить команду СОМВ для четвертого регистра (код 105104).
5. Команды автоинкрементной адресацией
Команда CLR (Ri) + обнуляет содержимое ячейки, адрес которой занесен в регистр Ri. Одновременно содержимое самого регистра увеличивается на 2.
Выполнить команду CLR, обнулив ячейку по адресу 1200 используя автоинкрементную адресацию пятого регистра (код 005025).
6. Команды индексной адресацией
Команда CLR ХХХХХХ (Ri) обнуляет ячейку по адресу, определяемому как сумма содержимого регистра Ri и индексного слова ХХХХХХ, следующего за командой.
Выполнить команду CLR обнулив ячейку по адресу 2400 используя индексную адресацию четвертого регистра (код 005064).
7. Команды с косвенной регистровой адресацией
7.1. Команда CLR @ Ri обнуляет ячейку, адрес которой записан в регистр Ri. Выполнить команду CLR обнуления ячейки по адресу 1020, используя для адресации пятый регистр (код 005015).
7.2. Команда DEC @ (Ri)+. По этой команде содержимое ячейки, адрес которой находится в регистре Ri, уменьшается на единицу, а содержимое самого регистра Ri увеличивается на два.
Выполнить команду DEC, изменив содержимое ячейки по адресу 1040, используя второй регистр 005322.
8. Команды с непосредственной адресацией.
8.1. Команда BIS#ХХХХХХ,Ri. По этой команде осуществляется логическое сложение содержимого регистра Ri с числом ХХХХХХ (константой), следующим за командным словом.
Выполнить команду BIS логически сложив содержимое регистра R0 с числом 707 (код 052700).
8.2. Команда MOV#ХХХХХХ, Ri загружает регистр Ri содержимым ячейки памяти, следующей за командой.
Выполнить команду MOV загрузив число 200 в нулевой регистр (код 012700).
9. Команды с прямой (абсолютной) адресацией.
Команда JMP @ # ХХХХХХ. По этой команде осуществляется безуслов-
ный переход по адресу, расположенному в следующей ячейке памяти.
С помощью команды JMP(код000137) и CLR(код005037) осуществить обнуление ячейки 1100.
IV. ТРЕБОВАНИЯ К ОТЧЕТУ.
Отчет по лабораторной работе должен содержать тексты программ в соответствии с пп. 4…9 с указанием содержимого использованных РОНов и ячеек памяти до и после выполнения команды. Например, для команды SWAB:
1000 000304
r4 000777 - операнд
r4: 177401 - результат
Таблица 3
Список необходимых команд микропроцессора К1801ВМ1
Мнемоника |
|
Команда |
Код |
Одноадресные команды |
|||
CLR (B) |
0 (d) |
Очистка |
*050DD |
COM(B) |
|
Инвертирование |
*051DD |
INC(B) |
(d) + 1 (d) |
Прибавление единицы |
*052DD |
DEC(B) |
(d) - 1 (d) |
Вычитание единицы |
*053DD |
NEG(B) |
|
Изменение знака |
*054DD |
ASR(B) |
|
Арифметический сдвиг вправо (d) / 2 (d) |
*062DD |
ASL(B) |
|
Арифметический сдвиг влево (d) * 2 (d) |
*063DD |
ROR(B) |
|
Циклический сдвиг вправо |
*060DD |
ROL(B) |
|
Циклический сдвиг влево |
*061DD |
ADC(B) |
|
Прибавление переноса |
*055DD |
SBC(B) |
|
Вычитание переноса |
*056DD |
SWAB |
|
Перестановка байтов |
0003DD |
MEPS |
|
Чтение ССП |
1067DD |
MTPS |
|
Запись ССП |
1064SS |
Двухадресные команды |
|||
MOV(B) |
(s) (d) |
Пересылка |
*ISSDD |
CMP(B) |
|
Сравнение |
*2SSDD |
ADD |
(d) + (s) (d) |
Сложение |
06SSDD |
SUB |
(d) - (s) (d) |
Вычитание |
16SSDD |
BIT(B) |
(d) (s) (d) |
Логическое умножение |
*3SSDD |
BIC(B) |
|
Очистка разрядов |
*4SSDD |
BIS(B) |
(d) (s) (d) |
Логическое сложение |
*5SSDD |
XOR |
|
Исключающее ИЛИ |
074RDD |
Команды управления программой |
|||
ВСС |
Ветвление, если нет переноса |
103000 |
|
BCS |
Ветвление, если перенос |
103400 |
|
JMP |
Безусловный переход |
0001DD |
|
Команды управления микропроцессором |
|||
HALT |
Останов |
000000 |
|
WAIT |
Ожидание |
000001 |
|
RESET |
Сброс внешних устройств |
000005 |
Приложение
1