Les registres spéciaux en assembleur XTENSA
publication: 2 décembre 2022 / mis à jour 5 décembre 2022
Appel à collaboration
Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.
Partagez-les ici sur ce site.
ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.
Vos montages peuvent aider d'autres développeurs.
Les montages des autres développeurs peuvent vous aider.
Pour proposer un article ou un montage, cliquez ici
Préambule
Certaines instructions de l'assembleur XTENSA utilisent des registres spéciaux. Exemple de registre spécial SAR
:
forth
DEFINED? code invert [IF] xtensa-assembler [THEN]
vocabulary xtensa xtensa definitions
3 constant SAR \ SAR = Shift-amount register - Special Register Number 3
forth definitions
Le registre spécial SAR - Shift-amount register
La plage légale de valeurs pour SAR est de zéro à 32, et non de zéro à 31, donc SAR est défini sur six bits. L'utilisation de
SRC, SRA, SLL,
ou SRL,
lorsque SAR > 32 n'est pas défini.
Lecture et écriture dans un registre spécial
Pour lire et écrire une valeur dans un registre spécial, il faut utiliser les instructions RSR,
et WSR,
.
Exemple d'utilisation de ces instructions:
forth definitions asm xtensa 3 constant SAR \ SAR = Shift-amount register - Special Register Number 3 \ for macros, see: \ https://github.com/MPETREMANN11/ESP32forth/blob/main/assembler/xtensaMacros.txt code writeSAR ( n[0..31] -- ) a1 32 ENTRY, a8 arPOP, a8 SAR WSR, RETW.N, end-code code readSAR ( -- n ) a1 32 ENTRY, a8 SAR RSR, a8 arPUSH, RETW.N, end-code 2 writeSAR readSAR . \ display: 2 3 writeSAR readSAR . \ display: 3
Dans cet exemple, on écrit une valeur dans le registre SAR, puis on la lit immédiatement. Cet exemple montre que l'opération écriture/lecture fonctionne parfaitement.
Le registre spécial BR - Boolean Registers
Ce registre spécial récupère des flags booléens. Sa taille est de 16 bits. Chaque bit correspond à un registre booléen
qu'on peut définir comme tel dans le vocabulaire xtensa
:
vocabulary xtensa xtensa definitions \ definition of boolean registers 16 names b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 $04 constant BR \ BR = Boolean Register - Special Register Number 4 forth definitions
Certaines instructions accèdent à ces registres, par exemple ORB,
qui exécute un OU booléen
sur les registres bs et bt et écrit le résultat dans le registre br. Exemple:
b7 b8 b9 ORB,
Certaines instructions comme MOVF,
conditionnent leur action selon la valeur booléenne d'un registre
booléen. Ici, MOVF,
déplace le contenu du registre as vers le registre ar si le registre bt est faux:
b7 a7 a8 MOVF,
L'action inverse de MOVF,
est MOVT,
.
Le registre LITBASE - Literal base
The literal base (LITBASE) register contains 20 upper bits, which define the location of the literal base and one enable bit (En). When the enable bit is clear, the L32R instruction loads a literal at a negative offset from the PC. When the enable bit is set, the L32R instruction loads a literal at a negative offset from the address formed by the 20 upper bits of literal base and 12 lower bits of 12’h000.
Liste des registres spéciaux
Name | Description | Special Register Number |
---|---|---|
LBEG | Loop-begin address | 0 |
LEND | Loop-end address | 1 |
LCOUNT | Loop count | 2 |
SAR | Shift-amount register | 3 |
BR | Boolean registers | 4 |
LITBASE | Literal base | 5 |
SCOMPARE1 | Expected data value for S32C1I | 12 |
ACCLO | Accumulator low bits | 16 |
ACCHI | Accumulator high bits | 17 |
M0..M3 / MR | MAC16 data registers / register file | 32..35 |
WindowBase | Base of current AR window | 72 |
WindowStart | Call-window start bits | 73 |
PTEVADDR | Page table virtual address | 83 |
MMID | Memory map ID | 89 |
RASID | Ring ASID values | 90 |
ITLBCFG | Instruction TLB configuration | 91 |
DTLBCFG | Data TLB configuration | 92 |
IBREAKENABLE | Instruction break enable bits | 96 |
CACHEATTR | Cache attribute | 98 |
ATOMCTL | Atomic Operation Control | 99 |
DDR | Debug data register | 104 |
MEPC | Memory error PC register | 106 |
MEPS | Memory error PS register | 107 |
MESAVE | Memory error save register | 108 |
MESR | Memory error status register | 109 |
MECR | Memory error check register | 110 |
MEVADDR | Memory error virtual addr register | 111 |
IBREAKA0..1 | Instruction break address | 128-129 |
DBREAKA0..1 | Data break address | 144-145 |
DBREAKC0..1 | Data break control | 160-161 |
EPC1 | Level-1 exception PC | 177 |
EPC2..7 | High level exception PC | 178-183 |
DEPC | Double exception PC | 192 |
EPS2..7 | High level exception PS | 194-199 |
EXCSAVE1 | Level-1 exception save location | 209 |
EXCSAVE2..7 | High level exception save location | 210-215 |
CPENABLE | Coprocessor enable bits | 224 |
INTERRUPT | Interrupt request bits | 226 |
INTSET | Set requests in INTERRUPT | 226 |
INTCLEAR | Clear requests in INTERRUPT | 227 |
INTENABLE | Interrupt enable bits | 228 |
PS | Processor state | 230 |
VECBASE | Vector Base Relocatable | 231 |
EXCCAUSE | Cause of last exception | 232 |
DEBUGCAUSE | Cause of last debug exception | 233 |
CCOUNT | Cycle count | 234 |
PRID | Processor Id | 235 |
ICOUNT | Instruction count | 236 |
ICOUNTLEVEL | Instruction count level | 237 |
EXCVADDR | Exception virtual address | 238 |
CCOMPARE0..2 | Cycle number to generate interrupt | 240-242 |
MISC0..3 | Misc register 0-3 | 244-247 |
Legal: site web personnel sans commerce / personal site without seling