Programación General > ASM (Ensamblador)
Boot Loader
Enko:
Tan testarudo no soy. A muchos consejos le hago caso.
Gracias otra vez. :hola:
Enko:
Volviendo al tema inicial.
Ahora estoy tratando de pasar a modo protegido. Llevo creo 3 dias leyendo info y viendo ejemplos pero no logro hacerlo. Los ejemplos que encuentro no son diferentes a como lo quiero hacer.
El bootloader lee el 2do sector del disquet y lo carga a la dirreccion 0x1000:0000 y luego salta alli, al kernel.
Obviamente algo está mal porque la pc reinicia, pero no logro encontrarlo.
¿Alguna pista?
--- Código: Text --- jmp real_mode global_descriptor_table:null_descriptor: db 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00system_code: db 0xFF,0xFF, 0x00,0x00, 0x01,0x9A, 0x00,0xCFsystem_data: db 0xFF,0xFF, 0x00,0x00, 0x01,0x92, 0x00,0xCFsystem_linear: db 0xFF,0xFF, 0x00,0x00, 0x00,0x92, 0x00,0xCFglobal_descriptor_end:gdtr: dw global_descriptor_end - global_descriptor_table -1 dd global_descriptor_tablereal_mode: mov ax, cs mov ds, ax mov es, ax cli lgdt [gdtr] mov eax, cr0 inc ax mov cr0, eax jmp 0x8:protected_modeuse32protected_mode: mov ax,0x10 mov ds,ax mov ss,ax mov ax,0x18 mov es,ax mov byte [es:0xB8010], "!"forever: jmp forever
Eternal Idol:
No tengo tiempo de probarlo ni analizarlo (especialmente las tablas) pero no entiendo la razon por la cual no usas el codigo logico para activar el bit de cr0. Despues en el codigo protegido seguis trabajando como si estuvieras en 16 bits cuando en realidad estas en 32 y con un modelo de memoria plana. ¿Cual es la razon para poner jmp 0x8:protected_mode?
Enko:
--- Citar ---¿Cual es la razon para poner jmp 0x8:protected_mode?
--- Fin de la cita ---
Supuestamente es para realizar un jmp far y el parametro 0x8 indica el offset del descriptor del segmento sytem_segmen en la GDT. (Eso es lo que yo entendi, como primero esta el null_descriptor, el del systema es el que le sigue, 8 bytes. Por sierto que tambien pude estar en otro posicion, 0, 8h,10h,18h,20h: es cuestion de como se arme la gdt
Lo del tiempo no te preocupes, de eso no hay problema ;) , solo quería revisar que el código no tenga fallas obvias. Capaz era una boludez mia nomas.
Pero el problema esta de seguro en la GDT (igualmente tambien hice un hilo en el foro de fasm, en os-construction que es más dedicado a eso supongo)
Respecto de la técnica para activar el bit PE de cr0, probé con varios. Dejé el último, igualmente ninguno funcionó.
Enko:
Por sierto, el problema del reinicio por culpa de los segmentos creo, lo puedo solucionar siguiendo un ejemplo activando el modo protegido en el bootloader.
El problema es que no se si que tanto puede crecer mi GDT y luego como accedo a ella una vez que salté al kernel.
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa