Jeu d'instructions Burroughs B6x00-7x00 - Burroughs B6x00-7x00 instruction set
Le jeu d'instructions Burroughs B6x00-7x00 comprend l'ensemble des opérations valides pour les grands systèmes Burroughs B6500, B7500 et versions ultérieures , y compris les systèmes Unisys Clearpath/MCP actuels (à partir de 2006) ; il n'inclut pas les instructions pour les autres grands systèmes Burroughs, notamment les B5000, B5500, B5700 et B8500. Ces machines uniques ont un design et un jeu d'instructions distinctifs. Chaque mot de données est associé à un type, et l'effet d'une opération sur ce mot peut dépendre du type. De plus, les machines sont basées sur une pile au point qu'elles n'avaient pas de registres adressables par l'utilisateur.
Aperçu
Comme on peut s'y attendre de l'architecture unique utilisée dans ces systèmes, ils ont également un jeu d'instructions intéressant . Les programmes sont composés de syllabes de 8 bits , qui peuvent être Appel de nom, Appel de valeur ou former un opérateur, qui peut avoir une longueur de une à douze syllabes. Il y a moins de 200 opérateurs , qui s'intègrent tous dans des syllabes de 8 bits. Si nous ignorons les puissants opérateurs de balayage, de transfert et d'édition de chaînes, l'ensemble de base n'est que d'environ 120 opérateurs. Si l'on supprime les opérateurs réservés au système d'exploitation tels que MVST et HALT, l'ensemble des opérateurs couramment utilisés par les programmes de niveau utilisateur est inférieur à 100. Les syllabes Name Call et Value Call contiennent des couples d'adresses ; les syllabes de l'opérateur n'utilisent aucune adresse ou utilisent des mots de contrôle et des descripteurs sur la pile.
Puisqu'il n'y a pas de registres adressables par le programmeur, la plupart des opérations de manipulation de registre requises dans d'autres architectures ne sont pas nécessaires, pas plus que des variantes pour effectuer des opérations entre des paires de registres , puisque toutes les opérations sont appliquées au sommet de la pile . Cela rend également les fichiers de code très compacts, car les opérateurs ont une adresse zéro et n'ont pas besoin d'inclure l'adresse des registres ou des emplacements mémoire dans le flux de code. Une partie de la densité du code était due au déplacement d'informations vitales sur les opérandes ailleurs, vers des « balises » sur chaque mot de données ou dans des tables de pointeurs. De nombreux opérateurs sont génériques ou polymorphes en fonction du type de données sur lesquelles agit la balise. Les opcodes génériques nécessitaient moins de bits d'opcode mais rendaient le matériel plus semblable à un interpréteur, avec moins d'opportunités de pipeliner les cas courants.
Par exemple, le jeu d'instructions n'a qu'un seul opérateur ADD. Il a dû récupérer l'opérande pour découvrir s'il s'agissait d'un ajout d'entier ou d'un ajout à virgule flottante. Les architectures typiques nécessitent plusieurs opérateurs pour chaque type de données, par exemple add.i, add.f, add.d, add.l pour les types de données entier, flottant, double et long. L'architecture ne distingue que les nombres à simple et double précision - les entiers ne sont que des réels avec un exposant nul . Lorsqu'un ou les deux opérandes ont une balise de 2, un ajout en double précision est effectué, sinon la balise 0 indique une simple précision. Ainsi, la balise elle-même est l'équivalent de l'extension d'opérateur .i, .f, .d et .l. Cela signifie également que le code et les données ne peuvent jamais être incompatibles.
Deux opérateurs sont importants dans le traitement des données sur la pile - VALC et NAMC. Ce sont des opérateurs à deux bits, 00 étant VALC, appel de valeur, et 01 étant NAMC, appel de nom. Les six bits suivants de la syllabe, concaténés avec la syllabe suivante, fournissent le couple d'adresses. Ainsi VALC couvre les valeurs syllabiques 0000 à 3FFF et NAMC 4000 à 7FFF.
VALC est un autre opérateur polymorphe. S'il atteint un mot de données, ce mot est chargé en haut de la pile . S'il atteint un IRW, celui-ci est suivi, éventuellement dans une chaîne d'IRW jusqu'à ce qu'un mot de données soit trouvé. Si un PCW est trouvé, une fonction est entrée pour calculer la valeur et le VALC ne se termine pas tant que la fonction ne revient pas.
Le NAMC charge simplement le couple d'adresses en haut de la pile en tant qu'IRW (avec la balise automatiquement définie sur 1).
Les branches statiques (BRUN, BRFL et BRTR) utilisaient deux syllabes supplémentaires de décalage. Ainsi, les opérations arithmétiques occupaient une syllabe, les opérations d'adressage (NAMC et VALC) en occupaient deux, les branches trois et les longs littéraux (LT48) cinq. En conséquence, le code était beaucoup plus dense (avait une meilleure entropie) qu'une architecture RISC conventionnelle dans laquelle chaque opération occupe quatre octets. Une meilleure densité de code signifiait moins d'échecs dans le cache d'instructions et donc de meilleures performances pour l'exécution de code à grande échelle.
Dans les explications d'opérateur suivantes, rappelez-vous que A et B sont les deux premiers registres de pile. Les extensions en double précision sont fournies par les registres X et Y ; ainsi les deux premiers opérandes en double précision sont donnés par AX et BY. (La plupart du temps, AX et BY sont implicites uniquement par A et B.)
LL actuel | Bits de niveau lexical |
Bits d' indexation |
---|---|---|
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 |
Opérateurs arithmétiques
- AJOUTER
- Ajouter les deux premiers opérandes de la pile (B := B + A ou BY := BY + AX si double précision)
- SUBT
- Soustraire (B - A)
- MULT
- Multiplier avec un résultat simple ou double précision
- MULX
- Multiplication étendue avec résultat forcé en double précision
- DIVD
- Diviser avec un résultat réel
- IDIV
- Diviser avec un résultat entier
- RDIV
- Renvoyer le reste après division
- NTIA
- Entier tronqué
- NTGR
- Intégrer arrondi
- NTGD
- Intégrer arrondi avec résultat double précision
- CHSN
- Changer de signe
- REJOINDRE
- Joindre deux célibataires pour former un double
- SPLT
- Diviser un double pour former deux simples
- ICVD
- Conversion d'entrée destructrice - convertit le nombre BCD en binaire (pour COBOL)
- ICVU
- Mise à jour de conversion d'entrée - convertit le numéro BCD en binaire (pour COBOL)
- SNGL
- Réglé sur simple précision arrondi
- SNGT
- Réglé sur simple précision tronqué
- XTND
- Réglé en double précision
- PACD
- Pack destructeur
- PACU
- Mise à jour des packs
- USND
- Déballer signé destructif
- USNU
- Décompresser la mise à jour signée
- UABD
- Déballez la destruction absolue
- UABU
- Déballez, mise à jour absolue
- SXSN
- Définir le signe externe
- ROFF
- Lire et effacer la bascule de débordement
- RTFF
- Lire la bascule vrai/faux
Opérateurs de comparaison
- MOINS
- Est-ce que B < A ?
- GREQ
- Est-ce que B >= A ?
- RGTR
- Est-ce que B > A ?
- LSEQ
- Est-ce que B <= A ?
- ÉGAL
- Est-ce que B = A ?
- NEQL
- Est-ce que B <> A ?
- MÊME
- B a-t-il le même modèle de bits que A, y compris l'étiquette
Opérateurs logiques
- TERRE
- Logique au niveau du bit et de tous les bits dans les opérandes
- LOR
- Logique au niveau du bit ou de tous les bits dans les opérandes
- NON
- Complément logique au niveau du bit de tous les bits de l'opérande
- LEQV
- Équivalence logique au niveau du bit de tous les bits des opérandes
Opérateurs de succursales et d'appels
- BRUN
- Branchement inconditionnel (décalage donné par les syllabes de code suivantes)
- DBUN
- Branchement dynamique inconditionnel (offset donné en haut de la pile)
- BRFL
- Branchement si dernier résultat faux (décalage donné par les syllabes de code suivantes)
- DBFL
- Branche dynamique si dernier résultat faux (offset donné en haut de la pile)
- BRTR
- Branche si dernier résultat vrai (décalage donné par les syllabes de code suivantes)
- DBTR
- Branche dynamique si dernier résultat vrai (décalage donné en haut de la pile)
- SORTIR
- Quitter l'environnement actuel (arrêter le processus)
- STBR
- Pas et branche (utilisés dans les boucles ; l'opérande doit être SIW)
- ENTRÉE
- Exécuter un appel de procédure tel que donné par une balise 7 PCW, résultant en un RCW à D[n] + 1
- RET
- Retour de la routine actuelle à la place donnée par RCW à D[n] + 1 et suppression du cadre de pile
Opérateurs de bits et de champs
- BSET
- Bit défini (numéro de bit donné par la syllabe qui suit l'instruction)
- DBST
- Jeu de bits dynamique (numéro de bit donné par le contenu de B)
- BRST
- Bit reset (numéro de bit donné par la syllabe suivante instruction)
- DBRS
- Remise à zéro dynamique des bits (numéro de bit donné par le contenu de B)
- ISOL
- Isolat de champ (champ donné en syllabes suivant les instructions)
- DISSO
- Isolat de champ dynamique (champ donné en haut des mots de la pile)
- FLTR
- Transfert de champ (champ donné en syllabes suivant instruction)
- DFTR
- Transfert de champ dynamique (champ donné en haut des mots de la pile)
- INSR
- Insertion de champ (champ donné en syllabes suivant l'instruction)
- DIN
- Insertion de champ dynamique (champ donné en haut des mots de la pile)
- CBON
- Compter les binaires en haut du mot de pile (A ou AX)
- SCLF
- Échelle à gauche
- DSLF
- Échelle dynamique à gauche
- SCRT
- Échelle à droite
- DSRT
- Échelle dynamique à droite
- SCRS
- Mettre à l'échelle à droite enregistrer
- DSRS
- Échelle dynamique à droite enregistrer
- SCRF
- Echelle finale à droite
- DSRF
- Echelle dynamique droite finale
- SCRR
- Échelle à droite
- DSRR
- Échelle dynamique à droite
Opérateurs littéraux
- LT48
- Charger le mot de code suivant en haut de la pile
- LT16
- Définir le haut de la pile sur les 16 bits suivants dans le flux de code
- LT8
- Définir le haut de la pile sur la syllabe de code suivante
- ZÉRO
- Raccourci pour LT48 0
- UNE
- Raccourci pour LT48 1
Opérateurs descripteurs
- INDX
- Index créer un pointeur (copier un descripteur) à partir d'un descripteur de base (MOM)
- NXLN
- Index et nom de charge (résultant en un descripteur indexé)
- NXLV
- Index et valeur de charge (résultant en une valeur de données)
- ÉVAL
- Évaluer le descripteur (suivre la chaîne d'adresses jusqu'à ce que le mot de données ou un autre descripteur soit trouvé)
Opérateurs de pile
- POUSSER
- Pousser le registre de pile vers le bas
- DLET
- Pop en haut de la pile
- ÉCHANGE
- Échangez les deux premiers mots de la pile
- RSUP
- Faire pivoter la pile vers le haut (trois premiers mots)
- RSDN
- Faire pivoter la pile vers le bas (trois premiers mots)
- DUPL
- Dupliquer le haut de la pile
- MKST
- Marquer la pile (construire un nouveau cadre de pile résultant en un MSCW sur le dessus,
- suivi de NAMC pour charger le PCW, puis de paramètres poussés au besoin, puis ENTR)
- IMKS
- Insérez un MSCW dans le registre B.
- VALC
- Récupérer une valeur sur la pile comme décrit ci-dessus
- NAMC
- Placez un couple d'adresses (adresse de pile IRW) sur la pile comme décrit ci-dessus
- STFF
- Convertissez un IRW tel qu'il est placé par NAMC en un SIRW qui référence les données dans une autre pile.
- MVST
- Déplacer vers la pile (la commutation de processus n'est effectuée qu'à un seul endroit dans le MCP)
Exploitants de magasins
- STOD
- Destructeur de stockage (si le mot cible a une balise impaire, lancez une interruption de protection de la mémoire,
— mémoriser la valeur dans le registre B dans la mémoire adressée par le registre A. — Supprimez la valeur de la pile.
- STON
- Stockage non destructif (Identique à STOD mais la valeur n'est pas supprimée - pratique pour les expressions F := G := H := J).
- OVRD
- Écrasement destructif, STOD ignorant le bit en lecture seule (pour une utilisation dans MCP uniquement)
- OVRN
- Écraser non destructif, STON ignorant le bit en lecture seule (pour une utilisation dans MCP uniquement)
Opérateurs de charge
L'instruction Load pourrait se retrouver à déclencher sur une adresse indirecte , ou pire, un appel déguisé à une routine thunk d' appel par nom .
- CHARGE
- Chargez la valeur donnée par l'adresse (tag 5 ou tag 1 mot) en haut de la pile.
— Suivez une chaîne d'adresses si nécessaire.
- LODT
- Charger transparent - charge le mot référencé par l'adresse en haut de la pile
Opérateurs de transfert
Ceux-ci étaient généralement utilisés pour les transferts de chaînes jusqu'à ce qu'un certain caractère soit détecté dans la chaîne source. Tous ces opérateurs sont protégés des débordements de buffer en étant limités par les bornes des descripteurs.
- TWFD
- Transfert alors que faux, destructeur (oublier le pointeur)
- TWFU
- Transfert alors que faux, mise à jour (laisser le pointeur à la fin du transfert pour d'autres transferts)
- TWTD
- Transfert tout en vrai, destructeur
- TUT
- Transférer si vrai, mettre à jour
- TWSD
- Mots de transfert, destructeurs
- TWSU
- Mots de transfert, mise à jour
- DEUX
- Transférer des mots, écraser destructif
- DEUX
- Transférer des mots, écraser la mise à jour
- TRNS
- Translate - transfère un tampon source dans une destination en convertissant les caractères comme indiqué dans une table de traduction.
- TLSD
- Transfert en moins, destructeur
- TLSU
- Transférez en moins, mettez à jour
- TGED
- Transfert tout supérieur ou égal, destructeur
- TGUE
- Transfert tout supérieur ou égal, mise à jour
- TGTD
- Transfert tout en étant plus grand, destructeur
- TGTU
- Transférer en plus grand, mettre à jour
- TLED
- Transfert tout inférieur ou égal, destructeur
- TLEU
- Transfert inférieur ou égal, mise à jour
- TEQD
- Transfert tout égal, destructeur
- TEQU
- Transfert à égalité, mise à jour
- TNED
- Transfert tout en n'étant pas égal, destructeur
- TNEU
- Transfert sans égalité, mise à jour
- TUND
- Transfert inconditionnel, destructeur
- TUNU
- Transfert inconditionnel, mise à jour
Opérateurs de numérisation
Ceux-ci ont été utilisés pour analyser les chaînes utiles dans l'écriture des compilateurs . Tous ces opérateurs sont protégés des débordements de buffer en étant limités par les bornes des descripteurs.
- SWFD
- Scan tout faux, destructeur
- SISO
- Isolat de chaîne
- SWTD
- Scan tout vrai, destructeur
- SWTU
- Analyser si vrai, mettre à jour
- SLSD
- Scannez en moins, destructeur
- SLSU
- Scannez en moins, mettez à jour
- SGED
- Scan tout en étant supérieur ou égal, destructeur
- SGEU
- Analyser tout en étant supérieur ou égal, mettre à jour
- SGTD
- Scan tout en étant plus grand, destructeur
- SGTU
- Scannez plus longtemps, mettez à jour
- TRAÎNEAU
- Numérisez tout en étant inférieur ou égal, destructeur
- SLEU
- Scannez tout inférieur ou égal, mettez à jour
- SEQD
- Scan tout égal, destructeur
- SEQU
- Scan à égalité, mise à jour
- SNED
- Scannez sans être égal, destructeur
- SNEU
- Analyser tout en étant différent, mettre à jour
- CLSD
- Comparer les personnages moins, destructeur
- CLSU
- Comparez moins les caractères, mettez à jour
- CGED
- Comparer des caractères supérieurs ou égaux, destructeurs
- CGEU
- Comparer des caractères supérieurs ou égaux, mettre à jour
- CGTD
- Comparer le caractère plus grand, destructeur
- CGTU
- Comparer le caractère supérieur, mettre à jour
- CLED
- Comparer des caractères inférieurs ou égaux, destructeurs
- CLEU
- Comparer les caractères inférieurs ou égaux, mettre à jour
- CEQD
- Comparer le caractère égal, destructeur
- CEQU
- Comparer le caractère égal, mettre à jour
- CNED
- Comparer des caractères différents, destructeurs
- CNEU
- Comparer des caractères différents, mettre à jour
Système
- SINT
- Régler la minuterie d'intervalle
- EEXI
- Activer les interruptions externes
- DEXI
- Désactiver les interruptions externes
- SCNI
- Scan in - initier la lecture IO, cela a changé sur différentes architectures
- SCNO
- Scan out - initier l'écriture IO, cela a changé sur différentes architectures
- CERF
- Définir la balise (non autorisé dans les processus au niveau de l'utilisateur)
- RTAG
- Lire la balise
- IRWL
- Pseudo opérateur matériel
- SPRR
- Définir le registre du processeur (très dépendant de la mise en œuvre, utilisé uniquement dans les niveaux inférieurs de MCP)
- RPRR
- Lire le registre du processeur (très dépendant de la mise en œuvre, utilisé uniquement dans les niveaux inférieurs de MCP)
- MPCW
- Faire PCW
- ARRÊT
- Arrêtez le processeur (l'opérateur a demandé ou une condition irrécupérable s'est produite)
Autre
- VARI
- Escape to étendu (instructions variables qui étaient moins fréquentes)
- OCRX
- L'index Occurs crée un mot d'index Occurs utilisé dans les boucles
- LLLU
- Recherche de liste liée - Suivez une chaîne de mots liés jusqu'à ce qu'une certaine condition soit remplie
- SRCH
- Recherche masquée d'égalité - Similaire à LLLU, mais testant un masque dans les mots examinés pour une valeur égale
- TEED
- Tableau entrer modifier destructif
- TEEU
- Tableau entrer éditer, mettre à jour
- EXSD
- Exécuter un seul micro-destructeur
- EXSU
- Exécuter une seule micro-mise à jour
- EXPU
- Exécuter la mise à jour d'un seul micro, pointeur unique
- NOOP
- Pas d'opération
- NVLD
- Opérateur non valide (code hexadécimal FF)
- Opérateurs utilisateurs
- les opérateurs non affectés pourraient provoquer des interruptions dans le système d'exploitation afin que des algorithmes puissent être écrits pour fournir la fonctionnalité requise
Modifier les opérateurs
Il s'agissait d'opérateurs spéciaux pour la manipulation sophistiquée des chaînes, en particulier pour les applications commerciales.
- MIN
- Déplacer avec insertion - insérer des caractères dans une chaîne
- MFLT
- Déplacer avec flotteur
- SFSC
- Avancer le caractère source
- SRSC
- Ignorer les caractères source inversés
- RSTF
- Réinitialiser le flotteur
- ENDF
- Flotteur d'extrémité
- MVNU
- Déplacer le numérique inconditionnel
- MCHR
- Déplacer des personnages
- INOP
- Insertion de surperforation
- INSG
- Insérer un signe
- SFDC
- Avancer le caractère de destination
- SRSA
- Ignorer les caractères de destination inversés
- INSU
- Insérer inconditionnel
- INSC
- Insérer conditionnel
- FIN
- Terminer la modification