Главная / Цифровая археология / Электронные компоненты / Микропроцессор К1801ВМ1 / Система команд
[ Фотографии ] [ Описание ] [ Система команд ]

Краткий справочник по системе команд микропроцессора К1801ВМ1

Микропроцессор К1801ВМ1 имеет 8 регистров общего назначения (РОН) и регистр слова состояния процессора (РСП). Все регистры 16-разрядные.

Регистры общего назначения R0, R1, R2, R3, R4, R5 предназначены для хранения промежуточных результатов вычислений.

Регистр R6 обозначается в ассемблере "SP" (Stack Pointer - указатель стека) и используется в этом качестве как при вызове подпрограмм, так и при обработке прерываний.

Регистр R7 обозначается "PC" (Program Counter - счетчик команд) всегда содержит адрес следующей команды, котроую должен выполнить процессор.

РСП предназначен для хранения PSW (Processor Status Word - слово состояния процессора). В PSW имеют значение следующие биты (разряды):

Остальные биты PSW устанавливаются программистом для задания режимов работы процессора.

Все опкоды представлены в восьмеричной системе счисления.

Условные сокращения в опкодах:

Если команда позволяет работать с байтами, то к мнемонике добавляется суффикс (B). Например мнемоника MOV обозначает, что операция будет производиться над 16-разрядным словом, а мнемоника MOVB обозначает, что операция будет производиться над байтом. Фактически этот модификатор присутствует во всех мненониках, в опкоде которых встречается символ *.

Поля адресации определяют способ получения операнда.

КодСпособ адресацииОписаниеПримеры
0регистровый регистр содержит операнд CLR R1
1косвенно-регистровый регистр содержит адрес операнда CLR (R1)
CLR @R1
2автоинкрементный регистр содержит адрес операнда. Содержимое регистра после его использования в качестве адреса увеличивается на 2 (для команд над словами) или на 1 (для байтовых команд) CLR (R2)+
3косвенно-автоинкрементный регистр содержит адрес адреса операнда. Содержимое регистра после его использования в качестве адреса увеличивается на 2 CLR @(R2)+
4автодекрементный содержимое регистра уменьшается на 2 ( для команд над словами ) или на 1 (для байтовых команд ) и затем используется как адрес операнда CLR -(R2)
5косвенно-автодекрементный содержимое регистра уменьшается на 2 и используется как адрес адреса операнда CLR @-(R1)
6индексный содержимое регистра складывается с числом, записанным после команды, и полученная сумма используется в качестве адреса операнда CLR 2(R5)
CLR MT(R0)
7косвенно-индексный содержимое регистра складывается с числом, записанным после команды и полученная сумма используется в качестве адреса адреса операнда CLR @22(R1)

Если адресация операнда происходит через регистр РС, то способы адресации другие.

КодСпособ адресацииОписаниеПримеры
2непосредственный операнд хранится в слове, следующем за командой MOV #21,R3
MOV #IN,R0
3абсолютный адрес операнда хранится в слове, следующем за командой CLR @#7000
JMP @#BEN
6относительный содержимое РС складывается со словом, записанным в памяти за командой, и полученная сумма используется как адрес операнда JMP TV
CLR 5554
7косвенно-относительный Содержимое РС складывается со словом, следующим за командой, полученная сумма используется как адрес адреса операнда CLR @MET
INC @15342

Обозначения косвенной адресации "(R2)" и "@R2" равнозначны.

Однооперандные команды

1. CLR(B) 2. COM(B) 3. INC(B) 4. DEC(B) 5. NEG(B) 6. ADC(B) 7. SBC(B) 8. TST(B) 9. ROR(B) 10. ROL(B) 11. ASR(B) 12. ASL(B) 13. SWAB 14. MTPS 15. MFPS

Двухоперандные команды

16. MOV(B) 17. CMP(B) 18. BIT(B) 19. BIC(B) 20. BIS(B) 21. ADD 22. SUB 23. XOR

