El conjunto de instrucciones Burroughs B6x00-7x00 incluye el conjunto de operaciones válidas para los sistemas grandes Burroughs B6500, [1] B7500 y posteriores de Burroughs , incluidos los sistemas Unisys Clearpath / MCP actuales (a partir de 2006) ; no incluye las instrucciones para otros sistemas grandes de Burroughs, incluidos B5000, B5500, B5700 y B8500. Estas máquinas únicas tienen un diseño y un conjunto de instrucciones distintivos. Cada palabra de datos está asociada con un tipo y el efecto de una operación en esa palabra puede depender del tipo. Además, las máquinas se apilan [a] hasta el punto de que no tienen registros direccionables por el usuario.
Como cabría esperar de la descripción de las estructuras de datos en tiempo de ejecución utilizadas en estos sistemas, también tienen un interesante conjunto de instrucciones . Los programas se componen de sílabas de 8 bits , que pueden ser Name Call, Value Call o formar un operador, que pueden tener una longitud de una a doce sílabas. Hay menos de 200 operadores , todos los cuales encajan en sílabas de 8 bits. Muchos de estos operadores son polimórficos según el tipo de datos sobre los que se actúa según lo indicado por la etiqueta. Si ignoramos los poderosos operadores de escaneo, transferencia y edición de cadenas, el conjunto básico es de solo 120 operadores. Si eliminamos los operadores reservados para el sistema operativo, como MVST y HALT, el conjunto de operadores comúnmente utilizados por los programas de nivel de usuario es inferior a 100. Las sílabas Name Call y Value Call contienen parejas de direcciones ; las sílabas del operador no usan direcciones o usan palabras de control y descriptores en la pila.
Dado que no hay registros direccionables por el programador, la mayoría de las operaciones de manipulación de registros requeridas en otras arquitecturas no son necesarias, ni variantes para realizar operaciones entre pares de registros , ya que todas las operaciones se aplican a la parte superior de la pila . Esto también hace que los archivos de código sean muy compactos, ya que los operadores son de dirección cero y no necesitan incluir la dirección de registros o ubicaciones de memoria en el flujo de código.
Por ejemplo, el conjunto de instrucciones tiene solo un operador ADD. Las arquitecturas típicas requieren múltiples operadores para cada tipo de datos, por ejemplo add.i, add.f, add.d, add.l para tipos de datos enteros, flotantes, dobles y largos. La arquitectura solo distingue números de precisión simple y doble: los enteros son solo reales con un exponente cero . Cuando uno o ambos operandos tienen una etiqueta de 2, se realiza una suma de precisión doble; de lo contrario, la etiqueta 0 indica precisión simple. Por tanto, la etiqueta en sí es equivalente a la extensión del operador .i, .f, .d y .l. Esto también significa que el código y los datos nunca pueden coincidir.
Dos operadores son importantes en el manejo de datos en pila: VALC y NAMC. Estos son operadores de dos bits, 00 es VALC, llamada de valor y 01 es NAMC, llamada de nombre. Los siguientes seis bits de la sílaba, concatenados con la siguiente sílaba, proporcionan el par de direcciones. Por tanto, VALC cubre los valores de las sílabas 0000 a 3FFF y NAMC 4000 a 7FFF.
VALC es otro operador polimórfico. Si llega a una palabra de datos, esa palabra se carga en la parte superior de la pila . Si llega a un IRW, se sigue, posiblemente en una cadena de IRW hasta que se encuentra una palabra de datos. Si se encuentra un PCW, entonces se ingresa una función para calcular el valor y el VALC no se completa hasta que la función regresa.
NAMC simplemente carga el par de direcciones en la parte superior de la pila como un IRW (con la etiqueta configurada automáticamente en 1).
Las ramas estáticas (BRUN, BRFL y BRTR) utilizaron dos sílabas adicionales de compensación. Así, las operaciones aritméticas ocuparon una sílaba, las operaciones de direccionamiento (NAMC y VALC) ocuparon dos, las ramas tres y los literales largos (LT48) cinco. Como resultado, el código era mucho más denso (tenía mejor entropía) que una arquitectura RISC convencional en la que cada operación ocupa cuatro bytes. Una mejor densidad de código significaba menos pérdidas de caché de instrucciones y, por tanto, un mejor rendimiento al ejecutar código a gran escala.
En las siguientes explicaciones del operador, recuerde que A y B son los dos registros de pila superiores. Los registros X e Y proporcionan extensiones de doble precisión; por tanto, los dos primeros operandos de doble precisión vienen dados por AX y BY. (En su mayoría, AX y BY están implícitos solo en A y B.)
LL actual | Bits de nivel léxico | Bits de índice |
---|---|---|
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 |
Operadores aritméticos
- AGREGAR
- Agregue los dos primeros operandos de la pila (B: = B + A o BY: = BY + AX si es de doble precisión)
- SUBT
- Restar (B - A)
- MULT
- Multiplica con resultado de precisión simple o doble
- MULX
- Multiplicación extendida con resultado de doble precisión forzada
- DIVD
- Dividir con resultado real
- IDIV
- Dividir con resultado entero
- RDIV
- Devolver el resto después de la división
- NTIA
- Integerize truncado
- NTGR
- Entero redondeado
- NTGD
- Entero redondeado con resultado de doble precisión
- CHSN
- Cambiar signo
- ENTRAR
- Únete a dos solteros para formar un doble
- SPLT
- Divide un doble para formar dos individuales
- ICVD
- Conversión de entrada destructiva: convierte el número BCD en binario (para COBOL)
- ICVU
- Actualización de conversión de entrada: convierte el número BCD en binario (para COBOL)
- SNGL
- Establecer en redondeado de precisión simple
- SNGT
- Establecer en precisión simple truncado
- XTND
- Configurado para doble precisión
- PACD
- Paquete destructivo
- PACU
- Actualización del paquete
- USND
- Desempaquetar destructivo firmado
- USNU
- Desempaquetar actualización firmada
- UABD
- Desembalaje absolutamente destructivo
- UABU
- Desembalaje, actualización absoluta
- SXSN
- Establecer señal externa
- ROFF
- Leer y borrar flip flop de desbordamiento
- RTFF
- Leer flip flop verdadero / falso
Operadores de comparación
Operadores logicos
- TIERRA
- Lógico bit a bit y de todos los bits en operandos
- LOR
- Lógico bit a bit o de todos los bits en operandos
- LNOT
- Complemento lógico bit a bit de todos los bits del operando
- LEQV
- Equivalencia lógica bit a bit de todos los bits en operandos
Operadores de sucursales y llamadas
- BRUN
- Rama incondicional (compensación dada por las siguientes sílabas de código)
- DBUN
- Rama dinámica incondicional (compensación dada en la parte superior de la pila)
- BRFL
- Bifurcar si el último resultado es falso (compensación dada por las siguientes sílabas de código)
- DBFL
- Rama dinámica si el último resultado es falso (compensación dada en la parte superior de la pila)
- BRTR
- Bifurcar si el último resultado es verdadero (compensación dada por las siguientes sílabas de código)
- DBTR
- Rama dinámica si el último resultado es verdadero (compensación dada en la parte superior de la pila)
- SALIDA
- Salir del entorno actual (finalizar el proceso)
- STBR
- Paso y rama (utilizado en bucles; el operando debe ser SIW)
- ENTR
- Ejecute una llamada a procedimiento como lo indica una etiqueta 7 PCW, lo que da como resultado un RCW en D [n] + 1
- REGRESAR
- Regrese de la rutina actual al lugar dado por RCW en D [n] + 1 y elimine el marco de la pila
Operadores de campo y de barrena
- BSET
- Conjunto de bits (número de bits dado por la sílaba siguiendo la instrucción)
- DBST
- Conjunto de bits dinámicos (número de bits dado por el contenido de B)
- BRST
- Reinicio de bit (número de bit dado por la sílaba siguiendo la instrucción)
- DBRS
- Reinicio dinámico de bits (número de bits dado por el contenido de B)
- ISOL
- Aislamiento de campo (campo dado en sílabas después de la instrucción)
- DISO
- Aislamiento de campo dinámico (campo dado en la parte superior de las palabras de la pila)
- FLTR
- Transferencia de campo (campo dado en sílabas después de la instrucción)
- DFTR
- Transferencia de campo dinámica (campo dado en la parte superior de las palabras de la pila)
- INSR
- Insertar campo (campo dado en sílabas después de la instrucción)
- DINS
- Insertar campo dinámico (campo dado en la parte superior de las palabras de la pila)
- CBON
- Cuente los binarios en la parte superior de la palabra de la pila (A o AX)
- SCLF
- Escala a la izquierda
- DSLF
- Escala dinámica a la izquierda
- SCRT
- Escala a la derecha
- DSRT
- Escala dinámica a la derecha
- SCRS
- Escala a la derecha guardar
- DSRS
- Escala dinámica de guardado correcto
- SCRF
- Escala final derecha
- DSRF
- Escala dinámica final derecha
- SCRR
- Escala redonda a la derecha
- DSRR
- Escala dinámica a la derecha
Operadores literales
- LT48
- Cargue la siguiente palabra de código en la parte superior de la pila
- LT16
- Establecer la parte superior de la pila a los siguientes 16 bits en el flujo de código
- LT8
- Establecer la parte superior de la pila a la siguiente sílaba de código
- CERO
- Acceso directo para LT48 0
- UNO
- Acceso directo para LT48 1
Operadores de descriptores
- INDX
- Índice crear un puntero (copiar descriptor) a partir de un descriptor base (MOM)
- NXLN
- Índice y nombre de la carga (lo que da como resultado un descriptor indexado)
- NXLV
- Índice y valor de carga (que da como resultado un valor de datos)
- EVAL
- Evalúe el descriptor (siga la cadena de direcciones hasta que se encuentre la palabra de datos u otro descriptor)
Operadores de pila
- EMPUJAR
- Empuje hacia abajo el registro de pila
- DLET
- Pop top of stack
- INTERCAMBIAR
- Intercambia las dos primeras palabras de la pila
- RSUP
- Rotar la pila (las tres primeras palabras)
- RSDN
- Rotar la pila hacia abajo (las tres primeras palabras)
- DUPL
- Parte superior de la pila duplicada
- MKST
- Marque la pila (construya un nuevo marco de pila que resulte en un MSCW en la parte superior,
- seguido de NAMC para cargar el PCW, luego el parámetro presiona según sea necesario, luego ENTR)
- IMKS
- Inserte un MSCW en el registro B.
- VALC
- Obtener un valor en la pila como se describe arriba
- NAMC
- Coloque un par de direcciones (dirección de pila IRW) en la pila como se describe arriba
- STFF
- Convierta un IRW colocado por NAMC en un SIRW que hace referencia a datos en otra pila.
- MVST
- Mover a la pila (el cambio de proceso solo se realiza en un lugar en el MCP)
Operadores de tienda
- STOD
- Almacenar destructivo (si la palabra de destino tiene una etiqueta extraña, lanzar una interrupción de protección de memoria,
- almacenar el valor en el registro B en la memoria dirigida por el registro A. - Eliminar el valor de la pila.
- STON
- Almacenar de forma no destructiva (Igual que STOD pero el valor no se elimina; útil para expresiones F: = G: = H: = J).
- OVRD
- Sobrescribir destructivo, STOD ignorando el bit de solo lectura (para usar solo en MCP)
- OVRN
- Sobrescribir no destructivo, STON ignorando el bit de solo lectura (para usar solo en MCP)
Operadores de carga
- CARGA
- Cargue el valor dado por la dirección (etiqueta 5 o etiqueta 1 palabra) en la parte superior de la pila.
- Siga una cadena de direcciones si es necesario.
- LODT
- Cargar transparente: cargue la palabra a la que hace referencia la dirección en la parte superior de la pila
Operadores de transferencia
Estos se usaban para transferencias de cadenas, por lo general, hasta que se detectaba un determinado carácter en la cadena de origen. Todos estos operadores están protegidos contra desbordamientos de búfer al estar limitados por los límites en los descriptores.
- TWFD
- Transferir mientras sea falso, destructivo (olvidar el puntero)
- TWFU
- Transferir mientras sea falso, actualizar (dejar el puntero al final de la transferencia para más transferencias)
- TWTD
- Transferir mientras es verdadero, destructivo
- TWTU
- Transferir mientras sea verdadero, actualizar
- TWSD
- Transferencia de palabras, destructiva
- TWSU
- Transferir palabras, actualizar
- DOS
- Transferir palabras, sobrescribir destructivo
- DOS
- Transferir palabras, sobrescribir actualización
- TRNS
- Traducir: transfiera un búfer de origen a un destino convirtiendo caracteres como se indica en una tabla de traducción.
- TLSD
- Transferir mientras menos, destructivo
- TLSU
- Transfiere mientras menos, actualiza
- TGED
- Transferir mientras sea mayor o igual, destructivo
- TGEU
- Transferir mientras sea mayor o igual, actualizar
- TGTD
- Transferir mientras más grande, destructivo
- TGTU
- Transferir mientras mayor, actualizar
- TLED
- Transferir mientras sea menor o igual, destructivo
- TLEU
- Transferir mientras sea menor o igual, actualizar
- TEQD
- Transferir mientras es igual, destructivo
- TEQU
- Transferir mientras es igual, actualizar
- TNED
- Transferir mientras no es igual, destructivo
- TNEU
- Transferir mientras no es igual, actualizar
- TUND
- Transferencia incondicional, destructiva
- TUNU
- Transferencia incondicional, actualización
Operadores de escaneo
Estos se utilizaron para escanear cadenas útiles para escribir compiladores . Todos estos operadores están protegidos contra desbordamientos de búfer al estar limitados por los límites en los descriptores.
- SWFD
- Escanear mientras es falso, destructivo
- SISO
- Aislar de cadena
- SWTD
- Escanee mientras es verdadero, destructivo
- SWTU
- Escanee mientras sea verdadero, actualice
- SLSD
- Escanea menos, destructivo
- SLSU
- Escanee mientras menos, actualice
- SGED
- Escanee mientras sea mayor o igual, destructivo
- SGEU
- Escanear mientras sea mayor o igual, actualizar
- SGTD
- Escanea mientras más grande, destructivo
- SGTU
- Escanee mientras sea más grande, actualice
- TRINEO
- Escanee mientras sea menor o igual, destructivo
- SLEU
- Escanee mientras sea menor o igual, actualice
- SEQD
- Escanee mientras es igual, destructivo
- SECU
- Escanee mientras está igual, actualice
- SNED
- Escanear mientras no es igual, destructivo
- SNEU
- Escanear mientras no es igual, actualizar
- CLSD
- Compara personajes menos, destructivo
- CLSU
- Compara menos personajes, actualiza
- CGED
- Comparar personajes mayores o iguales, destructivos
- CGEU
- Comparar caracteres mayores o iguales, actualizar
- CGTD
- Compare el carácter más grande, destructivo
- CGTU
- Compare el carácter más grande, actualice
- CLED
- Comparar personajes menores o iguales, destructivos
- CLEU
- Comparar caracteres menores o iguales, actualizar
- CEQD
- Comparar carácter igual, destructivo
- CEQU
- Comparar caracteres iguales, actualizar
- CNED
- Comparar personajes no iguales, destructivos
- CNEU
- Comparar caracteres no iguales, actualizar
Sistema
- SINT
- Establecer temporizador de intervalo
- EEXI
- Habilitar interrupciones externas
- DEXI
- Deshabilitar interrupciones externas
- SCNI
- Escanear: iniciar la lectura de E / S, esto cambió en diferentes arquitecturas
- SCNO
- Escanear: inicie la escritura de E / S, esto cambió en diferentes arquitecturas
- CIERVO
- Establecer etiqueta (no permitido en procesos a nivel de usuario)
- RTAG
- Leer etiqueta
- IRWL
- Pseudo operador de hardware
- SPRR
- Establecer el registro del procesador (depende en gran medida de la implementación, solo se usa en niveles inferiores de MCP)
- RPRR
- Leer el registro del procesador (depende en gran medida de la implementación, solo se usa en niveles inferiores de MCP)
- MPCW
- Hacer PCW
- DETENER
- Detenga el procesador (solicitado por el operador o ha ocurrido alguna condición irrecuperable)
Otro
- VARI
- Escape a extendido (instrucciones variables que fueron menos frecuentes)
- OCRX
- El índice de ocurre crea una palabra de índice de ocurre que se usa en bucles
- LLLU
- Búsqueda de listas vinculadas: siga una cadena de palabras vinculadas hasta que se cumpla una determinada condición
- SRCH
- Búsqueda enmascarada de igual: similar a LLLU, pero probando una máscara en las palabras examinadas para un valor igual
- CAMISETA
- Tabla entrar editar destructivo
- TEEU
- Tabla entrar editar, actualizar
- EXSD
- Ejecuta un solo micro destructivo
- EXSU
- Ejecutar una micro actualización única
- EXPU
- Ejecute la actualización de un solo micro, un solo puntero
- NOOP
- No operacion
- TANV
- Operador no válido (código hexadecimal FF)
- Operadores de usuario
- Los operadores no asignados podrían causar interrupciones en el sistema operativo para que los algoritmos puedan escribirse para proporcionar la funcionalidad requerida.
Editar operadores
Se trataba de operadores especiales para la manipulación sofisticada de cadenas, en particular para aplicaciones comerciales.
- MINOS
- Mover con insertar: insertar caracteres en una cadena
- MFLT
- Mover con flotador
- SFSC
- Saltar carácter fuente hacia adelante
- SRSC
- Omitir caracteres de origen inverso
- RSTF
- Restablecer flotador
- ENDF
- Flotador final
- MVNU
- Mover numérico incondicional
- MCHR
- Mover personajes
- INOP
- Insertar sobrepunzonado
- INSG
- Insertar signo
- SFDC
- Saltar carácter de destino hacia adelante
- SRDC
- Omitir caracteres de destino inverso
- INSU
- Insertar incondicional
- INSC
- Insertar condicional
- ENDE
- Finalizar editar
Notas
- ^ El nivel léxico en una sílaba puede referirse a un punto marcado en la pila de la tarea actual o a un punto marcado en la pila de una tarea principal. El término pila puede referirse a múltiples pilas relacionadas, conocidas colectivamente como pila saguaro .
Referencias
- ^ Burroughs (septiembre de 1969), Manual de referencia del sistema de procesamiento de información de Burroughs B6500 (PDF) , 1043676