¿Cómo llama el lenguaje ensamblador a los programas en lenguaje C?
1. Reglas básicas de paso de parámetros (ATPCS (ARM—Thumb Procedimiento Call Standard))
1. Paso de parámetros
2. de llamadas mutuas
1. El programa C llama al ensamblador
El diseño del ensamblador debe cumplir con ATPCS (ARM—Thumb Procedimiento Call Standard) para garantizar la correcta transferencia de parámetros cuando el programa se llama. Utilice la pseudooperación EXPORT en el ensamblador para declarar este programa para que otros programas puedan llamarlo. Utilice extern en un programa C para declarar el ensamblador.
El siguiente es un ejemplo de un programa en C que llama a un ensamblador. El ensamblador strcopy implementa la función de copia de cadena y el programa C llama a strcopy para completar la copia de cadena.
//Programa C
#include lt;stdio.hgt;
extern void strcopy(char *d, const char *s);
int main()
{
const char *srcstr=”Primera fuente de cadena”;
char dststr[ ]=”Segunda cadena -destino";
printf("Antes de copiar:\n");
printf("s\n s\n", srcstr, dststr);
strcopy(dststr, srcstr);
printf(“Después de copiar:\n”);
printf(“s\n s\n “, srcstr, dststr); p>
p>
while(1);
}
;Ensamblador
ÁREA Scopy, CODIFICACIÓN, SÓLO LECTURA
EXPORTAR copia de cadena
Copia de cadena
LDRB R2, [R1], #1
STRB R2, [R0], #1
CMPR2, # 0
BNE Strcopy
MOV PC, LR
END
2. p>
El diseño del programa ensamblador debe cumplir con ATPCS para asegurar la correcta transferencia de parámetros cuando se llama al programa. Utilice la pseudooperación IMPORT en el ensamblador para declarar el programa C que se llamará. El siguiente es un ejemplo de un ensamblador que llama a un programa en C. Los valores de cada parámetro se establecen en el ensamblador. Hay 6 parámetros en este ejemplo. El registro R0 se usa para almacenar el primer parámetro, R1 se usa para almacenar el segundo parámetro, R2 se usa para almacenar el tercer parámetro, R3 se usa para almacenar el cuarto parámetro y el quinto y el. El sexto parámetro se transmite utilizando la pila de datos. Dado que la pila de datos se utiliza para pasar parámetros, el puntero de la pila de datos debe ajustarse una vez completada la llamada del programa.
//El programa C g() devuelve la suma de 6 parámetros
int g(int a, int b, int c, int d, int e, int f) p> p>
{
printf(“e=d\n”, e);
printf(“f=d\n”, f); p>
return (a b c d e f);
}
; El programa ensamblador llama al programa C g() para calcular 6 enteros i, 2*i, 3*i, 4*i, 5*i, suma de 6*i
EXPORTAR f
ÁREA f, CÓDIGO, SÓLO LECTURA
IMPORTAR g
MOV R0, #1
AÑADIR R1, R0, R0
AÑADIR R2, R1, R0
AÑADIR R3, R2, R0
AÑADIR R4, R3, R0
AÑADIR R5, R4, R0
STR R4, [SP, #-4]!
STR R5, [ SP, #- 4]!
BL g
AÑADIR SP, SP, #4
AÑADIR SP, SP, #4
PARAR B PARAR
FIN