10
votes

Comment les interruptions fonctionnent-elles sur l'Intel 8080?

Comment les interruptions fonctionnent-elles sur l'Intel 8080? J'ai cherché Google et dans la documentation officielle de Intel (197x), et j'ai trouvé seulement une petite description à ce sujet. J'ai besoin d'une explication détaillée à ce sujet, à imiter cette CPU.


0 commentaires

5 Réponses :


0
votes

Les pointeurs de fonction sur les mancheurs d'interruption sont stockés dans la mémoire basse. Certaines 32 ou donc des premières adresses sont des interruptions matérielles: Matériel déclenché.

La prochaine adresse 32 ou plus est déclenchable par l'utilisateur, ce sont appelés interruptions logicielles. Ils sont déclenchés par une instruction int .

Le paramètre sur INT est l'interruption logicielle numéro de vecteur , qui sera l'interruption appelée.

Vous devrez utiliser l'instruction iret pour revenir des interruptions.

Il est probable que vous devriez également désactiver l'interruption comme la première chose que vous faites lors d'une interruption.

Pour plus de détails, vous devez vous référer à la documentation de votre modèle de processeur spécifique, il a tendance à varier largement.


1 commentaires

Cela décrit le 8086, pas le 8080.



1
votes

Le 8080 dépendait du matériel externe pour contrôler sa manipulation d'interruptions, il est donc impossible de généraliser. Recherchez des informations sur les contrôleurs d'interruption Intel 8214 ou 8259.


0 commentaires

0
votes

Une interruption est un moyen d'interrompre la CPU avec une notification pour gérer autre chose, je ne suis pas certain de la puce Intel 8080, mais de mon expérience, la meilleure façon de décrire une interruption est la suivante:

Le CS: IP CODE> (SEGMENT DE CODE: Pointeur d'instructions) est sur cette instruction à l'adresse de la mémoire 0x0000: 0020, comme exemple pour l'intention de l'expliquer à l'aide des instructions Intel 8086, l'assembleur est gibberish et n'a pas de sens réel ... Les instructions sont imaginatives em> p> xxx pré>

lorsque le CS: IP pointe sur la ligne suivante et un int code> ERRUPT 15 hexadecimal est émis, c'est ce qui se passe, la CPU pousse les registres et les indicateurs sur la pile, puis exécutez le code à 0x1000: 0100, qui dessert l'int 15 comme exemple p> xxx pré>

Puis, lorsque le CS: IP frappe sur l'instruction 0x1000: 014b, un iret code> (retour d'interruption), qui éclate tous les registres et restaurer l'état, est émis et quand il est exécuté le processeur CS: Points IP Retour à Ici, après l'instruction à 0x0000: 0021. p> xxx pré>

Comment le processeur sait où passer à un décalage particulier est basé sur la table des vecteurs d'interruption, cette table d'interruption vectorielle est définie. Par le BIOS à un endroit particulier du BIOS, il ressemblerait à ceci: p>

INT    BIOS's LOCATION OF INSTRUCTION POINTER
---    --------------------------------------
0      0x3000
1      0x2000
..      ....
15     0x1000    <--- THIS IS HOW THE CPU KNOWS WHERE TO JUMP TO


2 commentaires

Belle explication! Merci.


Ceci est pour le 8086, pas le 080



1
votes

Je le trouve enfin!

Je crée une variable appelée autocar où passe d'interruption opcode. Ensuite, j'ai appelé une fonction pour gérer l'interruption: xxx

int est vrai quand il faut une interruption. Les instructions EI et di Manipulent l'inte.

Lorsque INT et INTE est une véritable interruption est exécuté.


2 commentaires

Si c'est une variable "où l'opcode va", pourquoi ne pas l'appeler "opcode"?


OPCODE est utilisé comme type de données, de toute façon, comme je le vois, l'opcode d'interruption passe au bus externe de 8080, alors je pense que c'était OK. Merci à tous!



20
votes

Le 8080 a une ligne d'interruption (broche 14). Tous les périphériques sont câblés à cette goupille, généralement dans une configuration de «fil-ou» (signification des sorties de requête d'interruption sont un collecteur ouvert et la goupille d'interruption est tirée avec une résistance). En interne, le processeur a un bit d'activation d'interruption. Deux instructions, EI et DI, définir et effacer ce bit. L'ensemble du système d'interruption est ainsi activé ou éteint, les interruptions individuelles ne peuvent pas être masquées sur le "Bare" 8080. Lorsqu'un périphérique émet une interruption, le processeur répond avec un signal "interrompre reconnaissance" (~ INTA). Ce signal a le même synchronisation que le signal "Lire la mémoire" (~ Memr) (~ Memr) et il est destiné à déclencher le périphérique de manière à placer une instruction "redémarrer" sur le bus de données. Le signal d'accusé de réception d'interruption est fondamentalement un cycle d'extraction d'instructions, il ne se produit que en réponse à une interruption.

Il y a huit instructions de redémarrage, RST 0 - RST 7. RST 7 est opcode "0xFF". Les instructions de redémarrage provoquent le processeur de pousser le compteur de programme sur la pile et commencent à exécuter l'exécution d'un vecteur de redémarrage. RST 0 vecteurs à 0x0000, RST 1 vecteurs à 0x0008, RST 2 vecteurs à 0x0010 et ainsi de suite. Redémarrez 7 vecteurs à 0x0038. Ces adresses de vecteur sont destinées à contenir du code exécutable, généralement une instruction de saut à une routine de service d'interruption. La routine de service d'interruption empilera tous les registres qu'il utilise, effectuera les fonctions d'E / S nécessaires, instachant tous les registres et revenir au programme principal via la même instruction de retour qui gère les sous-programmes (RET, OPCODE 0XC9).

Les instructions de redémarrage sont des opcodes réelles, ce qui signifie qu'ils feront la même chose si elles sont extraites de la mémoire lors de l'exécution du programme. Il était pratique d'utiliser le redémarrage 7 comme un "redémarrage chaud" pour un programme de moniteur de clavier / débogueur, car les EPROM précoces contenaient généralement 0XFF dans chaque emplacement vide. Si vous exécutez une EPROM vierge, cela signifiait que quelque chose avait disparu et que vous vouliez probablement retourner sur le moniteur de toute façon.

Notez que RST 0 vecteurs à la même emplacement de la mémoire que la réinitialisation, les deux commencent à exécuter à 0x0000. Mais RST 0 laisse une adresse de retour sur la pile. D'une certaine manière, la réinitialisation peut être considérée comme la seule interruption non masquable que le 8080 avait.

Un signal d'interruption effacera également le bit d'interruption afin qu'une routine de service d'interruption devra exécuter une instruction EI, généralement immédiatement avant le RET. Sinon, le système répondra à un seul et unique événement d'interruption.

CP / M Réservé les 256 premiers octets de mémoire pour l'utilisation du système - et cette carte de vecteur d'interruption utilise les 64 premiers octets (8 octets par instruction de redémarrage). Sur les systèmes CP / M, la RAM a démarré à 0x0000 et toute ROM a vécu à la fin de la mémoire. Ces systèmes utilisaient une forme de commutation bancaire intelligente pour basculer dans une EPROM ou quelque chose immédiatement après une réinitialisation pour fournir une instruction de saut à la ROM système afin de commencer la séquence de démarrage. Systèmes qui avaient la ROM à la fin de la carte mémoire Mémoire programmée Instructions de saut aux vecteurs situées dans la RAM dans les 64 premiers octets. Ces systèmes ont dû initialiser ces vecteurs de RAM au démarrage.


0 commentaires