Programación General > ASM (Ensamblador)

 Boot Loader

<< < (4/9) > >>

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], &#34;!&#34;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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa