Título: [SOLUCIONADO] No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 20:02 pm Hola a todos , estoy tipeando un bootloader en asm , pero esto me tiene ya medio calvo. No se donde puede estar el fallo , no tengo la mas remota idea !!!
Os paso el codigo Código
No comprendo donde esta el problema , como dato os digo que ni se mueve el cursor :( Muchas gracias de antemano La solucion fue esta : 1 ) Corregi el valor de ORG , que lo puse mal por un error de tipeo 2 ) Como solucion temporal hasta que maneje bien lods y familia , hice un mov al , [DS:SI]. Luego antes de repetir el bucle incremento SI para pasar al siguiente caracter y por fin resuelto !!!!!!!!!!!!!!!!!!!!!!!(10^9000 exclamaciones)!!!!!!!!!!!!!!!!!!!! Os dejo el codigo corregido :) Código
Nota : Lo se usar cld para asegurarme de que lodsb incremente SI ha posteado por cpu2 Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: x64core en 24 Junio 2013, 20:12 pm Has depurado el codigo? :rolleyes:
Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 20:35 pm Has depurado el codigo? :rolleyes: Hay 2 problemas 1. Yo lo que hago cuando programo bootloaders es usar unas directivas nasm que dejan el fichero en 512 bytes y le agregan la firma bootloader , y luego lo pruebo en una maquina virtual. Pero yo no se de ningun "depurador para maquina virtual" 2. Llevo 3 semanas aprendiendo ASM , y como en C la vida era de color rosa no necesitaba debuggers. Asi que nunca me dio por aprender a usarlos y no tengo ni idea de depurar :( Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: Eternal Idol en 24 Junio 2013, 21:31 pm ¿Y despues del main ejecutas msgTexto?
Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: x64core en 24 Junio 2013, 21:38 pm Yo uso bochs para tales requerimientos ;D
Create una imagen, insertas el codigo, cargas la imagen a la VM y a depurar :D Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 21:47 pm ¿Y despues del main ejecutas msgTexto? Punto 1. He visto bootloaders "hola mundo" que lo ponen despues de main Punto 2 ¿ ejecutar msgTexto ??? usando msgTexto db "unacadena" , lo que haces es incrustar unacadena en el fichero resultante , es algo propio de nasm y creo que tu usas masm. Como la BIOS carga los 512 primeros bytes , tambien cargará en algun sitio del segmento de datos la cadena hola mundo , y luego la idea es que una vez en memoria recorrer todos los caracteres. de todos modos probaré lo que tu dices Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: x64core en 24 Junio 2013, 21:50 pm Punto 1. He visto bootloaders "hola mundo" que lo ponen despues de main Punto 2 ¿ ejecutar msgTexto ??? usando msgTexto db "unacadena" , lo que haces es incrustar unacadena en el fichero resultante , es algo propio de nasm y creo que tu usas masm. Como la BIOS carga los 512 primeros bytes , tambien cargará en algun sitio del segmento de datos la cadena hola mundo , y luego la idea es que una vez en memoria recorrer todos los caracteres. de todos modos probaré lo que tu dices jajaja Es notable que te falta mucho por aprender creo que lo que deberias es empezar a leer un libro de programacion en ensamblador ;D Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: Eternal Idol en 24 Junio 2013, 21:51 pm x64Core tiene razon, demasiadas preguntas sin sentido y respuestas idem. No tenes bases, por eso no comprendes lo que hace tu main, leelo de nuevo y si seguis sin comprender olvidate de hacer un bootloader y primero aprende a hacer un programa en assembly.
Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: MCKSys Argentina en 24 Junio 2013, 21:52 pm Siguiendo lo que dijo x64Core (1er comment):
http://wiki.osdev.org/VMware (http://wiki.osdev.org/VMware) http://weichong78.blogspot.com.ar/2010/04/vmware-qemu-and-gdb-for-boot-time-real.html (http://weichong78.blogspot.com.ar/2010/04/vmware-qemu-and-gdb-for-boot-time-real.html) Otra info interesante: http://cyberview.wordpress.com/2010/09/16/debugging-bios-under-vmware-using-idas-gdb-debugger/ (http://cyberview.wordpress.com/2010/09/16/debugging-bios-under-vmware-using-idas-gdb-debugger/) Saludos! Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 21:55 pm x64Core tiene razon, demasiadas preguntas sin sentido y respuestas idem. No tenes bases, por eso no comprendes lo que hace tu main, leelo de nuevo y si seguis sin comprender olvidate de hacer un bootloader y primero aprende a hacer un programa en assembly. Estuve estudiandome varios manuales tanto de asm con S.O como asm sin S.O Por lo visto parece que tengo que leer mucho mas ... Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: Eternal Idol en 24 Junio 2013, 22:08 pm Sin duda.
[ORG 0x7C00] Ademas de lo que ya te dije sobre ejecutar msgTexto, lee la descripcion de la instruccion lods. http://faydoc.tripod.com/cpu/lodsb.htm Y despues trata de comprender como es que poniendo esto antes funciona: Código
Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: x64core en 24 Junio 2013, 22:10 pm Siguiendo lo que dijo x64Core (1er comment): http://wiki.osdev.org/VMware (http://wiki.osdev.org/VMware) http://weichong78.blogspot.com.ar/2010/04/vmware-qemu-and-gdb-for-boot-time-real.html (http://weichong78.blogspot.com.ar/2010/04/vmware-qemu-and-gdb-for-boot-time-real.html) Otra info interesante: http://cyberview.wordpress.com/2010/09/16/debugging-bios-under-vmware-using-idas-gdb-debugger/ (http://cyberview.wordpress.com/2010/09/16/debugging-bios-under-vmware-using-idas-gdb-debugger/) Saludos! BIOS != MBR/Bootloader ::) Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 22:15 pm echadle una ojeada al codigo de esta URK http://elektronblog.wordpress.com/2010/08/31/crear-un-boot-loader-para-comenzar-tu-propio-sistema-operativo/
Pone el msgTexto casi al final y hace mov si , msgTexto , lo cual deberia guardar en si la direccion de msgTexto ¿ Entonces por qué a la persona del tutorial le funciona y a mi no ??? Pero por favor no se rian de mis conocimientos basicos de asm y ayudenme. Muchas gracias Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: Eternal Idol en 24 Junio 2013, 22:20 pm Lee mi anterior mensaje con atencion. Hay dos problemas fundamentales, tenes mal el ORG y al no saber como funciona la instruccion lodsb te falta darle el valor correspondiente a un registro.
Amen de eso tu main despues de llamar a putstr ejecuta lo que le sigue a continuacion. ¿Y que es eso? Pone un hlt al menos. El codigo del ejemplo ese que ya publicaste en otro hilo tiene un bucle infinito, por eso nunca retorna de su rutina de escritura de cadena ... Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 22:21 pm Sin duda. [ORG 0x7C00] Ademas de lo que ya te dije sobre ejecutar msgTexto, lee la descripcion de la instruccion lods. http://faydoc.tripod.com/cpu/lodsb.htm Y despues trata de comprender como es que poniendo esto antes funciona: Código
Lo de org fue un error de tipeo , y aunque todavia no he leido la descripcion de lods , ahora me lo leo. Muchisimas gracias !!! Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 22:38 pm Sin duda. [ORG 0x7C00] Ademas de lo que ya te dije sobre ejecutar msgTexto, lee la descripcion de la instruccion lods. http://faydoc.tripod.com/cpu/lodsb.htm Y despues trata de comprender como es que poniendo esto antes funciona: Código
Ya he leido la descripcion de lodsb , pero aun asi volvemos a lo de antes , la persona del tutorial no pone por parte alguna Código Y sin embargo su code funciona !!!!!!!!!!!!!!!!!(1000 exclamaciones mas)!!!!!!!!!!!! Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: Eternal Idol en 24 Junio 2013, 22:56 pm No volvemos a ninguna parte:
AC LODSB Load byte at address DS:(E)SI into AL ¿Y que valor tiene DS en tu loader? En el tutorial no esta indefinido (tene en cuenta que ahi ORG es 0). Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 24 Junio 2013, 23:09 pm No volvemos a ninguna parte: AC LODSB Load byte at address DS:(E)SI into AL ¿Y que valor tiene DS en tu loader? En el tutorial no esta indefinido (tene en cuenta que ahi ORG es 0). Perdonadme por calentaros tanto la cabeza pero me parece que hay un transfondo de algo que no acabo de entender al 100% , tienes razon mejor leere mucho mas de lo que ya he leido. Creo que mi deberia releerme lo de los registros de segmento , ¿ Estoy en lo cierto ? ¿ Y si no que cosas me recomiendas leer para que comprenda el problema de mi código ? Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: Eternal Idol en 24 Junio 2013, 23:32 pm Si relee eso y como ya te dijo x64Core conseguite algun libro de ensamblador (como por ejemplo el de Charte Ojeda http://www.fcharte.com/Default.asp?libro84-415-2511-5).
Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: MCKSys Argentina en 25 Junio 2013, 01:16 am BIOS != MBR/Bootloader ::) Y quién ha dicho lo contrario ? Interesante aquí significa: leelo pues tiene información que podrías encontrar útil (depurar con gdb-IDA en VMWare). Aparte si depuras el BIOS, puedes mirar fácilmente la carga del MBR... :P Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: x64core en 25 Junio 2013, 08:33 am Yo puedo decir que lo que puede hacer es, aprender a depurar este tipo de codigos, depuracion es tan esencial como
saber programarlos. Recomiendo altamente para empezar es usar bochs como dije al principio, luego para saber si todo va bien lo haces desde la VM. Título: Re: S.O.S No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 25 Junio 2013, 17:12 pm Si relee eso y como ya te dijo x64Core conseguite algun libro de ensamblador (como por ejemplo el de Charte Ojeda http://www.fcharte.com/Default.asp?libro84-415-2511-5). Al final consegui solucionarlo. Aunque como dicen por ahi , primero haz que compile ( en este caso ensamble ) y luego optimizalo. Lo que he hecho es en lugar del lodsb poner un mov al , [DS:SI] , hacer el proceso de impresion del caracter y luego antes de repetir el bucle incrementar SI para pasar al siguiente caracter. Aunque es evidente que con lodsb necesitas menos instrucciones , pero por lo menos asi comprendo mi codigo y se que funciona hasta que le coja el truco a lodsb. RESUELTO AL FIN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Título: Re: [SOLUCIONADO] No funciona mi bootloader !!!! Publicado por: xv0 en 25 Junio 2013, 20:00 pm Al final consegui solucionarlo. Aunque como dicen por ahi , primero haz que compile ( en este caso ensamble ) y luego optimizalo. Lo que he hecho es en lugar del lodsb poner un mov al , [DS:SI] , hacer el proceso de impresion del caracter y luego antes de repetir el bucle incrementar SI para pasar al siguiente caracter. Aunque es evidente que con lodsb necesitas menos instrucciones , pero por lo menos asi comprendo mi codigo y se que funciona hasta que le coja el truco a lodsb. RESUELTO AL FIN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Pues es una tontería, esto es mejor. Código
cld limpial a bandera DF y te aseguras de que incremente si. Un saludo. Título: Re: [SOLUCIONADO] No funciona mi bootloader !!!! Publicado por: lucaslopez0000 en 26 Junio 2013, 18:09 pm Pues es una tontería, esto es mejor. Código
cld limpial a bandera DF y te aseguras de que incremente si. Un saludo. No sabia que lodsb aumenta o decrementa SI segun el valor de este flag , ahora me entero si lo hubiera sabido antes .... |