Cómo crear tu propio sistema operativo desde cero
Paso 1: escribir un programa ensamblador (versión Linux)
En Linux, uso dos programas, as86 y ld86, para generar código. (Estoy tomando como ejemplo la distribución Ubuntu de Linux).
as86 es bastante simple para nuestra tarea, por lo que es adecuado para nosotros.
Otra razón puede ser que en 1990, Linus, el fundador del sistema Linux y considerado un dios, usó as86 para escribir el código de inicio de Linux.
En cualquier caso, todos los sistemas tipo UNIX en PC tienen este ensamblador, y suele estar en el paquete de software bin86.
Para instalar el paquete de software bin86 en Ubuntu, solo necesita ingresar el comando sudo apt-get install bin86 en la terminal.
Aquí está nuestro código:
1 entrada de inicio
2 inicio:
3 mov ax,#0xb800
4 mov ds,ax
5 mov byte[0],#0x41
6 mov byte[1],#0x1f
7 hlt
p>8
El párrafo anterior es el código ensamblador as86 que necesitamos. Guárdelo como archivo boot.s en Linux.
entrada inicio Esta frase significa literalmente que nuestro programa comienza desde el principio.
El significado del código se explicará en el paso 2 después de que terminemos de hablar sobre la versión de Windows del código ensamblador. Primero ingresamos el comando en la terminal de Linux para ensamblar el código en instrucciones de máquina:
p>as86 -o boot.o boot.s
ld86 -o boot boot.o
De esta forma obtenemos el archivo de arranque en Linux en el que escribiremos el disco U a continuación,
Y esperamos que nuestro subprograma de arranque se ejecute cuando la PC arranque desde la unidad flash USB (en lugar de intentar iniciar otros sistemas operativos en la unidad flash USB).
Paso 1: Escriba el programa ensamblador (versión de Windows)
No encontré el paquete de software bin86 que se puede usar en Windows. Descargué una versión cygwin, pero siempre es ld86. Es un error.
Normalmente me gusta usar MinGW como compilador de C\C++, así que simplemente usamos el ensamblador que viene con la versión de gcc para Windows.
Por supuesto, también puedes usar gas en Linux, pero esto añade un pequeño problema