Расширенный набор команд БЭВМ

Содержание

  1. Набор команд
  2. Реализация
  3. Ограничения
  4. Стек
  5. Отличия от оригинального набора команд
  6. Новые команды
  7. Примеры использования

Набор команд

Наименование Мнемоника Код Описание
Безадресные команды
Нет операции NOP 0000
Останов HLT 0100
Разрешение прерываний EI 0200
Запрещение прерываний DI 0300
Очистка флага переноса CLC 0400 0 → С
Инверсия флага переноса CMC 0500 (!С) → С
Циклический сдвиг влево ROL 0600 Содержимое А и С циклически сдвигается влево
Сдвиг влевоSHL 0680 Содержимое А сдвигается влево c заполнением старшего бита нулём
Циклический сдвиг вправо ROR 0700 Содержимое А и С циклически сдвигается вправо
Сдвиг вправоSHR 0780 Содержимое А сдвигается вправо c заполнением младшего бита нулём
Очистка аккумулятора CLA 0800 0 → А
Инверсия аккумулятора CMA 0900 (!А) → А
Инкремент аккумулятора INC 0A00 (А) + 1 → А
Декремент аккумулятора DEC 0B00 (А) - 1 → А
Обмен аккумулятора с вершиной стекаSWAP 0C00 (A) ↔ ((7FF))
Помещение аккумулятора в стекPUSH 0D00 (7FF) - 1 → 7FF, A → (7FF)
Помещение РС в стекPUSHF 0D80 (7FF) - 1 → 7FF, РС → (7FF)
Получение аккумулятора из стекаPOP 0E00 ((7FF)) → A, (7FF) + 1 → 7FF
Получение РС из стекаPOPF 0E80 ((7FF)) → C, N, Z, EI, (7FF) + 1 → 7FF
Возврат из подпрограммыRET 0F00 ((7FF)) → СК, (7FF) + 1 → 7FF
Возврат из прерыванияIRET 0F80 ((7FF)) → СК, (7FF) + 1 → 7FF, ((7FF)) → C, N, Z, EI, (7FF) + 1 → 7FF
Команды ввода-вывода
Очистка флага ВУ CLF ВУ 10XX
Опрос флага ВУ TSF ВУ 11XX Если флаг ВУ = 1, то (СК) + 1 → СК
Ввод IN ВУ 12XX (ВУ) → А
Вывод OUT ВУ 13XX (А) → ВУ
Адресные команды
Обращение к подпрограммеCALL М 2XXX (7FF) - 1 → 7FF, (СК) → (7FF); М → СК
Безусловный переход JMP М 3XXX М → СК
Переход, если перенос BCS М 4XXX Если (С) = 1, то М → СК
Переход, если плюс BPL М 5XXX Если (N) = 0, то М → СК
Переход, если минус BMI М 6XXX Если (N) = 0, то М → СК
Переход, если нуль BEQ М 7XXX Если (Z) = 0, то М → СК
Пересылка MOV М 8XXX (A) → М
СравнениеCMP М 9XXX (A) - (М) → C, N, Z
Декремент и пропускLOOP М AXXX (М) - 1 → М; Если (М) ≥ 0, то (СК) + 1 → СК
Приращение и пропуск ISZ М BXXX (М) + 1 → М; Если (М) ≥ 0, то (СК) + 1 → СК
Вычитание SUB М CXXX (A) - (М) → A
Сложение с переносом ADC М DXXX (A) + (С) + (М) → A
Сложение ADD М EXXX (A) + (М) → A
Логическое умножение AND М FXXX (A) & (М) → A

Выделены новые команды.

Реализация

Расширенный набор команд реализован в:
  1. Расширенной микропрограмме

Ограничения

  1. Данный набор команд представлен в ознакомительных целях. Использование расширенного набора команд и расширенной микропрограммы при выполнении лабораторных работ, домашних заданий и при написании рубежного контроля запрещено
  2. Программы, использующие расширенный набор команд, бинарно несовместимы с программами, написанными с использованием оригинального набора команд
  3. Для программ, использующих стек, выполнение пультовой операции Пуск является обязательным

Стек

В связи с отсутствием в БЭВМ регистра для хранение указателя стека используется ячейка памяти с адресом 7FF. Указатель стека устанавливается в значение по умолчанию при выполнении пультовой операции Пуск.

Отличия от оригинального набора команд

  1. Для всех команд изменён их код. Команда HLT получила код 0000
  2. Мнемоника команды BR изменена на JMP
  3. Команда JSR заменена новой командой CALL, которую можно использовать в рекурсивных подпрограммах
  4. Команды EI и DI получили цикл прерывания
  5. Добавлены новые команды
  6. Изменена обработка прерываний:
    1. При обращении к подпрограмме обработки прерывания содержимое СК и РС сохраняется в стеке и происходит переход по адресу, расположенному в ячейке 000
    2. Для возврата из подпрограммы обработки прерывания добавлена команда IRET, которая восстановит из стека значение СК и состояние флагов C, N, Z, EI. В подпрограмме обработки прерывания больше не требуются сохранение флага C и разрешение прерываний перед возвратом из неё
    3. За счёт использования стека теоретически возможно разрешение прерываний в подпрограмме обработки прерывания

