Autres articles / Other articles

Les registres spéciaux en assembleur XTENSA

publication: 2 décembre 2022 / mis à jour 5 décembre 2022

Read this page in english

 

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

NameDescriptionSpecial
Register
Number
LBEGLoop-begin address0
LENDLoop-end address1
LCOUNTLoop count2
SARShift-amount register3
BRBoolean registers4
LITBASELiteral base5
SCOMPARE1Expected data value for S32C1I12
ACCLOAccumulator low bits16
ACCHIAccumulator high bits17
M0..M3 / MRMAC16 data registers / register file32..35
WindowBaseBase of current AR window72
WindowStartCall-window start bits73
PTEVADDRPage table virtual address83
MMIDMemory map ID89
RASIDRing ASID values90
ITLBCFGInstruction TLB configuration91
DTLBCFGData TLB configuration92
IBREAKENABLEInstruction break enable bits96
CACHEATTRCache attribute98
ATOMCTLAtomic Operation Control99
DDRDebug data register104
MEPCMemory error PC register106
MEPSMemory error PS register107
MESAVEMemory error save register108
MESRMemory error status register109
MECRMemory error check register110
MEVADDRMemory error virtual addr register111
IBREAKA0..1Instruction break address128-129
DBREAKA0..1Data break address144-145
DBREAKC0..1Data break control160-161
EPC1Level-1 exception PC177
EPC2..7High level exception PC178-183
DEPCDouble exception PC192
EPS2..7High level exception PS194-199
EXCSAVE1Level-1 exception save location209
EXCSAVE2..7High level exception save location210-215
CPENABLECoprocessor enable bits224
INTERRUPTInterrupt request bits226
INTSETSet requests in INTERRUPT226
INTCLEARClear requests in INTERRUPT227
INTENABLEInterrupt enable bits228
PSProcessor state230
VECBASEVector Base Relocatable231
EXCCAUSECause of last exception232
DEBUGCAUSECause of last debug exception233
CCOUNTCycle count234
PRIDProcessor Id235
ICOUNTInstruction count236
ICOUNTLEVELInstruction count level237
EXCVADDRException virtual address238
CCOMPARE0..2Cycle number to generate interrupt240-242
MISC0..3Misc register 0-3244-247

Legal: site web personnel sans commerce / personal site without seling