Команды перехода

Каждая команда перехода занимает одно слово памяти (кроме команды JMP) и имеет формат:

Команды JMP и SOB имеют другой формат.

Команда перехода (ветвления) позволяет изменить содержимое счетчика команд (регистра PC) на величину смещения, указанного в младшем байте кода команды. А изменение содержимого счетчика команд на величину смещения приведет к продолжению выполнения программы с адреса, равного выражению:

где

Старший разряд смещения (разряд 7 в коде команды) является знаковым и равен "1" (для отрицательных смещений) или "0" (для положительных смещений). Так как для хранения значения смещения отводится только младший байт кода команды, то оно не может выйти за границы интервала от -128Д до +127Д.

24. BR 25. BNE 26. BEQ 27. BPL 28. BMI 29. BVC 30. BVS 31. BGE 32. BLT 33. BGT 34. BLE 35. BHI 36. BLOS 37. BHIS(BCC) 38. BLO(BCS) 39. SOB 40. JMP

Команды для работы с подпрограммами

41. JSR 42. RTS 43. MARK

Команды прерываний

Источниками возникновения прерываний могут быть как сигналы внешних устройств (аппаратные прерывания), так и некоторые ситуации, возникающие при выполнении программы (программные прерывания).

Каждый источник прерывания имеет свой вектор прерывания. Это адрес ОЗУ, по которому записан адрес программы обработки данного прерывания.

Для того, чтобы установить обработчик прерывания, необходимо записать адрес его первой команды в соответствующий вектор прерывания. Чтобы обеспечить возврат к прерванной программе, в конце программы обработки прерывания должна стоять команда RTI.

Рассмотрим пример возникновения прерывания от внешнего устройства При возникновении запроса на прерывание процессор заканчивает выполнение текущей команды программы и анализирует бит P в РСП. Если он равен нулю, то процессор начинает обработку прерывания.

Первым делом процессор помещает в стек текущее значение PSW, потом содержимое счетчика команд PC (он показывает на следующую команду после только что выполненной). После этого процессор берет из соответствующего вектора прерывания (например, из ячейки 60) адрес программы обработки прерывания и помещает его в PC, а из следующей по порядку ячейки 62 берет новое значение PSW и помещает его в РСП. Если в 62 ячейке было записано число 200, то теперь бит P в РСП будет установлен, и новое прерывание не будет обрабатываться до тех пор, пока не закончится обработка данного прерывания.

Бит P в PSW маскирует только маскируемые прерывания.

44. EMT 45. TRAP 46. BPT 47. IOT 48. RTI 49. RTT

Безоперандные команды

50. HALT 51. WAIT 52. RESET 53. NOP 54. CLC 55. CLV 56. CLZ 57. CLN 58. CCC 59. SEC 60. SEV 61. SEZ 62. SEN 63. SCC

Использование стека

Стеком может служить любая свободная область ОЗУ.

Под стеком понимается область ОЗУ, адресация к ячейкам которой осуществляется определенным образом. Стандартный способ работы со стеком, который используют и все команды прерываний и подпрограмм, осуществляется с помощью регистра SP (Stack Pointer - указатель стека).

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

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

Перед выполнением команд, использующих стек, в регистр SP процессора необходимо предварительно записать адрес начала стека (настроить стек).

С увеличением размеров стека уменьшается содержимое регистра SP - стек растет в сторону младших адресов.

На следующем рисунке показано выполнение записи в стек по команде "MOV R3,-(SP)". Пусть до выполнения команды MOV регистр SP содержит адрес 1754, а в R3 было записано число 132. Затем указатель стека уменьшается на 2 и содержимое регистра R3 (число 132) записывается по адресу 1752.

Дальше на рисунке приведен пример чтения из стека. До выполнения команды "MOV (SP)+,R3" регистр SP содержит адрес 1752. По указанной команде из слова, адрес которого хранится в SP, число 132 пересылается в регистр R3, после чего содержимое регистра SP увеличивается на 2.