Новые команды

  1. LOOP - осуществляет декремент указанной ячейки и пропускает следующую команду до тех пор, пока значение ячейки не станет отрицательным. Предназначена для организации циклов с предусловием
  2. CMP - вычитает из содержимого аккумулятора содержимое указанной ячейки и сохраняет результат во флагах C, N, Z
  3. CALL - переход к подпрограмме с сохранением адреса возврата в стеке
  4. RET - возврат из подпрограммы
  5. IRET - возврат из подпрограммы обработки прерывания. Восстанавливает из стека значения СК и флагов C, N, Z, EI
  6. PUSH - сохраняет значение А в стеке
  7. POP - восстанавливает значение А из стека
  8. PUSHF - сохраняет значение РС в стеке
  9. POPF - восстанавливает значение флагов C, N, Z, EI из стека
  10. SWAP - обменивает содержимое А с вершиной стека
  11. SHL - сдвиг содержимого А влево с заполнением старшего бита А нулём
  12. SHR - сдвиг содержимого А вправо с заполнением младшего бита А нулём

Примеры использования

Вычисление произведения двух чисел

ORG 10
BEGIN:	CLA
	MOV	R
	ADD	Y
	PUSH
	CLA
	ADD	X
LOOP:	BEQ	DONE
	SHR
	SWAP
	BCS	ADDUP
	JMP	SKIP
ADDUP:	PUSH
	ADD	R
	MOV	R
	POP
SKIP:	SHL
	SWAP
	JMP	LOOP
DONE:	POP
	HLT

X:	WORD	?
Y:	WORD	?
R:	WORD	?

Вычисление факториала числа

Используя для умножения операцию сложения
ORG 10
BEGIN:
	CLA
	ADD	X
	CALL	FACTORIAL
	MOV	R
	HLT

ORG 18
X:	WORD	8
R:	WORD	?

ORG 20
FACTORIAL:
	CMP	CONST
	BEQ	FINISH
	PUSH
	DEC
	CALL	FACTORIAL
	MOV	VALUE
	POP
	MOV	COUNT
	CLA
LOOP:	LOOP	COUNT
FINISH:	RET
	ADD	VALUE
	JMP	LOOP

CONST:	WORD	1
VALUE:	WORD	?
COUNT:	WORD	?
Используя для умножения подпрограмму
ORG 10
BEGIN:
	CLA
	ADD	X
	CALL	FACTORIAL
	MOV	R
	HLT

ORG 18
X:	WORD	8
R:	WORD	?

ORG 20
FACTORIAL:
	CMP	CONST
	BEQ	FINISH
	PUSH
	DEC
	CALL	FACTORIAL
	CALL	MUL
FINISH:	RET

CONST:	WORD	1

ORG 30
MUL:	SWAP
	MOV	RETURN
	CLA
	MOV	SUM
	POP
LOOP:	BEQ	DONE
	SHR
	SWAP
	BCS	ADDUP
	JMP	SKIP
ADDUP:	PUSH
	ADD	SUM
	MOV	SUM
	POP
SKIP:	SHL
	SWAP
	JMP	LOOP
DONE:	POP
	CLA
	ADD	SUM
	JMP	(RETURN)
SUM:	WORD	?
RETURN:	WORD	?

Обработка прерываний

Требования
  1. В основной программе должно циклически сдвигаться содержимое ячейки R, всегда содержащее один единичный бит.
  2. Раз в десять секунд должно увеличиваться содержимое ячейки T.
  3. При запросе от ВУ1 выводить на него значение ячейки X.
  4. При запросе от ВУ2 сохранять введённое в РД ВУ2 значение в ячейку X.
  5. При запросе от ВУ3 обменивать местами значение его РД и ячейки X.
  6. Обмен с ВУ осуществлять в режиме прерывания.
Решение
ORG 000
	WORD	INTR

ORG 010
BEGIN:
	CLA
	MOV	T
	ADD	CONST
	OUT	0
	EI
	CLA
	INC
LOOP:	ROR
	BCS	LOOP
	MOV	R
	JMP	LOOP

ORG 01C
CONST:	WORD	64
X:	WORD	0
T:	WORD	?
R:	WORD	?

INTR:	PUSH
	TSF	0
	JMP	IO1
	CLF	0
	ISZ	T
	NOP
IO1:	TSF	1
	JMP	IO2
	CLA
	ADD	X
	OUT	1
	CLF	1
IO2:	TSF	2
	JMP	IO3
	CLA
	IN	2
	CLF	2
	MOV	X
IO3:	TSF	3
	JMP	END
	CLA
	ADD	X
	PUSH
	IN	3
	MOV	X
	POP
	OUT	3
	CLF	3
END:	POP
	IRET