Article de reference

Petit ordinateur 3

Little Computer 3 , ou LC-3 , est un type de langage de programmation éducatif informatique , un langage d'assemblage , qui est un type de langage de programmation de bas niveau...

Little Computer 3 , ou LC-3 , est un type de langage de programmation éducatif informatique , un langage d'assemblage , qui est un type de langage de programmation de bas niveau .

Il possède un jeu d'instructions relativement simple, mais permet d'écrire des programmes assembleur d'une complexité moyenne et constitue une cible viable pour un compilateur C. Ce langage est moins complexe que l'assembleur x86, mais présente de nombreuses caractéristiques similaires à celles de langages plus complexes. Ces caractéristiques le rendent utile pour l'initiation à la programmation ; il est donc fréquemment utilisé pour enseigner les fondamentaux de la programmation et de l'architecture des ordinateurs aux étudiants en informatique et en génie informatique .

Le LC-3 a été développé par Yale N. Patt à l' Université du Texas à Austin et Université de l'Illinois à Urbana-Champaign . La spécification du jeu d'instructions, l'architecture générale du LC-3 et une implémentation matérielle sont décrites dans la deuxième édition de leur ouvrage de référence. Des cours basés sur le LC-3 et le livre de Patt et Patel sont proposés dans de nombreux départements d'informatique et de génie informatique.

Spécifications architecturales

Le LC-3 spécifie une taille de mot de 16 bits pour ses registres et utilise une mémoire adressable sur 16 bits avec un espace d'adressage de 2<sup> 16 </sup> emplacements. Le fichier de registres contient huit registres, numérotés de R0 à R7. Tous les registres sont d'usage général, c'est-à-dire qu'ils peuvent être librement utilisés par toute instruction capable d'écrire dans le fichier de registres. Cependant, dans certains contextes (comme la traduction de code C en assembleur LC-3), certains registres sont utilisés à des fins spécifiques.

Les instructions sont codées sur 16 bits et leurs codes d'opération sur 4 bits . Le jeu d'instructions définit des instructions pour quinze des seize codes d'opération possibles, certaines instructions possédant plusieurs modes de fonctionnement. L'exécution de chaque instruction est gérée par une machine à états finis implémentée avec une ROM de contrôle et une unité de microséquençage.

L'architecture prend en charge l'utilisation d'un clavier et d'un moniteur pour la gestion des entrées/sorties ; cette prise en charge est assurée par des abstractions d'E/S mappées en mémoire . En simulation, ces registres sont directement accessibles et leur contenu est décrit dans la spécification architecturale. La prise en charge des E/S de plus haut niveau est également assurée par l'instruction TRAP et un système d'exploitation de base . Ce dernier fournit des fonctions permettant de lire et d'afficher des caractères saisis au clavier, d'imprimer des caractères individuels sur le moniteur, d'imprimer des chaînes de caractères complètes (sous forme compactée et non compactée) et d'arrêter la machine.

Toutes les données du LC-3 sont supposées être stockées en complément à deux ; l’arithmétique non signée n’est pas prise en charge. Les périphériques d’entrée/sortie fonctionnent avec des caractères ASCII . Le LC-3 ne prend pas en charge nativement les nombres à virgule flottante .

L'implémentation matérielle présentée dans le texte de Patt et Patel n'est ni pipelinée ni optimisée d'une autre manière, mais il est certainement possible de créer une implémentation rapide en utilisant des concepts plus avancés en architecture informatique.

Jeu d'instructions

Le jeu d'instructions LC-3 implémente quinze types d'instructions, un seizième étant réservé pour un usage ultérieur. Son architecture est de type chargement-stockage ; les valeurs en mémoire doivent être chargées dans le fichier de registres avant de pouvoir être utilisées.

Les instructions arithmétiques disponibles comprennent l'addition (ADD), le ET bit à bit et la négation bit à bit (NOT). Les deux premières peuvent utiliser aussi bien des registres que des valeurs immédiates étendues au signe comme opérandes. Ces opérations suffisent pour implémenter plusieurs opérations arithmétiques de base, notamment la soustraction (en inversant le signe des valeurs) et le décalage à gauche bit à bit (en utilisant l'instruction d'addition pour multiplier les valeurs par deux). Le LC-3 peut également implémenter toute fonction logique bit à bit, car la négation et le ET forment ensemble une fonction logique complète .

L'accès à la mémoire peut être effectué en calculant des adresses à partir de la valeur actuelle du compteur de programme (PC) ou d'un registre du fichier de registres. De plus, le LC-3 permet des chargements et des stockages indirects, qui utilisent une donnée en mémoire comme adresse pour charger ou stocker des données. Les valeurs en mémoire doivent être chargées dans le fichier de registres avant de pouvoir être utilisées dans une opération arithmétique ou logique.

