[ARM] acces aux champs d'une pseudo structure

acces aux champs d'une pseudo structure [ARM] - ASM - Programmation

Marsh Posté le 10-01-2007 à 18:28:13    

Bonjour à tous
 
J'aimerais connaître un moyen d' accèder aux champs de cette structure :
 

Citation :


_fifo:
        dc32    fifo
 
fifo:         ; Donnees de la fifo
 ds32 1     ; Taille de la fifo
 ds32 1     ; Pointeur d'ecriture
 ds32 1     ; Pointeur de lecture
 ds32 1     ; Compteur d'insertion
 ds8  16    ; Tampon des donnees


 
Je voudrais par exemple placer le contenu du registre R1 pour fixer la taille de la fifo...etc
J'ai déjà essayé qqchose du genre : str r1,_fifo mais il y a une erreur générée par le fait que r1 et fifo ne sont pas de meme taille:

Citation :

Error[414]: Bad instruction alignment. ARM instructions must be 32-bit-aligned and Thumb instructions must be  16

 
Pouvez vous m'aider, s'il vous plait?
Merci
 
Ouar


---------------
La théorie c'est quand on connait tout et que rien ne marche.
Reply

Marsh Posté le 10-01-2007 à 18:28:13   

Reply

Marsh Posté le 18-09-2007 à 11:51:08    

Bonjour,
Ton erreur n'est aps une question de taille, mais un problème d'alignement mémoire (str est une instruction ARM 32 bits donc l'adresse doit être alignée en mots de 4 bytes).
Après de tête il me semble que str ne peut aps être utilisé que sur un registre comme adresse.
 
teste un truc du genre:

Citation :


ldr  r0,=_fifo ;met l'adresse de ton tableau dans le registe r0
str  r1,[r0]    ;store contenu de r1 à l'adresse r0


mais là attention, il faut que ton adresse soit multiple de 4.
Si ce n'est pas le cas, il faut le faire byte par byte avec une bidouille du genre
 

Citation :


ldr  r0,=_fifo ;met l'adresse de ton tableau dans le registe r0
strb  r1,[r0]
mov  r1,r1,lsr,#8  
strb  r1,[r0,#1]  
mov  r1,r1,lsr,#8    
strb  r1,[r0,#2]    
mov  r1,r1,lsr,#8  
strb  r1,[r0,#3]      


 
J'espère que ça pourra t'aider  
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed