Red de conocimiento informático - Conocimiento sistemático - ¿Cómo llama el lenguaje ensamblador a los programas en lenguaje C?

¿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>

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>

{

printf(“e=d\n”, e);

printf(“f=d\n”, f);

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