Le LC-3 fournit des instructions de contrôle de flux conditionnelles et inconditionnelles. Les branchements inconditionnels permettent de déplacer l'exécution vers une adresse spécifiée par la valeur d'un registre ou par un décalage relatif au compteur de programme (PC). Trois instructions (JSR, JSRR et TRAP) prennent en charge les appels de sous-programmes en stockant l'adresse du code appelant dans un registre avant de modifier la valeur du compteur de programme. Le LC-3 ne prend pas en charge la comparaison arithmétique directe de deux valeurs. Les branchements conditionnels sont basés sur le signe arithmétique (négatif, nul ou positif) de la dernière donnée écrite dans le fichier de registres. Calculer la différence entre deux valeurs de registres nécessite de trouver l'opposé de la première valeur, puis d'ajouter ce nombre à la valeur positive du second registre. La différence entre les deux registres est stockée dans l'un des huit registres accessibles à l'utilisateur. Le signe de cette valeur stockée est ensuite utilisé pour le branchement conditionnel.

Parce qu'il n'y a plus de place dans le jeu d'instructions LC-3 pour les instructions d'E/S mappées sur les ports dédiés , les implémentations matérielles réservent généralement une partie de la carte mémoire pour les E/S mappées en mémoire .

Prise en charge des langages de programmation

Bien qu'il n'ait pas été implémenté sur une puce physique, le LC-3 peut être utilisé en simulation sous Linux/Unix, macOS et Windows. Les outils de simulation comprennent un assembleur prenant en charge le calcul informatisé des décalages avec étiquettes et l'insertion de constantes, de chaînes de caractères et d'emplacements mémoire vides dans un bloc de code assembleur. Une convention permet également d'utiliser le langage C sur le LC-3. Un exemple d'assembleur, de compilateur et de simulateur est fourni par McGraw-Hill.

C et le LC-3

La convention d'appel des fonctions C sur le LC-3 est similaire à celle implémentée par d'autres systèmes, tels que l'ISA x86. Lors de l'exécution de programmes C, l'architecture maintient un modèle de mémoire incluant un espace pour la pile d'appels et l'allocation dynamique de mémoire . Dans ce modèle, quatre des huit registres généraux du processeur ont des rôles spécifiques : R4 sert de registre de base pour le chargement et le stockage des données globales, R5 pointe vers la zone de la fonction courante dans la pile d'appels, et R6 est utilisé comme pointeur de pile. De plus, R7 est généralement réservé au stockage des adresses de retour des appels de fonction ; les instructions JSR, JSRR et TRAP stockent automatiquement les adresses de retour dans ce registre lors de leur exécution.

Lorsqu'une fonction C est appelée selon ce modèle, ses paramètres sont empilés de droite à gauche. Un espace est ensuite réservé sur la pile pour la valeur de retour de la fonction appelée, l'adresse de l'instruction du programme appelant à laquelle retourner, et la valeur de R5 du programme appelant. Les variables locales de la fonction appelée sont empilées dans l'ordre de leur déclaration. Notez que le LC-3 ne possède pas d'instructions PUSH et POP natives ; il est donc nécessaire d'utiliser séparément les instructions d'addition et d'écriture pour implémenter la pile.

Le LC-3b

L' ISA LC-3b décrit une version modifiée de l'ISA LC-3 qui inclut les modifications suivantes :

  • La taille des mots de la machine reste de 16 bits, mais sa mémoire est désormais adressable par octet avec le même espace d'adressage.
  • Les instructions LD et ST (chargement et stockage de données à l'aide d'un adressage relatif au compteur ordinal) ont été supprimées.
  • Les instructions LDI et STI (chargements et stockages indirects) utilisent un adressage basé sur les registres au lieu d'un adressage relatif au PC.
  • Deux instructions, LDB et STB, ont été ajoutées pour manipuler des octets individuels de mémoire ; les autres instructions de chargement et de stockage continuent d'agir sur des mots entiers.
  • L'opcode réservé a été converti en une instruction de décalage, SHF, qui prend en charge les décalages arithmétiques et logiques de taille arbitraire dans les deux sens.

Ces modifications rendent le matériel du LC-3b légèrement plus complexe que celui du LC-3. Par exemple, le LC-3b nécessite un décalage (absent du LC-3) et une logique supplémentaire dans son unité de mémoire pour gérer correctement le chargement et le stockage de données de tailles variables.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index