Entorno MacOS-sistema operativo de escritura a mano-aplicación de desarrollo de lenguaje 45-C

Desarrollo de aplicaciones en lenguaje C.

1. Introducción

Me salté algunas secciones antes: una trata sobre un contenido bastante detallado y la otra trata sobre el enlace al artículo original del profesor que está roto.

No soy muy bueno tomando notas, así que lo omití. Se corrigieron algunos errores y se agregaron algunas características.

No es tan importante, así que lo ignoraré.

Después de que nuestro sistema operativo agregue un mecanismo de exportación de interfaz del kernel

Ya listo para ejecutar aplicaciones como plataforma.

Pero una deficiencia del desarrollo actual de aplicaciones es que

Solo podemos usar lenguaje ensamblador para desarrollar aplicaciones, es demasiado agotador desarrollar programas en lenguaje ensamblador.

Sería genial si se pudiera utilizar el lenguaje C.

Por ejemplo, cuando queremos desarrollar una aplicación que genere un carácter en la consola

Sería bueno si el código pudiera escribirse así en lenguaje C (app.c):

void api_putchar(int c);

void main() {
    
    
    api_putchar('C');
    return;
}

Si el código anterior se puede compilar en un archivo binario y el sistema puede cargarlo y ejecutarlo

Entonces desarrollar aplicaciones en nuestros sistemas operativos no tiene por qué ser tan doloroso como solía ser

Lo que haremos en esta sección será estudiar cómo utilizar el lenguaje C para desarrollar aplicaciones que se ejecuten en nuestro sistema.

2.Código

De hecho, los pasos que utilizamos para desarrollar el kernel en lenguaje C se pueden transferir al desarrollo de aplicaciones.

La lógica básica que realmente seguimos al desarrollar el kernel es esta

Utilice ensamblador para desarrollar la interfaz subyacente y luego use el lenguaje C para llamar a la interfaz exportada desde el lenguaje ensamblador para implementar la lógica empresarial.

Luego compila el código C en un archivo binario.

Luego use la herramienta objconv para descompilar el lenguaje C en lenguaje ensamblador.

El siguiente paso es combinar el código original desarrollado en ensamblador con el código ensamblador descompilado en uno solo.

Finalmente, se utiliza un compilador ensamblador para compilar el código ensamblador integrado en un archivo ejecutable binario unificado.

Usamos lenguaje C para desarrollar aplicaciones y seguimos la lógica anterior.

Primero exportamos la interfaz API del kernel en lenguaje ensamblador.

Utilice el lenguaje C para llamar a la interfaz exportada por lenguaje ensamblador para completar la escritura de la lógica empresarial.

Luego compila el código del lenguaje C en binario y usa objconv para desmontarlo.

Finalmente, los dos códigos en lenguaje ensamblador se combinan en uno y se compilan en un archivo binario ejecutable.

Basado en los pasos lógicos anteriores

El primer paso que debemos hacer es exportar api_putcharla interfaz para llamadas a funciones en lenguaje ensamblador.

El código de implementación es el siguiente.api_call.asm

[SECTION .s32]
BITS 32
call main
retf

api_putchar:
  mov edx, 1
  mov al, [esp + 4]
  int 02Dh
  ret

%include "app.asm"

Veamos primero la parte api_putchar.

Mencionamos anteriormente que todas las API en el kernel corresponden a un número, y el número de API que genera un carácter en la consola es 1.

Cuando desee llamar a la API correspondiente, simplemente ingrese el número correspondiente en el registro edx.

Al mismo tiempo, envíe los parámetros al registro especificado y finalmente llame a la interrupción 2D.

al frente del código

Primero ejecutamos la instrucción call main.

En otras palabras, la función principal se llama directamente, lo que significa que al desarrollar un programa en lenguaje C, la función de entrada principal debe ser principal.

Todos los códigos de programa desarrollados en lenguaje C se compilan en archivos binarios y luego se desmontan en ensamblador.

El archivo del programa desensamblado es app.asm

Integre el código de app.asm en api_call.asm mediante la directiva de inclusión

Finalmente, use el compilador ensamblador nasm para compilar api_call.asm. El archivo binario resultante es una aplicación desarrollada en lenguaje C.

3. Compile y ejecute

Después de compilar y ejecutar (tenga en cuenta que el archivo MAKE se actualiza)

despues de correr

Cambie el foco e ingrese hlt para ejecutar el programa

Se imprimieron los siguientes resultados.

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/w776341482/article/details/128676915
Recomendado
Clasificación