• Jueves 2 de Mayo de 2024, 05:52

Autor Tema:  Problemas Con El Salto A Modo Protegido  (Leído 5924 veces)

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Problemas Con El Salto A Modo Protegido
« en: Miércoles 27 de Junio de 2007, 13:58 »
0
Hace ya meses (si, soy patético) que intento, sin éxito desarrollar un sistema operativo de juguete (mejor dicho un cargador de programas con 4 funciones) mi idea es simplemente divertirme, no pretendo hacer nada usable ni nada grande....

Hice mis pinitos con el modo real, un mini entorno con 4 funciones básicas de acceso a disco y demás

El problema vino cuando 1mb me resultó insuficiente para jugar (entiendase jugar por pasarlo bien programando en ensamblador)... aqui entra el modo protegido

Creo los descriptores de segmento, tal y como indica la documentación de intel, 200mil webs y tres o cuatro libros, paso a modo protegido tal y como indica y hago el salto corto para "entrar" a un segmento válido y ete aqui el problema
siempre, SIEMPRE SIEMPRE, invariablemente, si habilito las interrupciones, "error de protección general"

No pego código para no ofender sensibilidades y pq no lo tengo a mano ahora (estoy en la oficina) pero si quereis mas información la pondré mas tarde...

a grandes rasgos... esa excepción solo debería suceder si el segmento no es válido y no creo que sea el caso... ¿alguien sabe si hay que hacer algún paso adicional salvo cargar (lgdt) la tabla de descriptores, crear una tabla de interrupciones (aunque creo que no es imprescindible) pasar a modo protegido, hacer un salto largo y tirar millas?

otra cosa que no acabo de tener claro es como demonios selecciono los selectores...

8h es el primero... 16h es el segundo?

(perdón por ser tan ambiguo... prometo desarrollar mas, con código si el hilo crece)
jmp 7C000h

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #1 en: Miércoles 27 de Junio de 2007, 15:33 »
0
Primero pasa a modo protegido y despues crea la tabla de interrupciones, que es diferente a la de modo real.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #2 en: Miércoles 27 de Junio de 2007, 16:28 »
0
Sisis, eso por descontado, perdón si no me hice entender bien, primero salto a modo protegido, después asigno la tabla de descriptores de segmentos y después la tabla de interrupciones.

Es mas, creo que la tabla de interrupciones en modo protegido no es imprescindible, ya que el código debería poderse ejecutar independientemente de si gestionas correctamente las interrupciones (siempre y cuando no te topes con una, claro)
jmp 7C000h

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #3 en: Miércoles 27 de Junio de 2007, 18:51 »
0
Cita de: "sharek"
Sisis, eso por descontado, perdón si no me hice entender bien, primero salto a modo protegido, después asigno la tabla de descriptores de segmentos y después la tabla de interrupciones.

Es mas, creo que la tabla de interrupciones en modo protegido no es imprescindible, ya que el código debería poderse ejecutar independientemente de si gestionas correctamente las interrupciones (siempre y cuando no te topes con una, claro)
http://www.osdev.org/osfaq2/index.php/InterruptsForDummies

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #4 en: Miércoles 27 de Junio de 2007, 19:39 »
0
Espera, que nos desviamos del tema, las interrupciones ya llegarán, he probado una cosa, he cogido la definicion de los segmentos de el post del Bootloader (por si mis definiciones eran incorrectas) y ahora me da un error bastante gracioso, adjunto código

Código: Text
  1.  
  2. pasa_a_modo_protegido:
  3.   cli
  4.   lgdt  [selector_tabla_descriptores]
  5.   mov  EAX, CR0
  6.   or  AL, 1
  7.   mov  CR0, EAX
  8. [BITS 32]
  9.   jmp 08h:10000h
  10.  
  11.  


es divertido ver como bochs me peta diciendo:

Citar
00001116142i[CPU0 ] >> jmp far 0001:0000 : EA00000100
00001116142e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
00001116142i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
00001116142i[APIC0] local apic in CPU 0 initializing
00001116142e[CPU0 ] CPU_LOOP bx_guard.interrupt_requested=1
Next at t=1116142
(0) [0x00007c3f] 07c0:003f (unk. ctxt): jmp far 0001:0000         ; ea00000100


