Creo que capte lo que decís.. te cuento la idea, tengo planeado entender el código de Linux, y armar un pseudo sistema operativo.. claro esta, me falta mucho.. pero creo que estoy en camino..
Te recomendaría leer el manual de intel de arquitectura de sistema.
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.htmlY luego algun libro teorico sobre desarollo de sistemas operativos (mas que nada para tener el panorama teorico completo)
Luego para asuntos practicos está la wiki OSDEV.
Como es posible que un SO, el cual contiene instrucciones en ASM funcione sobre diferentes arquitecturas?
1)Un SO no contiene instrucciones asm, sino instrucciones de lenguaje máquina. Las instrucciones asm son acrónimos a instrucciones de lenguaje máquina para simplificar la cosa. Pero no es lo mismo.
Suponte este ejemplo.
Al ensamblar esto para x86 va generar 0x03c3.
Que para un procesador x86 significa sumar a eax el contenido de ebx.
Pero si ejecutas eso por ejemplo en un celular con arm7 puede pasar dos cosas.
1)que tire un error.
2)que haga algo totalmente diferente.
Si quieres ejecutar el mismo codigo en un procesador arm7 tendras que ensamblar este codigo
Que va generar una instruccion de 2 o mas bytes (no tengo desensamblador de arm a mano ni ensamblador)
Pero 99.9% seguro que lo que genere el ensamblador de arm no va a ser 0x03c3.
De ahí si tienes siguiendo el ejemplo usando lenguaje C
Si compilas ese codigo para x86 va generar algo muy parecido a "add eax, ebx" o tal vez algo diferente pero con el mismo sentido. Depende del contexto, de la optimizacion del compilador. Si el compilador es bueno y tiene buena optimizacion, y esa linea de codigo es codigo basura totalmente irrelevante para lo que se esté haciendo, tal vez ni genere nada.
La ventaja es que puedes tomar ese mismo codigo en C, usar un compilador de C para ARM y te va generar la instruccion correspondiente para un procesador ARM.
Esa es la diferencia, si escribes en asm para x86, terminas teniendo siempre binarios para x86.
Pero si usas C por ejemplo, depende para que estes compilando es el binario que termines obteniendo.
Se que dije que era una duda, pero.. pregunto,, si hago mi propio boot, y le hago mandar un mensaje en la pantalla, (con interrupciones de la BIOS claro esta..) debería verse no? Solo hago que muestre ese mensaje aclaro, sin mas..
Totalmente. Te alcanzaría con un:
"org 0x7c00"
"llamar a la interrupcion que necesites".
y listo.
El tema es meter ese codigo en el bootsector del disco.
Yo en mi práctica me resulto cómodo wmware, hacer que mi código ocupe 1.44mb y cargarlo como disquet.