Foros del Web » Programación para mayores de 30 ;) » Programación General »

Interrupciones y memoria en C

Estas en el tema de Interrupciones y memoria en C en el foro de Programación General en Foros del Web. Hola Quiero hacer una rutina en C que me lea un sector del disco. Para ello voy a recurrir a INT 13h (lectura de sector) ...
  #1 (permalink)  
Antiguo 22/11/2003, 16:07
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 20 años, 8 meses
Puntos: 3
Interrupciones y memoria en C

Hola
Quiero hacer una rutina en C que me lea un sector del disco. Para ello voy a recurrir a INT 13h (lectura de sector) sabiendo que esta rutina me dejará el resultado en el par ES:BX

La cuestión es ¿como hago para saber direccionar con ES:BX una variable que yo declaro?

Por ejemplo

struct PALABRA {
unsigned int ax, bx, cx, dx, si, di, cflag, flags;
};

struct BYTE {
unsigned char al, ah, bl, bh, cl, ch, dl, dh;
};

union REGS {
struct PALABRA x;
struct BYTE h;
};

struct REGSEG {
unsigned int es; unsigned int cs; unsigned int ss; unsigned int ds;
};

int main(int argc, char *argv[])
{
char Sector[512];
union REGS Registros;
struct REGSEG Segmento;
Registros.h.ah=0x2; /* función a desarrollar: lectura de sector */
Registros.h.al=1; /* número de sectores a leer */
Registros.h.ch=0; /* pista/cilindro a leer */
Registros.h.cl=1; /* numero de primer sector a leer */
Registros.h.dh=0; /* número de cabeza a leer */
Aquí está el problema ¿Como se que poner en ES y en BX para que la rutina deje el resultado en Sector?
Segmento.es=x; /* posición donde quedará lo leído es ES:BX */
Registros.x.bx=x;
int86x(0x13,*Registros,*Registros, *Segmento);
system("PAUSE");
return 0;
}

Es decir, yo declaro una variable Sector y quiero que en ella quede el resultado. La interrupción 13h deja el resultado en ES:BX luego tengo que hacer que ES:BX apunte a Sector
¿Como se hace esto?

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:30.