Changes between Version 145 and Version 146 of Archi-1-TP9


Ignore:
Timestamp:
Nov 21, 2021, 8:46:29 AM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v145 v146  
    179179{{{#!protected ------------------------------------------------------------------------------------
    180180''
    181 La réponse n'est pas dans le cours, mais dans la connaissance du codage des instructions de saut (**`j`**ump et **`b`**ranch). Il faut avoir compris que l'instruction **`j`** et toutes les branchements (**`bne`**, **`beq`**, etc.) sont relatives au PC. Il n'est pas possible d'aller n'importe où dans l'espace d'adressage.
    182 * `j label` malgré sa forme assembleur effectue un saut relativement au **`PC`** puisque le **`label`** n'est pas entièrement encodé dans l'instruction binaire (cf. cours sur les sauts). Cette instruction réalise :\\**`PC ← (PC & 0xF0000000) | (ZeroExtended(label, 32) << 2)`**\\Les 4 bits de poids forts du **`PC`** sont conservés, le saut est bien relatif au PC\\(`ZeroExtended` désigne ici le fait d'étendre le label sur 32 bits en ajoutant des zéros en tête).\\ Autrement dit, si **`j label`** est à l'adresse **`PC`**, l'adresse **`label`** doit avoir le même chiffre de poids fort (en hexa décimal), c'est-à-dire les mêmes 4 bits de poids fort en binaire). Sinon l'assembleur provoque une erreur lors du codage.
    183 * A l'inverse, **`jr $r`** effectue un saut absolu puisque cette instruction réalise **`PC ← $r`**
    184 
    185 Autrement dit, si l’on veut aller exécuter du code n'importe où en mémoire, il faut utiliser **`jr`**.
     181La réponse n'est pas dans le cours, mais dans la connaissance du codage des instructions de saut (`j`ump et `b`ranch). Il faut avoir compris que l'instruction `j` et toutes les branchements (`bne`, `beq`, etc.) sont relatives au PC. Il n'est pas possible d'aller n'importe où dans l'espace d'adressage.
     182* `j label` malgré sa forme assembleur effectue un saut relativement au `PC` puisque le `label` n'est pas entièrement encodé dans l'instruction binaire (cf. cours sur les sauts). Cette instruction réalise :\\`PC ← (PC & 0xF0000000) | (ZeroExtended(label, 32) << 2)`\\Les 4 bits de poids forts du `PC` sont conservés, le saut est bien relatif au PC\\(`ZeroExtended` désigne ici le fait d'étendre le label sur 32 bits en ajoutant des zéros en tête).\\ Autrement dit, si `j label` est à l'adresse `PC`, l'adresse `label` doit avoir le même chiffre de poids fort (en hexa décimal), c'est-à-dire les mêmes 4 bits de poids fort en binaire). Sinon l'assembleur provoque une erreur lors du codage.
     183* A l'inverse, `jr $r` effectue un saut absolu puisque cette instruction réalise `PC ← $r`
     184
     185Autrement dit, si l’on veut aller exécuter du code n'importe où en mémoire, il faut utiliser `jr`.
    186186''
    187187}}}