La Web del Programador: Comunidad de Programadores
 
    Pregunta:  12586 - MEMORIA EXPANDIDA
Autor:  Martín H. Bustos
Hola a Todos !!!. Necesito realizar un programa en lenguaje Ensamblador que muestre la cantidad de Memoria Expandida que posee mi equipo. No sé por donde empezar. ¿Cómo hago?. Si alguien puede ayudarme se lo agradecería.

  Respuesta:  Martín H. Bustos
Hola a todos !!!. Hace tiempo que dejé esta pregunta "colgada" pero nadie me la supo contestar. Después de buscar durante un largo tiempo la respuesta les cuento que la he encontrado. Para todas aquellas personas que tengan mi misma duda me voy a "auto-responder" la pregunta.
Antes que nada me detengo en 2 puntos:

1) La memoria expandida(EMMS) se calcula utilizando el servicio 42h de la Int 67h. En el registro BX devuelve la cantidad de páginas libres y en DX la cantidad total de páginas. Cada página tiene un tamaño de 16K(16694 Bytes).
O sea que básicamente las páginas que devuelve la función(En DX) habrá que multiplicarlas por 16K para obtener el tamaño total de la memoria expandida.

2) Antes de ejecutar el programa habrá que verificar si hay algún controlador de memoria expandida(Como por ejemplo el Emm386.exe del DOS) instalado en la PC. Si no hay ninguno, el programa arrojará el valor 0(No hay memoria expandida) o producirá probablemente el "cuelgue" del ordenador.

Ahora vamos al programa:

{Utilizando Turbo Pascal v. 7.0 u otras versiones}
PROGRAM EMMS;
VAR TOTAL,LIBRE:WORD;
BEGIN
TOTAL:=0;
LIBRE:=0;
ASM
MOV AH,42H;
MOV LIBRE,BX;
MOV TOTAL,DX;
INT 67H;
END;
TOTAL:=TOTAL*16964;
LIBRE:=LIBRE*16964;
WRITELN('TOTAL DE "MEMORIA EXPANDIDA": ',TOTAL,' Bytes .');
WRITELN('"MEMORIA EXPANDIDA" LIBRE: ',LIBRE,' Bytes');
WRITELN('PRESIONE <ENTER> PARA SALIR...');
READLN;
END.

Bueno, espero que les sirva la explicación. Hasta la próxima !!!.