Inline-Montag: Passing Zeiger auf eine Funktion, und deren Verwendung in dieser Funktion in der Montage

StackOverflow https://stackoverflow.com/questions/3678452

Frage

Ich bin mit ARM / Cortex-A8-Prozessor Plattform.

Ich habe eine einfache Funktion, wo ich zwei Zeiger auf eine Funktion übergeben müssen. Diese Zeiger werden später in dieser Funktion verwendet, die nur meinen Inline-Assembler-Code hat dieser Plan nur Leistung zu erreichen.

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);
}

Danke

War es hilfreich?

Lösung

Angenommen, Sie sind mit einem normalen ARM ABI, diese beiden Parameter werden in R0 und R1 weitergegeben werden. Hier ist ein kurzes Beispiel zeigt, wie der Bytes aus dem input Puffer zum output Puffer (gcc-Syntax) kopieren:

.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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top