Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/12/2008, 04:16
Avatar de Eternal Idol
Eternal Idol
 
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Hacer un arranque

Cita:
Iniciado por Germancho7186 Ver Mensaje
La verdad es yo no sé que tiene que ver 16 bits con 32 bits, es mas yo he compilado código en ensamblador en 32 bits y me funciona como arranque.
Empeza de nuevo entonces, una PC bootea en modo Real en 16 bits, de no ser asi no podrias arrancar con MS-DOS por ejemplo. ¿Esta claro eso? ¿Sos capaz de comprenderlo o necesitas mas detalles?

Cita:
Iniciado por Germancho7186 Ver Mensaje
Además unos de los compiladores que me estás aconsejando usar el es NASM, y es ese uno de los que yo uso, así que lo de 16 ó 32 bits de que me hablás la verdad no sé de que se trata.
No, NASM es un ENSAMBLADOR, no un compilador. Yo no te aconseje ninguno en particular, lee con mas atencion, yo te dije que uses CUALQUIERA que genere codigo de 16 bits. ¿Sigue sin entenderse eso? ¿Es tan complicado?

Cita:
Iniciado por Germancho7186 Ver Mensaje
Lo que quiero hacer es un arranque, y ejecutarlo en una máquina virtual (qemu, VMware, VirtualPC, etc), en mi caso, VirtualPC.
Eso se entendio desde el primer mensaje.

Cita:
Iniciado por Germancho7186 Ver Mensaje
Si yo escribo un código en ensablador y lo compilo:
nasm archivo.asm
El archivo resultante me sirve. Lo inserto en un archivo de extensión .iso, usando el programa UltraISO. Y luego uso VirtualPC y funciona.
Eso quiere decir que tu codigo objeto es de 16 bits.

Cita:
Iniciado por Germancho7186 Ver Mensaje
Hasta ahí todo bién, ahora mi problema se basa en que es demasiado complejo hacer un programa sólo en ensamblador. Así que la idea es hacer el código principal, ó código de inicio en ensamblador, y desde allí llamar a funciones mas complejas escritas en código C.
Si queres usar codigo de 32/64 bits TENES que cargarlo, pasar a modo protegido/long y por ultimo ejecutarlo (saltando a el), no podes enlazarlo directamente ya que el procesador seguiria en modo Real 16 bits y el codigo seria incorrecto.

Cita:
Iniciado por Germancho7186 Ver Mensaje
esta vez si me genera un archivo de salida, llamado a.exe, el problema es que es un archivo para la plataforma de Windows, y eso no me sirve para hacer un arranque. O sea no quiero un programa que se ejecute en Windows, sino un programa que se arranque desde un diskette, disco duro, o un máquina virtual.
Y si, un PE no te lo va a cargar, el loader tiene que ser codigo puro de 16 bits sin ningun formato.

Cita:
Iniciado por Germancho7186 Ver Mensaje
Según mi análisis, el problema está en el momento de enlazar, talvéz no le indico al enlazador las opciones correctas. Ahora que si el problema es lo de 16 ó 32 bits, voy a necesitar que me sea explicado, porque con sólo decirme que ese es el problema no me basta, necesito saber porque. Pero si el problema es el compilador que uso, voy a necesitar que me digan cual es exactamente el compilador que debería usar, cual es exactamente el enlazador que debería usar, y cuales son exactamente las opciones que debería indicarles, porque decirme que debería probar con uno u otro compilador no me sirve, ya que he probado con el MASM, el TASM, el FASM, el NASM, el GCC, el TURBOC, y el PELLESC, y la verdad es que con ninguno he logrado mi objetivo.
Así que si alguno pudiera darme una explicación clara y precisa, desde ya muchas gracias.
Segui tratando de enlazarlo, cuando lo consigas avisa.

¿De verdad no entendes que no podes ejecutar codigo de 32 bits asi como asi? ¿Que mayor precision queres? ¿Queres que te expliquen tambien la arquitectura x86? Bajate los manuales de Intel y la hacemos mas corta, no esperes que te expliquen todo en un foro, se te dan lineas y vos las seguis.

Si ya estas haciendo un loader se presupone un minimo de conocimiento de la arquitectura, lo que no sirve en realidad es tratar de construir cosas sin comprender lo que se esta haciendo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 17/12/2008 a las 04:34