Una ayudita sobre direccionamiento de datos.

Juan Luis
17 de Marzo del 2004
Estoy empezando a aprender ensamblador y quisiera saber si las direcciones de memoria que siempre se utilizan para acceder a los datos se refieren a una memoria global (para todas las aplicaciones), o una memoria que el microprocesador reserva para cada aplicación, lo cual significaría que p.e. la dirección 0xFFFFF en una aplicación no es la misma que la dirección 0xFFFFF de otra aplicación. Si es así, ¿cómo puedo acceder a la memoria "real", la que comparten todas las aplicaciónes?

leviathan
17 de Marzo del 2004
Que tal.

La asignación de memoria corre por cuenta del sistema operativo.

Con respecto a lo de tu ejemplo, la dirección 0xFFFFF es unica y solamente se la asignara a un programa, digamos que al primero que se ejecute. En ensamblador es muy facil acceder a las direcciones de memoria de la PC, solamente debes tener cuidad de no alterar el contenido de las direcciones, esto ocacionaria que se te bloqueara el sistema.

La forma de acceder a tales posiciones de memoria es por medio del direccionamiento usando el registro DS:?.

Checalo en algun libro.

Suerte.

Te recomiendo "apuntes de lenguaje ensamblador" esta en www.monografias.com, busca la palabra ensamblador.

Juan Luis
17 de Marzo del 2004
Hola.
Pero entonces ¿cómo le digo al sistema operativo (a Windows p.e.) que me asigne memoria?, y otra cosa: me parece haber leido que la estructura de un .EXE incluye la dirección inicial de CS y de SS. ¿Esto no lo debería de decidir Windows?

anonimo
17 de Marzo del 2004
Programando en entorno Windows de 32 bits, por ejemplo con MASM, tu programa siempre va a ver direcciones virtuales. El sistema operativo las convierte en direcciones lineales, y las direcciones lineales las convierte en direcciones físicas. Tienes la API de Windows para reservar memoria para tu programa, pero no tienes unas API documentadas que permitan compartir directamente un bloque de memoria física entre distintos programas. Si quieres puedes compilar y enlazar un programa para que funcione en MS-DOS real, para ello necesitas descargar de alguna página de Internet el enlazador antiguo, para que tu programa funcione en modo real. Se sabe que las funciones que necesitas para acceder directamente a memoria RAM, que supongo que es lo que te gustaría, estan ubicadas en controles *.vxd pero no existe información pública, que yo sepa, sobre cómo llamarlas y qué argumentos hay que pasarles. Por tanto, la memoria la administra en exclusiva el sistema operativo. Por eso se le llama sistema apropiativo ("preemptive" en inglés) porque centraliza los recursos físicos y no te deja acceder libremente a ellos.
Si quieres reservar memoria virtual para tu proceso utiliza la API GlobalAlloc() con la constante GMEM_FIXED como primer argumento y
el numero de bytes como segundo argumento, (en
ensamblador tienes que pasarlos en orden inverso) El valor devuelto en eax es un puntero válido para el bloque de memoria virtual. Luego puedes liberar el bloque de memoria con GlobalFree() pasandole como argumento el puntero obtenido antes.

lore
17 de Marzo del 2004
quiero saber como esta organizada la memoria en ensamblador