Uso nasm para compilar... ¿pq demonios no entiende el jmp y me ensambla un jmp tan feo como "jmp far 1:0" ? es absurdo!
jmp 7C000h

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #5 en: Miércoles 27 de Junio de 2007, 20:01 »
0
Cita de: "sharek"
Uso nasm para compilar... ¿pq demonios no entiende el jmp y me ensambla un jmp tan feo como "jmp far 1:0" ? es absurdo!
Mil perdones, dije compilar y es ensamblar
jmp 7C000h

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #6 en: Miércoles 27 de Junio de 2007, 20:13 »
0
Cita de: "sharek"
Espera, que nos desviamos del tema, las interrupciones ya llegarán, he probado una cosa, he cogido la definicion de los segmentos de el post del Bootloader (por si mis definiciones eran incorrectas) y ahora me da un error bastante gracioso, adjunto código

Uso nasm para compilar... ¿pq demonios no entiende el jmp y me ensambla un jmp tan feo como "jmp far 1:0" ? es absurdo!
¿Nos desviamos del tema?

Creo los descriptores de segmento, tal y como indica la documentación de intel, 200mil webs y tres o cuatro libros, paso a modo protegido tal y como indica y hago el salto corto para "entrar" a un segmento válido y ete aqui el problema
siempre, SIEMPRE SIEMPRE, invariablemente, si habilito las interrupciones, "error de protección general"

¿Tienen que ver las interrupciones o no?


Seguramente tenes que hacer algo asi (pero no podemos saberlo sin tener la direccion de donde cargas tu codigo):

[bits 16]
  jmp 08h:01000h

PD. Ese salto que queres en 16 bits no se puede hacer y en 32 es lo que te muestra NASM (o fasm o cualquier ensamblador) jmp 0x1:0x0.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #7 en: Miércoles 27 de Junio de 2007, 20:34 »
0
Bien, entonces, avanzamos un poco mas, si lo hago 16 bit:
Código: Text
  1.  
  2.   cli
  3.   lgdt  [selector_taula_descriptors]
  4.   mov  EAX, CR0
  5.   or  AL, 1
  6.   mov  CR0, EAX
  7.   jmp 08h:10000h
  8.  
  9.  
No me coge el desplazamiento, ya que supera los 16bit y salta a 08h:0 en vez de a 08h:10000h

Se que deben ser cosas básicas, pero no puedo con ellas...
jmp 7C000h

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #8 en: Miércoles 27 de Junio de 2007, 21:19 »
0
Superado el trauma, ahora solo tengo el problema que si habilito las interrupciones, rebienta todo..

Si no se crea una tabla de interrupciones válido, ¿peta por error de protección general?
no lo entiendo:

fijate:
Código: Text
  1.  
  2. [BITS 32]
  3. inicio:
  4.   jmp  $
  5.  
  6.  