Таблица опкодов

NКод МнемоникаДействие Признаки
NZVC
1 000000 HALT Останов ----
2 000001 WAIT Ожидание ----
3 000002 RTI Возврат из прерывания ****
4 000003 BPT Командное прерывание для отладки ****
5 000004 IOT Командное прерывание для ввода-вывода ****
6 000005 RESET Сброс внешних устройств ----
7 000006 RTT Возврат из отладочного прерывания ****
8 0001DD JMP Безусловный переход ----
9 00020R RTS Возврат из подпрограммы ----
10 004RDD JSR Обращение к подпрограмме ----
11 104000 ... 104377 EMT Командное прерывание для системных программ ****
12 104400 ... 104777 TRAP Командное прерывание ****
13 000240 NOP Нет операции ----
14 000241 CLC Очистка C ---0
15 000242 CLV Очистка V --0-
16 000244 CLZ Очистка Z -0--
17 000250 CLN Очистка N 0---
18 000261 SEC Установка C ---1
19 000262 SEV Установка V --1-
20 000264 SEZ Установка Z -1--
21 000270 SEN Установка N 1---
22 000277 SCC Установка всех разрядов (N, Z, V, C) 1111
23 000257 CCC Очистка всех разрядов (N, Z, V, C) 0000
24 0003DD SWAB Перестановка байтов **00
25 *050DD CLR(B) Очистка 0100
26 *051DD COM(B) Инвертирование **01
27 *052DD INC(B) Прибавление единицы ***-
28 *053DD DEC(B) Вычитание единицы ***-
29 *054DD NEG(B) Изменение знака ****
30 *055DD ADC(B) Прибавление переноса ****
31 *056DD SBC(B) Вычитание переноса ****
32 *057DD TST(B) Проверка **00
33 *060DD ROR(B) Циклический сдвиг вправо ****
34 *061DD ROL(B) Циклический сдвиг влево ****
35 *062DD ASR(B) Арифметический сдвиг вправо ****
36 *063DD ASL(B) Арифметический сдвиг влево ****
37 0064NN MARK Восстановление указателя стека ----
38 0067DD SXT Расширение знака -*0-
39 1064SS MTPS Запись слова состояния процессора ****
40 1067DD MFPS Чтение слова состояния процессора **0-
41 *1SSDD MOV(B) Пересылка **0-
42 *2SSDD CMP(B) Сравнение ****
43 *3SSDD BIT(B) Проверка разрядов **0-
44 *4SSDD BIC(B) Очистка разрядов **0-
45 *5SSDD BIS(B) Логическое сложение **0-
46 074RDD XOR Исключающее ИЛИ **0-
47 06SSDD ADD Сложение ****
48 16SSDD SUB Вычитание ****
49 0004XXX BR Ветвление безусловное ----
50 0010XXX BNE Ветвление, если не равно (нулю) ----
51 0014XXX BEQ Ветвление, если равно (нулю) ----
52 0020XXX BGE Ветвление, если больше и равно (нулю) ----
53 0024XXX BLT Ветвление, если меньше (нуля) ----
54 0030XXX BGT Ветвление, если больше (нуля) ----
55 0034XXX BLE Ветвление, если меньше или равно (нулю) ----
56 077RNN SOB Вычитание единицы и ветвление ----
57 1000XXX BPL Ветвление, если плюс ----
58 1004XXX BMI Ветвление, если минус ----
59 1010XXX BHI Ветвление, если больше ----
60 1014XXX BLOS Ветвление, если меньше или равно ----
61 1020XXX BVC Ветвление, если нет арифметического переполнения ----
62 1024XXX BVS Ветвление, если арифметическое переполнение ----
63 1030XXX BHIS, BCC Ветвление, если больше или равно ----
64 1034XXX BLO, BCS Ветвление, если меньше ----

Обозначения для признаков:


Источники: