Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Как и следовало ожидать из описания структур данных времени выполнения, используемых в этих системах, они также имеют интересный набор инструкций . Программы состоят из 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.)

Арифметические операторы [ править ]

ДОБАВИТЬ
Добавьте два верхних операнда стека (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 <A?
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
Сканируйте, пока меньше или равно, деструктивно
SLEU
Сканируйте, пока меньше или равно, обновите
SEQD
Сканируйте, пока равны, деструктивно
SEQU
Сканируйте, пока равны, обновите
SNED
Сканируйте, пока не равны, деструктивно
СНЭУ
Сканируйте пока не равны, обновите
CLSD
Меньше сравнивайте персонажей, деструктивно
CLSU
Меньше сравнивайте символы, обновляйте
CGED
Сравните символы, большие или равные, разрушительные
CGEU
Сравнить символы больше или равно, обновить
CGTD
Сравните характер большего, разрушительного
CGTU
Сравнить символ больше, обновить
CLED
Сравнение символов меньше или равно, деструктивно
CLEU
Сравнить символы меньше или равно, обновить
CEQD
Сравните характер равный, деструктивный
CEQU
Сравнить равные символы, обновить
CNED
Сравнить символы не равны, деструктивны
CNEU
Сравнить символы не равны, обновить

Система [ править ]

СИНТ
Установить интервальный таймер
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. Burroughs (сентябрь 1969 г.), Справочное руководство по системе обработки информации Burroughs B6500 (PDF) , 1043676