Hola, estoy untentando hacer un programa en el que necesito acceder a ciertos sectores del disket. Para ello utilizo la función 0x02 de la interrupción 0x13 de la bios. Y por supuesto para ello hay q utilizar el ensamblador.
Lo estoy haciendo de la siguiente manera. Pero al llegar a la intrrupción me da error de segmento.
void lee(int sector,int pista)
{
__asm__ ("movb $2, %ah"); // pone ah <- 2 (FUNCION 2 DE LA BIOS)
__asm__ ("movb $1, %al"); // pone al <- 1 (Num Sectores a leer)
__asm__ ("movb $0, %dl"); // pone dl <- 0 (DISKETERA 0)
__asm__ ("movb $0, %dh"); // pone dh <- 0 (CABEZAL 0,1)
__asm__ ("movb %0, %%ch" : : "g" (pista)); // pone ch <- pista (CILINDRO 0..79)
__asm__ ("movb %0, %%cl" : : "g" (sector)); // pone cl <- sector (SECTOR 1..18)
__asm__ ("int $0x13"); // INTERRUPCION 0x13
}
No se si lo que estoy haciendo mal son los valores de los registros (que serian los parametros de entrada para la función de la interrupción de la bios) o si estoy usando mal las llamadas a ensamblador dentro del codigo de c.
Bueno si alguien ha hecho algo parecido o intuye cual puede ser la causa de mi fallo que por favor me diga algo
1 saludo
Lo estoy haciendo de la siguiente manera. Pero al llegar a la intrrupción me da error de segmento.
void lee(int sector,int pista)
{
__asm__ ("movb $2, %ah"); // pone ah <- 2 (FUNCION 2 DE LA BIOS)
__asm__ ("movb $1, %al"); // pone al <- 1 (Num Sectores a leer)
__asm__ ("movb $0, %dl"); // pone dl <- 0 (DISKETERA 0)
__asm__ ("movb $0, %dh"); // pone dh <- 0 (CABEZAL 0,1)
__asm__ ("movb %0, %%ch" : : "g" (pista)); // pone ch <- pista (CILINDRO 0..79)
__asm__ ("movb %0, %%cl" : : "g" (sector)); // pone cl <- sector (SECTOR 1..18)
__asm__ ("int $0x13"); // INTERRUPCION 0x13
}
No se si lo que estoy haciendo mal son los valores de los registros (que serian los parametros de entrada para la función de la interrupción de la bios) o si estoy usando mal las llamadas a ensamblador dentro del codigo de c.
Bueno si alguien ha hecho algo parecido o intuye cual puede ser la causa de mi fallo que por favor me diga algo
1 saludo
