2010
Pascal Acco
Plan
Adressage immdiat
Pascal Acco
Adressage immdiat
Pascal Acco
Une oprande peut tre un registre GPR General Purpose Register R0-R12 Le Cortex possde 13 registres dit usage gnral (GPR) : R0 R12 R13 : pointeur de pile (SP) R14 : registre de lien (LR), @ de retour R15 : pointeur ordinal (PC), @ prochaine instruction Ce sont tous des registres 32 bits non scindables
Pascal Acco
Un des codages possible de ORRS est donc : ORRS<c>.W <Rd>,<Rn>,<Rm> ,<shift> <c> indique un conditionnement possible .W indique que lon force le codage sur 32 bits. <Rdnm> 3 @ge par registre Rm, Rn, Rd (m,n,d non forcment distincts) <shift> indique un dcalage logique sur Rm = pseudo oprande oprateur optionnel
Pascal Acco
Les dcalages <shift> LSL #n : Dcalage logique gauche de n bits LSR #n : Dcalage logique droite de n bits ASR #n : Dcalage arithmtique droite de n bits ROR #n : Rotation droite de n bits RRX : Rotation dun bit droite via le fanion C Exercice Que fait ADD R1,R1,R1, LSL #3 ?
Pascal Acco
Rponse R1 <- R1 + (R1 << 3) soit R1 <- R1 + 8*R1 soit toto += toto*8 en langage C (int toto) Optimisation Utiliser les dcalages de loprande source pour conomiser une instruction Utiliser un dcalage binaire pour * ou /
Pascal Acco
Adressage immdiat
Pascal Acco
@ge immdiat : #lit sapplique uniquement une oprande source Principe : on donne directement le nombre Syntaxe : oprande prx par un # suivi dun littral ou dun label Loprande est code et stocke avec linstruction
Pascal Acco
Pascal Acco
imm12 = [0 : 001 : 0100 0001] = 0x41 Attention ADDS R3,#0X2C415 lassembleur va minsulter !
Pascal Acco
Exemple 0x41, 0x410041, 0x41004100, 0x41414141 sont de ce format 0X2C415 ne lest pas
Pascal Acco ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats
Attention 0X2C415 nest daucun de ces formats Une donnes 32bits quelconque ne peut ltre
Pascal Acco
Attention 0X2C415 nest daucun de ces formats Une donne 32bits quelconque ne peut ltre
Pascal Acco
LDR Rn,=imm32 : MACRO Instruction de chargement de registre Si imm32 acceptable pour un MOV alors LDR cod par MOV Rn,#imm12 Sinon adressage indirect vers un LITTERAL POOL Attention Le mnmonique LDR sert aussi des instructions (et pas MACRO) de chargement de registre par adressage indirect !
Pascal Acco ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats
LDR Rn,=imm32 en litteral pool La macro instruction LDR R0,=0x2C415 devient une instruction dadressage indirect par dcalage de forme LDR R0,[PC,#shift] soit R0 <- M[PC + shift]
Pascal Acco
Pascal Acco
La valeur 32 bit est stocke dans une zone mmoire de code Zone cr par lassembleur, gnralement la n dune SECTION CODE Le programmeur peut aussi les dnir avec LTORG Accs par lecture mmoire une adresse relative au pointeur dinstruction PC
Pascal Acco