Asamblea en línea: Pasar punteros a una función y su uso en esa función en el ensamblaje
-
01-10-2019 - |
Pregunta
Estoy usando procesador ARM / Cortex-A8 plataforma.
tengo una función simple en el que tengo que pasar dos punteros a una función. Estos indicadores se utilizan más tarde en esa función que sólo tiene mi código ensamblador en línea Este plan es sólo para conseguir un rendimiento.
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);
}
Gracias
Solución
Si se asume que está utilizando una normal de ARM ABI, se pasará esos dos parámetros en R0
y R1
. Aquí está un ejemplo rápido que muestra cómo copiar los bytes de la memoria intermedia input
a la memoria intermedia output
(sintaxis 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow