Inline-Montag: Passing Zeiger auf eine Funktion, und deren Verwendung in dieser Funktion in der Montage
-
01-10-2019 - |
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
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