1
« en: Lunes 21 de Junio de 2004, 15:36 »
Necesito hacer un programa usando codigo de C y/o Assembler que tenga una lista enlazada de n elementos. Los elementos de la lista se van a ir agregando automaticamente y cada vez que se agregue un elemento debo de imprimir en pantalla cuanta memoria queda en el sistema.
Mi problema esta en que no se que tipo de memoria se va ocupando cuando agrego un elemento a lista enlazada. El codigo que genera la lista ya lo hice, y le he puesto codigo que he encontrado a ver si me devuelve la memoria que queda. En todas la pruebas siempre me devuelve el mismo numero a veces 640k o dependiendo de la memoria que le asigne al programa atravez de windows. Por ejemplo le doy un click derecho en el archivo ejecutable de mi programa, en propiedades voy a memoria y le pongo en la memoria convencional un total de 80 y entorno inicial 256, y a toda las demas memoria que aparecen (extendida EMS y SMS) le pongo ninguna y entonces el codigo me devuelve 148k en vez de 640k.
Bueno para no hacerle el cuento mas largo hay le pongo unos de los codigo que he encontrado que me devuelve supuestamente la memoria disponible.
void set_xy(int x, int y)
{
union REGS r;
r.h.ah=2;
r.h.bh=0;
r.h.dh=y-1;
r.h.dl=x-1;
int86(0x10,&r,&r);
}
void _set_xy(char x, char y)
{
asm mov ah,02h // _AH=2
asm mov bh,0h // _BH=0
asm mov dh, y // _DH=y-1
asm dec dh
asm mov dl, x // _DL=x-1
asm dec dl
asm int 10h
}
int get_memory_size(void)
{
union REGS r;
int86(0x12,&r,&r);
return(r.x.ax); // kbyte
}
int _get_memory_size(void)
{
asm int 12h
return(_AX);
}
int put_print(char ch)
{
union REGS r;
r.h.ah=0;
r.h.al=ch;
int86(0x17,&r,&r);
return(r.h.ah); // Status code
}
int _put_print(char ch)
{
_AH=0;
_AL=ch;
asm int 17h;
return(_AH);
}
void main(void)
{
int h,m,s,s100;
set_xy(5,5); printf("dfghjkl\n");
_set_xy(10,10);printf("123456789\n");
printf("Memory size = %dkbyte.\n",get_memory_size());
printf("Memory size = %dkbyte.\n",_get_memory_size());
put_print('A');
_put_print('B');
getch();
}