Набор инструкций Burroughs B6x00-7x00 - Burroughs B6x00-7x00 instruction set

В Набор инструкций Burroughs B6x00-7x00 включает набор допустимых операций для Burroughs B6500,[1] B7500 и выше Большие системы Берроуза, в том числе текущие (по состоянию на 2006 г.) Unisys Системы Clearpath / MCP; в него не включены инструкции для других больших систем Burroughs, включая B5000, B5500, B5700 и B8500. Эти уникальные машины отличаются оригинальным дизайном и набором инструкций. Каждый слово данных связан с типом, и эффект операции над этим словом может зависеть от типа. Далее машины штабелируются[а] основанный на том, что у них не было регистров, адресуемых пользователем.

Как и следовало ожидать из описания среды выполнения структуры данных используемые в этих системах, они также имеют интересный Набор инструкций. Программы состоят из 8-битные слоги, который может быть вызовом по имени, вызовом по значению или формировать оператор, длина которого может составлять от одного до двенадцати слогов. Менее 200 операторы, все из которых укладываются в 8-битные слоги. Многие из этих операторов полиморфный в зависимости от типа данных, которые используются в теге. Если игнорировать мощные операторы сканирования, передачи и редактирования строк, базовый набор составляет всего около 120 операторов. Если мы удалим операторы, зарезервированные для операционной системы, такие как MVST и HALT, набор операторов, обычно используемых программами пользовательского уровня, будет меньше 100. Слоги Name Call и Value Call содержат адресные пары; слоги оператора либо не используют адреса, либо используют управляющие слова и дескрипторы в стеке.

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

Например, в наборе команд есть только один оператор ADD. Типичные архитектуры требуют нескольких операторов для каждого типа данных, например add.i, add.f, add.d, add.l для целочисленных, плавающих, двойных и длинных типов данных. Архитектура различает только числа с одинарной и двойной точностью - целые числа просто реалы с нулем показатель степени. Когда один или оба операнды имеет тег 2, выполняется добавление двойной точности, в противном случае тег 0 указывает одинарную точность. Таким образом, сам тег является эквивалентом оператора расширения .i, .f, .d и .l. Это также означает, что код и данные никогда не могут быть несовместимы.

Для обработки данных в стеке важны два оператора - VALC и NAMC. Это двухбитные операторы, 00 - это VALC, вызов значения, а 01 - NAMC, вызов имени. Следующие шесть бит слога, соединенные со следующим слогом, обеспечивают пару адресов. Таким образом, VALC охватывает значения слогов от 0000 до 3FFF и NAMC 4000 до 7FFF.

VALC - еще один полиморфный оператор. Если он попадает в слово данных, это слово загружается в начало куча. Если он попадает в IRW, за ним следует, возможно, в цепочке IRW, пока не будет найдено слово данных. Если PCW найден, то вводится функция для вычисления значения, и VALC не завершается, пока функция не вернется.

NAMC просто загружает адресную пару в верхнюю часть стека как IRW (с тегом, автоматически устанавливаемым в 1).

Статические ветви (BRUN, BRFL и BRTR) использовали два дополнительных слога смещения. Таким образом, арифметические операции занимали один слог, операции адресации (NAMC и VALC) занимали два, ветви три, а длинные литералы (LT48) пять. В результате код был намного плотнее (имел лучшую энтропию), чем в традиционной архитектуре RISC, в которой каждая операция занимает четыре байта. Лучшая плотность кода означает меньшее количество промахов в кэше инструкций и, следовательно, лучшую производительность при выполнении крупномасштабного кода.

В следующих пояснениях операторов помните, что A и B являются двумя верхними регистрами стека. Расширения двойной точности обеспечиваются регистрами X и Y; таким образом, два верхних операнда двойной точности задаются как AX и BY. (В основном AX и BY подразумеваются только A и B.)

B6x00 / 7x00 Адресная пара
Текущий LLЛексический уровень
биты
Индекс
биты
0-11312-0
2-313-1211-0
4-713-1110-0
8-1513-109-0
16-3113-98-0

Арифметические операторы

