Red de conocimiento informático - Material del sitio web - Cómo utilizar la programación mixta en lenguaje ensamblador y C en un sistema Linux de 64 bits Página 4

Cómo utilizar la programación mixta en lenguaje ensamblador y C en un sistema Linux de 64 bits Página 4

(1) El número de parámetros es inferior a 7:

f (a, b, c, d, e, f)

a-); gt; rdi, b-gt; rsi, c-gt; rdx, d-gt; rcx, e-gt; r8, f-gt;

a-gt;rdi, b-gt;rsi

Curiosamente, la declaración que realmente coloca los parámetros en el registro procesa la tabla de parámetros de derecha a izquierda, lo cual es diferente de la versión de 32 bits. versión.Consistente.

CÓDIGO

2) Cuando el número de parámetros es mayor que 7

H(a, b, c, d, e, f). , g) ;

a-gt; rdi, b-gt; rsi, c-gt; rdx, d-gt; ; 8( esp)

f-gt; (esp)

llamar H

Registros volátiles:

rax, rcx, rdx , rsi , rdi, r8, r9 son registros volátiles y el destinatario no necesita restaurar sus valores.

Obviamente, la mayoría de los registros que aparecen aquí se utilizan para la transferencia de parámetros y no importa si se cambia el valor. Si bien rax y rdx se usan a menudo para cálculos numéricos, rcx se usa a menudo para contar bucles y sus valores cambian con frecuencia. Otros registros no son volátiles, a saber, rbp, rbx, rsp, r10~r15. Si los valores se cambian en el módulo de ensamblaje, deben cambiarse al salir del módulo.

se restaura.

Lección:

Al escribir módulos en ensamblador y luego integrarlos con c, debes comprender el comportamiento del compilador, especialmente la forma de pasar parámetros. Más preocupado ahora. Sí, ¿qué debo hacer si quiero trasplantar el programa al entorno WIN/VC en el futuro? En el pasado, solo usaba gcc de cygwin para procesar el módulo de ensamblaje y vc para procesar el módulo c. Se necesitan cambios. La pregunta ahora es: si VC usa un método de paso de parámetros diferente, ¿tendré problemas?