2010-09-09 7 views
2

J'utilise la plate-forme ARM/Cortex-A8.Assemblage en ligne: Passage de pointeurs sur une fonction et utilisation de cette fonction dans l'ensemble

J'ai une fonction simple où je dois passer deux pointeurs à une fonction. Ces pointeurs sont ensuite utilisés dans cette fonction qui a seulement mon code d'assemblage en ligne. Ce plan est seulement pour atteindre la performance.

function(unsigned char *input, unsigned char *output) 
{ 
    // What are the assembly instructions to use these two pointers here? 
    // I will inline the assembly instructions here 
} 

main() 
{ 
    unsigned char input[1000], output[1000]; 

    function(input, output); 
} 

Merci

Répondre

4

En supposant que vous utilisez un ARM normale ABI, ces deux paramètres seront transmis dans R0 et R1. Voici un exemple rapide montrant comment copier les octets de la mémoire tampon input au tampon output (syntaxe gcc):

.text 
.globl _function 

_function: 
    mov r2, #0  // initialize loop counter 
loop: 
    ldrb r3, [r0, r2] // load r3 with input[r2] 
    strb r3, [r1, r2] // store r3 to output[r2] 
    add r2, r2, #1 // increment loop counter 
    cmp r2, #1000  // test loop counter 
    bne loop 
    mov pc, lr 
+0

Merci Carl, pouvez-vous me dire d'où avez-vous appris à écrire du code assembleur pour les processeurs ARM, tous les livres ou ressources que vous pouvez suggérer seront très utiles. – HaggarTheHorrible

+1

@vikramtheone, je travaille avec ARM depuis longtemps. J'ai appris l'assemblage en lisant du code désassemblé et en consultant les instructions du Manuel de référence de l'architecture ARM (disponible en HTML et PDF sur http://www.arm.com). –

+0

En aparté - j'aime recommander contre l'assemblage en ligne autant que possible. Ecrire une véritable routine d'assemblage dans un fichier d'assemblage réel - cela facilitera grandement la maintenance et le portage. –

Questions connexes