ДОБАВИТЬ
Добавьте два верхних операнда стека (B: = B + A или BY: = BY + AX, если двойная точность)
СУБТ
Вычесть (B - A)
MULT
Умножение с результатом с одинарной или двойной точностью
MULX
Расширенное умножение с принудительным результатом двойной точности
DIVD
Разделить с реальным результатом
IDIV
Разделить на целочисленный результат
RDIV
Вернуть остаток после деления
NTIA
Целочисленное усеченное
NTGR
Целочисленное округление
NTGD
Целочисленное округление с результатом двойной точности
ЧСН
Изменить знак
ПРИСОЕДИНИТЬСЯ
Соедините два одиночных игры, чтобы сформировать двойной
SPLT
Разделите дабл на два сингла
ICVD
Input convert destructive - преобразование числа BCD в двоичное (для COBOL)
ICVU
Обновление преобразования ввода - преобразование числа BCD в двоичное (для COBOL)
SNGL
Задано округление до одинарной точности
СНГТ
Установить усеченное значение одинарной точности
XTND
Установить двойную точность
PACD
Пакет разрушительный
PACU
Обновление пакета
USND
Распаковать подписанный деструктивный
УГНУ
Распаковать подписанное обновление
UABD
Распаковать абсолютное разрушительное
UABU
Распаковать, абсолютное обновление
SXSN
Установить внешний знак
РОФФ
Чтение и очистка триггера переполнения
RTFF
Чтение истинного / ложного триггера

Операторы сравнения

МЕНЬШЕ
B
GREQ
B> = A?
GRTR
B> A?
LSEQ
B <= A?
EQUL
B = A?
NEQL
Б <> А?
ОДНО И ТОЖЕ
Имеет ли B тот же битовый шаблон, что и A, включая тег

Логические операторы

ЗЕМЕЛЬНЫЕ УЧАСТКИ
Логическое побитовое и всех битов в операндах
LOR
Логическое побитовое или всех битов в операндах
LNOT
Логическое побитовое дополнение всех битов в операнде
LEQV
Логическая побитовая эквивалентность всех битов в операндах

Операторы филиалов и звонков

BRUN
Безусловный переход (смещение задается следующими слогами кода)
DBUN
Безусловный динамический переход (смещение указано в верхней части стека)
BRFL
Переходить, если последний результат ложен (смещение задается следующими слогами кода)
DBFL
Динамическая ветвь, если последний результат ложен (смещение указано в верхней части стека)
BRTR
Перейти, если последний результат верен (смещение задается следующими слогами кода)
DBTR
Динамическая ветвь, если последний результат верен (смещение указано в верхней части стека)
ВЫХОД
Выйти из текущей среды (завершить процесс)
STBR
Шаг и ветвление (используются в циклах; операнд должен быть SIW)
ENTR
Выполнить вызов процедуры, заданный тегом 7 PCW, в результате чего RCW будет в D [n] + 1
RETN
Вернитесь из текущей подпрограммы на место, указанное RCW в D [n] + 1, и удалите кадр стека.

Битовые и полевые операторы

BSET
Битовый набор (номер битов задается слогом после инструкции)
DBST
Динамический набор битов (номер битов определяется содержимым B)
BRST
Сброс бита (номер бита задается слогом после инструкции)
DBRS
Динамический сброс бита (номер бита определяется содержимым B)
ИЗОЛ
Выделение поля (поле указывается в слогах после инструкции)
DISO
Изоляция динамического поля (поле, указанное в верхней части слов стека)
FLTR
Перенос поля (поле приводится в слогах после инструкции)
DFTR
Передача динамического поля (поле указано в верхней части слов стека)
INSR
Вставка поля (поле указывается в слогах после инструкции)
DINS
Вставка динамического поля (поле указывается в верхней части слов стека)
CBON
Подсчитайте двоичные единицы в верхней части слова стека (A или AX)
SCLF
Масштаб слева
DSLF
Динамический масштаб слева
SCRT
Масштаб вправо
DSRT
Динамический масштаб справа
SCRS
Масштабировать правильно сохранить
DSRS
Динамическое масштабирование справа сохранить
SCRF
Масштаб вправо финал
DSRF
Динамический масштаб справа финал
SCRR
Масштаб прямо круглый
DSRR
Динамический масштаб справа

Литеральные операторы

