Carga de DataSegment

Carga de DataSegment

de Gonzalo Labandera Sereno -
Número de respuestas: 4

Estuvimos intentando varias formas de cargar el ds para poder referenciar a los segment selector desde las interrupciones, sin embargo al momento de ejecutar la interrupcion,salvando el contexto con pushad y push ds, cuando pretendemos cargar ds con el selector de por ejemplo,  ldt tarea 1, (0x18)en gdt, el simulador nos lanza la siguiente excepcion:

lock mov byte ds:[eax], al 

para cargar ds hicimos simplemente esto:

mov bx, 0x18
mov ds,bx

Gracias, saludos

En respuesta a Gonzalo Labandera Sereno

Re: Carga de DataSegment

de Martin Giachino -

No me queda claro por qué quieres cargar el ldt de la tarea en ese momento. En realidad lo que necesitás es al revés en todo caso, cuando entrás a la interrupción es posible que quieras utilizar el segmento de datos del kernel, ya sea para acceder a las tablas o a la memoria de video.

Además en el ds no tienes que cargar el descriptor de una ldt, sino de un descriptor de segmento que esté dentro de la ldt.

Martín

En respuesta a Martin Giachino

Re: Carga de DataSegment

de Gonzalo Labandera Sereno -
Buenas,
En la gdt tenemos definido el segmento descriptor que describe el segmento de datos del kernel, este segmento lo definimos con base 0 y limite FFFF.
En la rutina teclado lo que hicimos para cargar los datos de las tareas en los distinto segmentos descriptores de la gdt fue cargar el selector de datos del kernel en el DS, y utilizando el segmento de datos del kernel podemos acceder a las distintas etiquetas definidas en la gdt para cargar datos como tss de la tarea 1, tss de la tarea 2 y los respectivos ldts.
Utilizando este segmento podemos acceder a todas las etiquetas definidas ya que su base es cero y su limite es FFFF.
¿La pregunta es si está bien lo que estamos haciendo? Porque vos nos comentaste en la consulta que en la rutina del teclado deberíamos cargar el selector de la gdt en el DS, para cargar los datos en el correspondiente segmento descriptor que queremos. Osea si queremos cargar los datos del segmento descriptor de la TSS1 en la GDT, deberíamos cargar el selector que apunta a este segmento descriptor ,eso es por lo menos lo que yo te entendí.
ya te pregunto si vamos a tener alguna consulta mas?

desde ya muchas gracias y disculpá las molestias causadas

Saudos

En respuesta a Gonzalo Labandera Sereno

Re: Carga de DataSegment

de Martin Giachino -

Si no entiendo mal lo que contás, está correcto lo que estás haciendo. Para modificar cosas que van en la gdt, puedes cambiar a ese DS. Incluso podrías tener que hacerlo para poblar lo que va dentro de las LDTs también y/o para poblar los TSSs.

Estoy viendo si puedo poner una clase de consulta extra mañana.

Martín