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`**. |
| 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`. |