LT48
Загрузить следующее кодовое слово на вершину стека
LT16
Установить верх стека на следующие 16 бит в потоке кода
LT8
Установить верх стека на следующий слог кода
НУЛЬ
Ярлык для LT48 0
ОДИН
Ярлык для LT48 1

Операторы дескриптора

INDX
Индекс создает указатель (дескриптор копирования) из базового (MOM) дескриптора
NXLN
Индекс и имя загрузки (в результате получается индексированный дескриптор)
NXLV
Индекс и значение загрузки (в результате получается значение данных)
EVAL
Оцените дескриптор (следуйте цепочке адресов, пока не будет найдено слово данных или другой дескриптор)

Операторы стека

ТОЛКАТЬ
Сдвинуть регистр стека вниз
DLET
Поднять верх стека
ОБМЕН
Обменять два верхних слова стека
RSUP
Повернуть стопку вверх (три верхних слова)
RSDN
Повернуть стопку вниз (три верхних слова)
ДУПЛ
Повторяющаяся вершина стопки
MKST
Отметить стек (создать новый кадр стека, в результате чего MSCW будет наверху,

- затем NAMC для загрузки PCW, затем параметры нажимаются по мере необходимости, затем ENTR)

ИМКС
Вставьте MSCW в регистр B.
VALC
Получить значение в стек, как описано выше
NAMC
Поместите пару адресов (адрес стека IRW) в стек, как описано выше.
STFF
Преобразуйте IRW, помещенный NAMC, в SIRW, который ссылается на данные в другом стеке.
МВСТ
Переместить в стек (переключение процесса выполняется только в одном месте MCP)

Операторы магазинов

