1. LENGUAJE ENSAMBLADOR: DIRECCIONAMIENTO DE MEMORIA RAM.
La memoria RAM está seccionada en bytes. Por lo tanto, cada sección de la RAM,
o sea, cada byte (8 bits) puede almacenar un total de 28=256 distintos valores.
Desde el dato 00000000 hasta 11111111 o lo que es lo mismo: desde 00H hasta
FFH.
El microprocesador 8086 es un procesador de 16 bits, lo que significa que los
registros del procesador son de una capacidad de procesamiento de 16 bits. Esto
es, si deseamos almacenar en RAM el valor de un registro como el AX, será
necesario utilizar 2 bytes o lo que es lo mismo, 2 localidades de memoria.
Note que en memoria se almacenan de manera inversa los bytes.
¿Cómo se administra la memoria RAM?
Sabemos que el trabajar con lenguaje ensamblador supone conocer los registros
del microprocesador, sin embargo, es importante conocer el funcionamiento de la
memoria RAM, ya que los programas que nosotros creamos en ensamblador,
finalmente se almacena en memoria para ser ejecutados, además de eso, los
datos que han de ser o que fueron procesados también se almacenan en memoria
(esto sería, por ejemplo la equivalencia a guardar un valor en una variable).
Cuando nosotros creamos un programa en ensamblador, el MS-DOS almacena el
mismo en RAM, sin embargo, reserva 3 secciones de RAM, estas secciones se
conocen como segmentos:
ITSG. Ingeniería en sistemas computacionales.
Lenguajes de interfaz.
Ing. Alberto Valdez Sandoval.
2. El segmento de código: Guarda las instrucciones que han de ejecutarse (o sea el
cuerpo del programa).
El segmento de datos: Contiene datos, constantes y áreas de trabajo definidos por
el programa.
El segmento de pila: La pila es otro segmento de la RAM que permite, en tiempo
de ejecución de nuestro programa, almacenar temporalmente direcciones de
memoria y datos.
La manera de acceder a los segmentos (a la RAM) es por medio del
direccionamiento, es decir, el direccionamiento es indicar al procesador a que
dirección de memoria deseamos accesar para lectura o escritura de la misma.
Esto se logra gracias a los registros del microprocesador, específicamente los
registros de segmento (16 bits c/u) guardan la dirección inicial de cada segmento.
ITSG. Ingeniería en sistemas computacionales.
Lenguajes de interfaz.
Ing. Alberto Valdez Sandoval.
3. Para visualizarlo de una manera más clara debemos darnos cuenta que las
direcciones de memoria son de 5 dígitos hexadecimales, es decir, 20 bits.
Sin embargo, el microprocesador puede almacenar sólo 16 bits. ¿Cómo se
resuelve este problema de Hardware? Resulta que cada inicio de segmento de
memora termina con 0, por ejemplo, en la figura de arriba, el segmento de código
comienza en la dirección 25A40, por lo tanto, se sobreentiende que el último
dígito es cero, por lo que no hay necesidad de almacenarlo, se explica a
continuación:
Pensemos en un programa que hemos ensamblado, entonces las instrucciones
como MOV, ADD, etc. Se almacenarán en el segmento de código, es decir cada
instrucción como MOV AX,[25A4] se almacena en una dirección (inclusive una
instrucción puede requerir más de una dirección de memoria), pero se almacena
en binario.
Entonces, siguiendo el ejemplo de la figura, cuando ensamblemos el programa,
las instrucciones a ejecutar por el microprocesador se guardarán a partir de la
dirección 25A40 (en este ejemplo), pero, ¿Cuándo se ejecuta el programa, cómo
sabe la computadora donde buscarlo en la memoria para su ejecución?
Resulta que el encargado de guardar el programa en los segmentos de memoria
es el DOS, y cuando deseamos ejecutarlo, el DOS almacena en los registros de
segmento las localidades iniciales de los segmentos, de la siguiente manera:
ITSG. Ingeniería en sistemas computacionales.
Lenguajes de interfaz.
Ing. Alberto Valdez Sandoval.
4. Después de transferir las direcciones de inicio de segmento a los registros de
segmento, el DOS transfiere el control al programa mismo y es entonces cuando
se empiezan a ejecutar todas las instrucciones del mismo, una vez que se termina
de ejecutar el programa, el DOS vuelve a tomar el control de los recursos del
sistema.
Pero…En el caso del segmento de código, si el DOS coloca sólo la dirección de
inicio ¿cómo es que se ejecutan las instrucciones siguientes?
Para eso se utilizan los registros de desplazamiento, por ejemplo:
Si la dirección de inicio del segmento de código es 25A4[0] y el registro IP
contiene 412H, entonces, la siguiente instrucción a ejecutar será:
ITSG. Ingeniería en sistemas computacionales.
Lenguajes de interfaz.
Ing. Alberto Valdez Sandoval.
5. 25A40H
+ 412H
------------
25E52H
Los registros asociados con el desplazamiento son:
IP para CS
SP para SS
ITSG. Ingeniería en sistemas computacionales.
Lenguajes de interfaz.
Ing. Alberto Valdez Sandoval.