Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Набор инструкций 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.)
Текущий LL | Биты лексического уровня | Индексные биты |
---|---|---|
0-1 | 13 | 12-0 |
2-3 | 13–12 | 11-0 |
4-7 | 13–11 | 10-0 |
8-15 | 13-10 | 9-0 |
16–31 | 13-9 | 8-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 <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
- Вставить условное
- КОНЕЦ
- Конец править
Заметки [ править ]
- ^ Лексический уровень в слоге может относиться либо к отмеченной точке в стеке текущей задачи, либо к отмеченной точке в стеке родительской задачи. Термин «стопка» может относиться к нескольким связанным стопкам, вместе известным как стопка сагуаро .
Ссылки [ править ]
- ↑ Burroughs (сентябрь 1969 г.), Справочное руководство по системе обработки информации Burroughs B6500 (PDF) , 1043676