7
votes

Différence entre le retour de l'interruption (RTI) et le retour du sous-programme (RTS)

J'aimerais savoir quelle est la différence entre le retour de l'interruption (RTI) et le retour du sous-programme (RTS). Sont les deux identiques ou il y a une différence entre ces deux?


0 commentaires

7 Réponses :


1
votes

Le fait qu'un processeur gère une interruption est marqué dans un ou plusieurs drapeaux dans le registre d'état d'une CPU.

Ceci est nécessaire, par exemple masquer d'autres interruptions potentielles.

Pour dire au processeur qui interrompt la manipulation est terminée et que le drapeau peut être réinitialisé, l'instruction RTI est utilisée à la place de Just RTS.

Bien sûr, les détails dépendent de la CPU particulière.


3 commentaires

Je voudrais ajouter que dans de nombreuses architectures, des informations supplémentaires sont poussées sur la pile et le cadre de pile a donc une mise en page légèrement différente dans la routine d'interruption.


Ce n'est pas "marqué" comme vous l'appelez. S'il s'agit d'une interruption matérielle, le bit d'interruption sera défini sur désactivé. Cependant, cela peut être causé par le traitement "normal", il n'y a donc pas d'indicateur fiable d'une interruption en cours.


@OLOF FORSHELL: Semble que vous réfléchissez à une architecture particulière. Étant donné que Amit n'a pas fait référence à une architecture particulière, je viens de décrire le comportement général qui est courant ou similaire à toutes les architectures que je connais. Bien sûr, il y a plus de détails, comme je l'ai mentionné.



1
votes

Eh bien, les interruptions sont stockées dans un segment de code différent, de sorte que RTI sont appelés à un appel lointain, tandis que les sous-programmes généralement sont dans le même segment de code comme programme principal, ils sont donc appelés avec un proche appel. La différence est que les appels lointains poussent le segment et le décalage comme adresse de retour, tandis que les appels ne poussent que le décalage.


0 commentaires

4
votes

Le retour habituellement de l'interruption restaure les drapeaux afin que le code interrompu puisse continuer à exécuter correctement. Le retour du sous-programme n'a pas besoin de faire cette instruction est utilisé intentionnellement dans ce flux de code et connu que les drapeaux sont ou ne sont pas détruits en fonction de l'architecture. Dans les architectures qui utilisent une pile pour l'adresse de retour, il est très apparent. Un retour de l'interruption apparaîtra les drapeaux alors l'adresse de retour où un retour du sous-programme ne sauvera que l'adresse de retour.


3 commentaires

Merci pour votre réponse @dwelch ..... le drapeau qui revient de l'interruption pop out est lié à quoi ???


@Amit: Les drapeaux (contenu du mot d'état du processeur) apparaissent à RTI sont ceux qui ont été poussés au début de l'interruption par le processeur. Ceci n'est cependant pas automatiquement au cas pour toutes les archrétures: une bonne architecture Z80 ou 8051 ne pousse pas la PSW aux interruptions. Dans ces cas, le code du gestionnaire ITERRUPT doit s'en occuper.


@Amit @Curd C'est pourquoi j'ai commencé avec le mot habituellement, j'aurais dû être un peu moins subtile. Vous n'avez pas spécifié d'architecture, je devais donc être un peu général. Les architectures qui n'ont pas de différence entre le retour de l'interruption et le retour du sous-programme n'ont souvent pas d'instructions séparées. Quand ils le font, c'est généralement quelque chose comme faire apparaître le mot d'état ou pour changer un état de protection du processeur interne ou quelque chose comme ça.



3
votes

Lorsqu'une interruption matérielle se produit sur un X86, les drapeaux et le segment de code de retour + sont poussés sur la pile. Ensuite, les interruptions sont désactivées. Il s'agit de définir la scène de la routine d'interruption pour entretenir l'interruption: les piles de commutation ou tout ce qu'elle veut faire avant de réactiver les interruptions et le traitement d'un peu plus avant / ou de revenir de l'interruption. L'instruction IRET apparaît les drapeaux précédemment enregistrés (y compris le drapeau d'interruption qui a été activé à l'origine) et l'emplacement de retour afin que la routine interrompue puisse continuer à traiter non plus le plus sage.


0 commentaires

1
votes

RET va simplement faire sauter les deux octets sur PC (Addr bas et Addr High) Reti réinitialisera l'interruption Activer Flipflop et deux octets seront apparus à partir de la pile


0 commentaires

0
votes
RET:  pop ip ; its "brother" is *near* CALL - to the same segment 

RETF: pop ip ; *far* CALL - there's return path of segment and offset on the 
      pop cs ;  stack 

IRET: pop ip ; INT - this instruction PUSHes *three* registers on stack: 
      pop cs ; IP, CS, and FLags 
      pop fl ; well, in fact as for the stack operation INT is similiar 
             ; to far CALL but with the FL put on the stack 

1 commentaires

La question était à propos de RTI et de RTS, ils sont destinés à des architectures autres que X86. Ret / IRET est x86 / x86-64



0
votes

RTE ou RTI prend un contexte minimal de haut de la pile, tandis que RTS prend l'adresse de retour (de la pile)


0 commentaires