STOD
Деструктивное хранение (если у целевого слова есть нечетный тег, вызовите прерывание защиты памяти,

- сохранить значение в регистре B в памяти, адресованной регистром A. - Удалить значение из стека.

STON
Сохранение без разрушения (То же, что и STOD, но значение не удаляется - удобно для выражений F: = G: = H: = J).
ОВРД
Перезапись деструктивна, STOD игнорирует бит только для чтения (только для использования в MCP)
ОВРН
Неразрушающая перезапись, STON игнорирует бит только для чтения (только для использования в MCP)

Операторы загрузки

НАГРУЗКА
Загрузите значение, указанное адресом (тег 5 или тег 1 слово) наверху стека.

- При необходимости следуйте адресной цепочке.

LODT
Загрузить прозрачно - загрузить слово, на которое ссылается адрес в верхней части стека

Операторы трансфера

Обычно они использовались для передачи строк до тех пор, пока в исходной строке не был обнаружен определенный символ. Все эти операторы защищены от переполнения буфера ограничениями в дескрипторах.

TWFD
Передача пока ложная, деструктивная (забыть указатель)
TWFU
Передача пока false, обновить (оставить указатель в конце передачи для дальнейших передач)
TWTD
Перенос пока верный, разрушительный
TWTU
Перенести пока правда, обновить
TWSD
Переводные слова, деструктивные
TWSU
Перенести слова, обновить
TWOD
Перенести слова, перезаписать разрушительные
ДВА
Перенести слова, перезаписать обновление
TRNS
Перевести - передать исходный буфер в место назначения, преобразовав символы, как указано в таблице перевода.
TLSD
Передача в то время как менее разрушительная
TLSU
Перенести пока меньше, обновить
ТГЭД
Передача в то время как больше или равно, деструктивно
ТГЭУ
Перенос, когда больше или равно, обновить
TGTD
Перенос пока великий, разрушительный
ТГТУ
Перенести пока больше, обновить
TLED
Перенос пока меньше или равно, деструктивен
TLEU
Перенести пока меньше или равно, обновить
TEQD
Передача пока равная, деструктивная
TEQU
Перенести при равенстве, обновить
TNED
Передача пока не равная, деструктивная
ТНЭУ
Перенос пока не равен, обновляем
ТУНД
Передача безусловная, разрушительная
ТУНУ
Безусловный перевод, обновление

Операторы сканирования

Они использовались для сканирования струны полезно в письменной форме компиляторы.Все эти операторы защищены от переполнение буфера ограничиваясь пределами дескрипторов.

SWFD
Сканирование пока ложное, разрушительное
SISO
Изолировать строку
SWTD
Сканируйте пока правда, разрушительно
SWTU
Сканировать пока правда, обновить
SLSD
Сканируйте меньше, деструктивно
SLSU
Сканируйте пока меньше, обновляйте
SGED
Сканируйте, пока больше или равно, деструктивно
СГЭУ
Сканировать, когда больше или равно, обновить
SGTD
Сканируйте, пока больше, разрушительно
SGTU
Сканируйте пока лучше, обновляйте
SLED
Сканируйте, пока меньше или равно, деструктивно
СЛЕУ
Сканируйте, пока меньше или равно, обновите
SEQD
Сканируйте, пока равны, деструктивно
SEQU
Сканируйте, пока равны, обновите
SNED
Сканирование, пока не равное, разрушительное
СНЭУ
Сканируйте пока не равны, обновите
CLSD
Меньше сравнивайте персонажей, деструктивно
CLSU
Меньше сравнивайте символы, обновляйте
CGED
Сравните символы больше или равные, разрушительные
CGEU
Сравните символы больше или равно, обновите
CGTD
Сравните характер большего, разрушительного
CGTU
Сравнить символ больше, обновить
CLED
Сравнение символов меньше или равно, разрушительно
CLEU
Сравнить символы меньше или равно, обновить
CEQD
Сравните характер равный, деструктивный
CEQU
Сравнить равные символы, обновить
CNED
Сравните символы, не равные, деструктивные
CNEU
Сравнить символы не равны, обновить

Система

SINT
Установить интервальный таймер
EEXI
Включить внешние прерывания
DEXI
Отключить внешние прерывания
SCNI
Сканировать в - инициировать чтение ввода-вывода, это изменилось на разных архитектурах
SCNO
Сканировать - инициировать запись ввода-вывода, это изменилось на разных архитектурах
STAG
Установить тег (не разрешено в процессах на уровне пользователя)
RTAG
Читать тег
IRWL
Аппаратный псевдооператор
SPRR
Установить регистр процессора (сильно зависит от реализации, используется только на более низких уровнях MCP)
RPRR
Чтение регистра процессора (сильно зависит от реализации, используется только на более низких уровнях MCP)
MPCW
Сделать PCW
HALT
Остановить процессор (запросил оператор или возникла неисправимая проблема)

Другой

ВАРИ
Перейти к расширенному (переменные инструкции, которые были менее частыми)
OCRX
Индекс происходит, строит индексное слово, используемое в циклах
LLLU
Поиск в связанном списке - следуйте цепочке связанных слов, пока не будет выполнено определенное условие
SRCH
Маскированный поиск равных - Аналогичен LLLU, но проверяется маска в исследуемых словах на равное значение.
TEED
Таблица вводить редактировать деструктивная
TEEU
Таблица введите редактировать, обновить
EXSD
Выполнить одиночный микродеструктивный
EXSU
Выполнить одно микрообновление
EXPU
Выполнять обновление одного микро, одного указателя
NOOP
Нет операции
NVLD
Неверный оператор (шестнадцатеричный код FF)
Операторы пользователя
неназначенные операторы могут вызывать прерывания в операционной системе, чтобы можно было написать алгоритмы для обеспечения необходимой функциональности

Редактировать операторы

Это были специальные операторы для сложных операций со строками, особенно для бизнес-приложений.

МИН
Перемещение со вставкой - вставка символов в строку
MFLT
Перемещение с поплавком
SFSC
Перейти вперед исходный символ
SRSC
Пропустить символы обратного источника
RSTF
Сбросить поплавок
ENDF
Конечный поплавок
МВНУ
Переместить числовой безусловный
MCHR
Переместить персонажей
INOP
Вставить перфорацию
INSG
Вставить знак
SFDC
Переход к следующему символу назначения
SRDC
Пропустить символы обратного назначения
INSU
Вставить безусловный
INSC
Вставить условное
КОНЕЦ
Конец править

Примечания

  1. ^ Лексический уровень в слоге может относиться либо к отмеченной точке в стеке текущей задачи, либо к отмеченной точке в стеке родительской задачи. Период, термин стек может относиться к нескольким связанным стекам, вместе известным как стек сагуаро.

Рекомендации

  1. ^ Берроуза (сентябрь 1969 г.), Справочное руководство по системе обработки информации Burroughs B6500 (PDF), 1043676