Fermer2
GodzilLe 08/09/2009 à 14:32
Hum je n'ai pas le code d'origine, mais quand meme :

  a4ac:	e3a02010 	mov	r2, #16	; 0x10
    a4b0:	e1a01002 	mov	r1, r2
    a4b4:	e5c31000 	strb	r1, [r3]
    a4b8:	e3e03bea 	mvn	r3, #239616	; 0x3a800
    a4bc:	e2433f71 	sub	r3, r3, #452	; 0x1c4
    a4c0:	e2433003 	sub	r3, r3, #3	; 0x3
    a4c4:	e3a02008 	mov	r2, #8	; 0x8
    a4c8:	e08b1003 	add	r1, fp, r3
    a4cc:	e241300c 	sub	r3, r1, #12	; 0xc


Moi je le trouve vraiment tres fort ce petit GCC sur l'allocation des registres...

pour ceux qui parlent pas l'ARM:
- on commence par mettre 16 dans le registre R2
- on met R2 dans R1
- on stoque r1 dans l'adresse mémoire pointé par r3
- on fait quelques mumuse avec r3
- on met 8 dans r2
etc...


Hum autre exemple sympa un poil plus bas:

    a584:	eaffffff 	b	a588 <Function+0x110>
    a588:	e91ba800 	ldmdb	fp, {fp, sp, pc}


en gros, saute a l'instruction juste après trigic Pour les non ARM-iste, b est l'équivalent d'un jmp du 68k, en gros saute a l'adresse, sans rien modifier de tes registres pile & co)