Vous êtes sur la page 1sur 19

Adressage par registre Adressage immdiat

ASM Cortex-M3 : Cours #3 Adressages par registre, et immdiats


Pascal Acco

2010

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Plan

Adressage par registre

Adressage immdiat

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage par registre

Adressage immdiat

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage par registre : GPR

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

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage par registre : exemple de ORRS

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

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage par registre : dcalages

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

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage par registre : exercice

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

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage par registre

Adressage immdiat

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : syntaxe

@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

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : syntaxe


@ge immdiat : ajouter R3 , la valeur 65 dcimal : ADDS R3,#65 hxa : ADDS R3,#0x41 binaire : ADDS R3,#2_1000001 ASCII : ADDS R3,#A label : ADDS R3,#LettreA ; o LettreA vaut 65 calcul de littral : ADDS R3,#((10x6)+2_1) ; calcul effectu par lassembleur Attention Linstruction porte sur lensemble du registre... mme si 65 tient sur 1 octet...

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : codage #imm8 (16 bits)

Attention Ma donne immdiate ne peut dpasser 255


Pascal Acco ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : codage #imm12 (32 bits)

imm12 = [0 : 001 : 0100 0001] = 0x41 Attention ADDS R3,#0X2C415 lassembleur va minsulter !

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : #imm12 possibles


Formats #imm12 possibles valeurs qui tiennent sur un seul octet valeurs sur un octet dcal de la forme :

Exemple 0x41, 0x410041, 0x41004100, 0x41414141 sont de ce format 0X2C415 ne lest pas
Pascal Acco ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : #imm12 possibles suite


Formats #imm12 possibles suite octet dcal de la forme :

Attention 0X2C415 nest daucun de ces formats Une donnes 32bits quelconque ne peut ltre

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : #imm12 possibles suite


Formats #imm12 possibles suite octet dcal de la forme :

Attention 0X2C415 nest daucun de ces formats Une donne 32bits quelconque ne peut ltre

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : LDR Rn, =imm32


Faire une addition avec , par exemple, 0x2C415


LDR R0 ,=0 x2C415 ADDS R3 , R3 , R0

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

Adressage par registre Adressage immdiat

Adressage immdiat : litteral pool

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

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : litteral pool accs indirect

Pascal Acco

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats

Adressage par registre Adressage immdiat

Adressage immdiat : litteral pool expliquations

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

ASM Cortex-M3 : Cours #3Adressages par registre, et immdiats