no genera ningún error (si activo el debug de bochs veo como va ejecutando el bucle infinito sin problema
en cambio:
Código: Text
  1.  
  2. [BITS 32]
  3. inicio:
  4.   sti
  5.   jmp  $
  6.  
  7.  


me da como resultado:
Citar
00002428246e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown
 status is 00h, resetting
00002428246i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
00002428246i[APIC0] local apic in CPU 0 initializing
00002428246e[CPU0 ] CPU_LOOP bx_guard.interrupt_requested=1
Next at t=2428246
(0) [0x00010001] 0008:10001 (unk. ctxt): jmp .+0xfffffffe (0x00000001) ; ebfe


mis descriptores de segmento son los siguientes:
Código: Text
  1.  
  2. taula_descriptors:  &#59; taula de descriptors de segments
  3. .nul:    &#59; Segment nul
  4.   dw  0  &#59; Limit L0-L15
  5.   dw  0  &#59; base B0-B15
  6.   db  0  &#59; base B16-B23
  7.   db  00000000b&#59; Drets d' accés
  8.   db  00000000b&#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  9.   db  0  &#59; Base B24-B31
  10. .codi:    &#59; Segment de codi lectura/escriptura, no conformat
  11.   dw  0FFFFh  &#59; Limit L0-L15
  12.   dw  0  &#59; base B0-B15
  13.   db  0  &#59; base B16-B23
  14.   db  10011010b&#59; Drets d' accés
  15.   db  11001111b&#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  16.   db  0  &#59; Base B24-B31
  17. .dades:    &#59; Segment de dades, lectura/escriptura, expansió cap avall
  18.   dw  0FFFFh  &#59; Limit L0-L15
  19.   dw  0  &#59; base B0-B15
  20.   db  0  &#59; base B16-B23
  21.   db  10010010b&#59; Drets d' accés
  22.   db  11001111b&#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  23.   db  0  &#59; Base B24-B31
  24. .fi:
  25.  
  26.  

estoy en el segmento 08h:10000h (como se aprecia en el error de bochs) y no tengo tabla de interrupcion creada

¿alguien sabe si es normal este error sin tabla? probé a crear una tabla pero creo que la documentación que consulté no era demasiado de fiar... obtenía el mismo error
jmp 7C000h

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #9 en: Miércoles 27 de Junio de 2007, 21:54 »
0
Citar
a grandes rasgos... esa excepción solo debería suceder si el segmento no es válido y no creo que sea el caso... ¿alguien sabe si hay que hacer algún paso adicional salvo cargar (lgdt) la tabla de descriptores, crear una tabla de interrupciones (aunque creo que no es imprescindible) pasar a modo protegido, hacer un salto largo y tirar millas?
Yo tuve el mismo problema y no pasa porque la gtdr este mal sino la direccion a la que apunta el descriptor de la tabla general de descriptores de segmentos.
Código: Text
  1.  
  2. global_descriptor_table:
  3. null_descriptor:  dw  0x0000, 0x0000, 0x0000, 0x0000
  4. system_code:  dw  0xFFFF, 0x0000, 0x9A00, 0x00CF
  5. system_data:  dw  0xFFFF, 0x0000, 0x9200, 0x00CF
  6. global_descriptor_end:
  7. gdtr:
  8.   dw  global_descriptor_end - global_descriptor_table -1
  9.   dd   null_descriptor
  10.  
  11.  
El problema que tuve fue con :
Citar
dd null_descriptor
Al principio intentaba pasar a modo protegido una vez cargador el kernel, pero no se porque no logré hacer que funcionara en cuanto la direccion  estaba mal.
El kernel lo cargaba en la direccion fisica: 0x1000:0000  así que probe sumarle a null_descriptor  0x1000  que no funciono.

Lo solucioné pasando a modo protegido en el Bootloeader, tal vez algo poco recomendable pero así si me funcionó.
Código: Text
  1.  
  2. ;protected mode switch    
  3.   cli  
  4.   lgdt  [gdtr]
  5.   mov  eax, cr0
  6.   or  al, 1
  7.   mov  cr0, eax  
  8.   jmp  pword 0x8:0x10000
  9.  
  10.  
Si te sirve, puedes fijarte en el ejemplo que dejo>
http://foros.solocodigo.com/index.php?act=...=post&id=108861
Fijate en el archivo boot.asm.
ACLARACION IMPORTANTE> fijate que a la direccion de la tabla le sumo 0x7c00 es porque alli es donde es cargado el loeader por la bios y no uso org 0x7c00 sino un jmp a esa direccion. Esto porque al final hago > db   510 - $  dup 0
Si se usa org, hay que hacer 510 - $$-$ o lago parecido, como no sabia no lo hice asi.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #10 en: Jueves 28 de Junio de 2007, 00:01 »
0
¿Cual es la razon para habilitar las interrupciones antes de que arranque el codigo de 32 bits? No tiene sentido, hasta que no hagas tu propia tabla de interrupciones de 32 bits que las habilites.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #11 en: Jueves 28 de Junio de 2007, 00:54 »
0
Cita de: "Eternal Idol"
¿Cual es la razon para habilitar las interrupciones antes de que arranque el codigo de 32 bits? No tiene sentido, hasta que no hagas tu propia tabla de interrupciones de 32 bits que las habilites.
Segun entendi, CLI desabilita las interupciones (CLear Interupt) y STI las habilita (SeT Interupt). :S

La instruccion LGDT carga la tabla de descriptores de segmentos y la instruccion LIDT es la que carga la tabla de interrupciones.

La verdad que en el codigo que puse no quice habilitar las interupciones y si no estoy mal, no se habilitan.

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #12 en: Jueves 28 de Junio de 2007, 06:45 »
0
Cita de: "Eternal Idol"
¿Cual es la razon para habilitar las interrupciones antes de que arranque el codigo de 32 bits? No tiene sentido, hasta que no hagas tu propia tabla de interrupciones de 32 bits que las habilites.
No habilito las interrupciones hasta que tengo el código en 32bit, después del salto corto, todo y no tener tabla de interrupciones, no debería rebentarme y acabar en un error de protección general, pero, sigo sin ver el porqué peta, pongo el codigo esencial, a ver si veis algún error garrafal:

Código: Text
  1.  
  2. [BITS 16]
  3.   jmp  07C0h:inicio
  4. inicio:
  5. ; aqui uso interrupciones de bios para cargar el "nucleo"
  6. pasa_a_modo_protegido:
  7.   cli
  8.   lgdt  [selector_tabla_descriptores]
  9.   mov  EAX, CR0
  10.   or  AL, 1
  11.   mov  CR0, EAX
  12.   jmp 08h:07C00h + modo_protegido
  13. [BITS 32]
  14. modo_protegido:
  15.   jmp  08h:10000h
  16. selector_tabla_descriptores:
  17.   dw  selector_tabla_descriptores.fin - selector_tabla_descriptores -1
  18.   dd  07C00h + selector_tabla_descriptores
  19.  
  20. selector_tabla_descriptores:
  21. .nulo:              &#59; Segmento nulo
  22.   dw  0          &#59; Limit L0-L15
  23.   dw  0          &#59; base B0-B15
  24.   db  0          &#59; base B16-B23
  25.   db  00000000b      &#59; Drets d' accés
  26.   db  00000000b      &#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  27.   db  0          &#59; Base B24-B31
  28. .codigo:              &#59; Segment de codi lectura/escriptura, no conformat
  29.   dw  0FFFFh        &#59; Limit L0-L15
  30.   dw  0          &#59; base B0-B15
  31.   db  0          &#59; base B16-B23
  32.   db  10011010b    &#59; Drets d' accés
  33.   db  11001111b    &#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  34.   db  0        &#59; Base B24-B31
  35. .datos:          &#59; Segment de dades, lectura/escriptura, expansió cap avall
  36.   dw  0FFFFh      &#59; Limit L0-L15
  37.   dw  0        &#59; base B0-B15
  38.   db  0        &#59; base B16-B23
  39.   db  10010010b  &#59; Drets d' accés
  40.   db  11001111b  &#59; Granularitat/D/0/AV/Nibble Limit L16-L19
  41.   db  0      &#59; Base B24-B31
  42. .fin:
  43. times 510-($-$$) nop
  44.   dw  0AA55h
  45.  
  46.  

el código debería terminar en
Código: Text
  1.   jmp  08h:10000h
  2.  
pero por alguna razón bochs rebienta en la linea anterior, en el salto a 32bit:
Código: Text
  1.   jmp 08h:07C00h + modo_protegido
  2.  
Citar
00001345703i[CPU  ] >> jmp far 0008:7c44 : EA447C0800
00001345703e[CPU  ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
00001345703i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
00001345703e[CPU  ] CPU_LOOP bx_guard.interrupt_requested=1
Next at t=1345703
(0) [0x00007c3f] 07c0:003f (unk. ctxt): jmp far 0008:7c44         ; ea447c0800
<bochs:2> 00001345703i[     ] dbg: Quit

Todo apunta a un problema con los descriptores de segmentos, pero yo creo que están bien...

(se que es un palo leer todo el post, pero ya no se donde caer muerto...)
jmp 7C000h

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #13 en: Jueves 28 de Junio de 2007, 13:48 »
0
Cita de: "Enko"
Segun entendi, CLI desabilita las interupciones (CLear Interupt) y STI las habilita (SeT Interupt). :S

La instruccion LGDT carga la tabla de descriptores de segmentos y la instruccion LIDT es la que carga la tabla de interrupciones.

La verdad que en el codigo que puse no quice habilitar las interupciones y si no estoy mal, no se habilitan.
No hablaba de tu codigo Enko, sino de este:

Código: Text
  1.  
  2. [BITS 32]
  3. inicio:
  4.   sti
  5.   jmp  &#036;
  6.  
  7.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #14 en: Jueves 28 de Junio de 2007, 17:23 »
0
Soy un plasta, lo se!

pero fijaos en el código de ahora, no habilito las interrupciones y sigue fallando por excepción 13 (err prot general)

soy un liante! al principio no me iba, luego parecía que si, y ahora vuelve a no irme... es un problema en alguna parte del código y no hay tutía

Amf amf
jmp 7C000h

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #15 en: Jueves 28 de Junio de 2007, 21:43 »
0
Sigues cometiendo un ERROR.

Código: Text
  1.  
  2.   lgdt  [selector_tabla_descriptores]
  3.  
  4.  
a la instruccion lgdt no se le pasa de parametro el puntero al  selector nulo!!!!!!
y adem'as, vos estas pasando el contenido del selector nulo, o sea 0.

se le pasa como parametro un descriptor que apunta a la tabla genereral de descriptores. En cuanto que lgdt carga un registro de 48 bit. Fijate en el codigo la etiqueta 'gdtr:'

Código: Text
  1.  
  2. global_descriptor_table:
  3. null_descriptor:  dw  0x0000, 0x0000, 0x0000, 0x0000
  4. system_code:  dw  0xFFFF, 0x0000, 0x9A00, 0x00CF
  5. system_data:  dw  0xFFFF, 0x0000, 0x9200, 0x00CF
  6. global_descriptor_end:
  7.  
  8. gdtr:  &#59;ATENCION ACA ESTA ES LO QUE TE FALTA
  9.   dw  global_descriptor_end - global_descriptor_table -1
  10.   dd  0x7C00 + null_descriptor
  11.  
  12.  
y luego, harias >
Código: Text
  1.  
  2. lgdt [gdtr]
  3.  
  4.  

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #16 en: Viernes 29 de Junio de 2007, 09:48 »
0
Perdón?

fijate bien en mi código:
Código: Text
  1.  
  2. (etc....)
  3. pasa_a_mode_protegit:
  4.   cli
  5.   lgdt  [selector_taula_descriptors]
  6.   mov  EAX, CR0
  7.   or  AL, 1
  8.   mov  CR0, EAX
  9.   jmp 08h:07C00h + mode_protegit
  10. (etc....)
  11. selector_taula_descriptors:
  12.   dw  taula_descriptors.fi - taula_descriptors -1
  13.   dd  07C00h + taula_descriptors
  14.  
  15. taula_descriptors:  &#59; taula de descriptors de segments
  16. .nul:    &#59; Segment nul
  17.   dw  0  &#59; Limit L0-L15
  18.   dw  0  &#59; base B0-B15
  19. (etc....)
  20.  
  21.  

¿donde ves que no lo use?
lgdt   [selector_taula_descriptors]
y luego, mas abajo tengo
selector_taula_descriptors:
   dw   taula_descriptors.fi - taula_descriptors -1
   dd   07C00h + taula_descriptors

y la tabla debajo

Creo que es todo correcto... ¿me estoy liando yo o te estás liando tu?

Saludos (y gracias)
jmp 7C000h

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #17 en: Viernes 29 de Junio de 2007, 22:08 »
0
Ahora si está bien, fijate que el que pasaste antes era:
Código: Text
  1.  
  2. selector_tabla_descriptores:
  3.   dw  selector_tabla_descriptores.fin - selector_tabla_descriptores -1
  4.   dd  07C00h + selector_tabla_descriptores
  5.  
  6. selector_tabla_descriptores:
  7. .nulo:            &#59; Segmento nulo
  8.   dw  0        &#59; Limit L0-L15
  9.   dw  0        &#59; base B0-B15
  10.   db  0        &#59; base B16-B23
  11.  
  12.  
usabas la misma etiqueta 2 veces que es lo que me hizo confundir.

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #18 en: Sábado 30 de Junio de 2007, 00:41 »
0
CULPA MIA!
mil perdones
Código: Text
  1. selector_tabla_descriptores:
  2.   dw  selector_tabla_descriptores.fin - selector_tabla_descriptores -1
  3.   dd  07C00h + selector_tabla_descriptores
  4.  
  5. selector_tabla_descriptores:
  6.  

Tengo el código (y las etiquetas) en otro idioma, y al traducirlo para ponerlo en el foro para que quedase mas claro, LA CAGUE!


perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon, perdon,


una y MIL VECES
jmp 7C000h

sharek

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
    • http://binarycell.org
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #19 en: Sábado 30 de Junio de 2007, 00:42 »
0
en cuanto al código que genera errores misteriosos en bochs... ¿Alguien ve alguna errata?

no entiendo que falla y es realmente decepcionante
jmp 7C000h

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Problemas Con El Salto A Modo Protegido
« Respuesta #20 en: Sábado 30 de Junio de 2007, 17:54 »
0
Cita de: "sharek"
en cuanto al código que genera errores misteriosos en bochs... ¿Alguien ve alguna errata?

no entiendo que falla y es realmente decepcionante
La verdad que no, pero fijate y comparalo con el codigo que adjunte en el zip:
http://foros.solocodigo.com/index.php?act=...=post&id=108861

el archivo boot.asm. Está escrito para FASM pero creo que es compatible para NASM. Te aseguro que funciona y esta muy similar al tuyo. debe ser un detallito que molesta.

importante como ya dije antes, me pasaba lo mismo que a vos, la unica forma que lo solucione fue mirar muchos codigos fuentes de terceros. Así encontré un para de errores.