direccionamiento de memoria y pila.docx

14
LENGUAJES DE BAJO NIVEL GPO.: 3CV3 Profesor: Ing. Luis Valles | Alumno: Carlos Alberto Xola TEMA: DIRECCIONAMIENTO DE MEMORIA Y PILA

Upload: xavier-martinez-moctezuma

Post on 21-Jul-2015

124 views

Category:

Documents


1 download

TRANSCRIPT

LENGUAJES DE BAJO NIVEL

GPO.: 3CV3

TEMA:

DIRECCIONAMIENTO DE MEMORIA Y PILA

Profesor: Ing. Luis Valles | Alumno: Carlos Alberto Xolalpa Jimnez

2

Modos De Direccionamiento De La Memoria Del Programa

Los modos de direccionamiento de la memoria de programa, utilizados con las instrucciones JMP y CALL, tienen 3 formas distintas: RELATIVO, DIRECTO E INDIRECTO. Aquellas 3 formas de direccionamiento utilizan la instruccin JMP para manifestar las operaciones realizadas.

DIRECCIONAMIENTO RELATIVO DE MEMORIA DE PROGRAMA El direccionamiento relativo de memoria de programa no est disponible en los primeros microprocesadores, aunque s lo est para esta familia de microprocesadores. El trmino relativo significa relativo al apuntador de instrucciones (IP). Por ejemplo, si una instruccin JMP salta los 2 siguientes bytes de memoria, la direccin relativa al apuntador de instrucciones es un 2, el cual es sumado al apuntador de instrucciones. Esto desarrolla la direccin para la siguiente instruccin del programa.

10000 10001 10002 10003 10004

EB 02 ----

JMP

2

EN EL DIAGRAMA ANTERIOR SE MUESTRA UN EJEMPLO DE INSTRUCCIN DE SALTO RELATIVO

La instruccin JMP es una instruccin de un byte, con un desplazamiento de uno o 2 bytes (palabra) que se suman al apuntador de instrucciones. Un desplazamiento de un byte se emplea para saltos cortos, mientras que uno de 2 bytes se utiliza para saltos y llamadas de subrutinas cercanos. Ambos desplazamientos son considerados como saltos de intrasegmentos. (Un salto de intrasegmento es un salto hacia cualquier parte dentro del segmento de cdigo actual.)

3

En los microprocesadores 80386 y posteriores, el valor de desplazamiento tambin puede tener un valor de 32 bits, lo que les permite utilizar un direccionamiento relativo a cualquier localidad dentro de sus segmentos de cdigo de 4GB. Las instrucciones relativas JMP y CALL contienen un desplazamiento con signo, ya sea de 8 o de 16 bits, que permite una referencia de memoria hacia adelante o en sentido inverso (los 80386 y posteriores pueden tener un desplazamiento de 8 0 32 bits). Todos los ensambladores calculan automticamente la distancia del desplazamiento y eligen la forma de 1, 2 o 4 bytes apropiada. Si la distancia es demasiado grande para un desplazamiento de 2 bytes en los microprocesadores 8086 al 80286, algunos ensambladores utilizan el salto directo. Un desplazamiento de 8 bits (corto) tiene un intervalo de salto de entre +127 y -128 bytes desde la siguiente instruccin, mientras que un desplazamiento de 16 bits (cercano) tiene un intervalo de 32 KB. En los mP. 80386 y posteriores, un desplazamiento de 32 bits permite un intervalo de 2GB. El desplazamiento de 32 bits solo puede ser utilizado en el modo protegido.

DIRECCIONAMIENTO DIRECTO DE LA MEMORIA DE PROGRAMA

El direccionamiento directo de la memoria de programa es el modo que muchos de los primeros microprocesadores utilizaban para todos los saltos y llamadas subrutinas. El direccionamiento directo de la memoria de programa tambin se utiliza en lenguajes de alto nivel, como la instruccin GOTO y GOSUB de lenguaje BASIC. El microprocesador utiliza esta forma de direccionamiento, aunque no tan frecuentemente como el direccionamiento relativo e indirecto. Las instrucciones para direccionamiento directo de la memoria de programa almacenan la direccin junto con el cdigo de operacin. Por ejemplo, si un programa salta a la localidad de memoria 10000H para la siguiente instruccin, la direccin (10000H) se almacena en la memoria despus del cdigo de operacin.CODIGO DE OPERACIN DESPLAZAMIENTO (bajo) DESPLAZAMIENTO (alto) SEGMENTO (bajo) SEGMENTO (alto)

E

A

0

0

0

0

0

0

0

1

EN ESTE DIAGRAMA MUESTRA LA INSTRUCCIN DE SALTO DIRECTO (intersegmento) JMP Y LOS 4 BYTES NECESARIOS PARA ALMACENAR LA DIRECCION 10000H (JMP).

4

Esta instruccin de salto carga a CS con 1000H y al IP con 0000H, para saltar a la localidad de memoria 10000H de la siguiente instruccin (un salto de intersegmento es un salto a cualquier localidad de memoria dentro de todo sistema de memoria). El salto directo se conoce frecuentemente como salto lejano, ya que puede saltar a cualquier localidad de memoria para la siguiente instruccin. En el modo real, un salto lejano accede a cualquier localidad dentro del primer Megabyte de memoria, cambiando tanto a CS como a IP. En el modo protegido, el salto lejano accede a un nuevo descriptor del segmento de cdigo en la tabla de descriptores, lo que permite un salto hacia cualquier localidad de memoria en todo el rango de direcciones de 4GB como los microprocesadores 80386, al Pentium II. La nica instruccin que tambin utiliza direccionamiento directo de programa es la instruccin de llamada subrutina de intersegmento, o llamada (CALL) lejana. El nombre de una direccin de memoria (llamado etiqueta) identifica la localidad que es llamada o saltada, en lugar de la direccin numrica real. Cuando se utiliza una etiqueta con las instrucciones CALL JMP, la mayora de los ensambladores eligen la mayor forma de direccionamiento.

DIRECCIONAMIENTO INDIRECTO DE LA MEMORIA DE PROGRAMA

El microprocesador permite varias formas de direccionamiento indirecto de memoria de programa para las instrucciones JMP y CALL. En los microprocesadores 80386 y posteriores, es posible utilizar tambin un registro extendido para la direccin o direccin indirecta de un salto o llamada de subrutina relativos. La instruccin JMP EAX salta a la direccin de la localidad dada por el registro EAX. Algunas direcciones son aceptables para el salto indirecto del programa, las cuales pueden utilizar cualquier registro (AX, BX, CX, DX, SP, BP, DI o SI) de 16 bits; cualquier registro relativo ([BP], [BX], [DI] [SI]; y cualquier registro relativo con un desplazamiento. Las direcciones son:

5

DIRECCIONES

Lenguaje Ensamblador JMP AX

OPERACION Salta a la localidad del segmento de cdigo actual direccionada por el contenido de AX Salta a la localidad del segmento de cdigo actual direccionada por el contenido de CX Salta a la localidad del segmento de cdigo actual direccionada por el contenido de la localidad de memoria del segmento de datos direccionada por BX Salta a la localidad actual del segmento de cdigo actual direccionada por el contenido de la localidad de memoria del segmento de datos direccionada por DI + 2 Salta a la localidad actual del segmento de cdigo actual direccionada por el contenido de la localidad de memoria del segmento de datos direccionada por TABLE + BX Salta a la localidad actual del segmento de cdigo direccionada por el contenido de ECX

JMP CX

JMP NEAR PTR [BX]

JMP NEAR PTR [DI+2]

JMP TABLE [BX]

JMP ECX

Si un registro de 16 bits contiene la direccin de una instruccin JMP, el salto es cercano, por ejemplo si el registro BX contiene un 1000H y una instruccin JMP BX es ejecutada, el microprocesador salta a la direccin de desplazamiento 1000H en el segmento de cdigo actual. Si un registro relativo mantiene la direccin, el salto tambin es considerado como indirecto. Ejemplo, si JMP [BX] se refiere a la localidad de memoria que est dentro del segmento de datos en la direccin de desplazamiento contenida en BX. En esta direccin de desplazamiento se encuentra un nmero de 16 bits utilizado como la direccin de desplazamiento en el salto de intrasegmento. En ocasiones, a este tipo de salto se le llama: salto indirecto-indirecto doble-indirecto.

6

TABLE DW DW DW DW LOC0 LOC1 LOC2 LOC3

TABLA DE SALTOS QUE ALMACENA DIRECCIONES DE VARIOS PROGRAMAS Y LA DIRECCION EXACTA ELEGIDA SE DETERMINA POR UN INDICE ALMACENADO CON LA INSTRUCCIN DE SALTO.

Muestra una tabla de saltos almacenada que comienza en la localidad de memoria TABLE. Esta tabla de saltos es consultada por el pequeo programa que esta a continuacin.

EJEMPLO: ; USO DEL DIRECCIONAMIENTO INDIRECTO PARA UN SALTO;

0000 BB 0004 0003 FF 231A R

MOV BX, 4 JMP TABLE [BX]

; DIRECCIONA LOC2 ; SALTA A LOC2

El registro BX se carga con un 4, de modo que cuando se combina con TABLE en la instruccin JMP TABLE [BX], la direccin efectiva es el contenido del segundo elemento de la tabla de saltos y los corchetes representan el desplazamiento.

7

8

Modos De Direccionamiento De La Memoria De Pila

La memoria de pila juega un papel importante en todos los microprocesadores. Contiene temporalmente datos y almacena direcciones de retorno para procedimientos. La memoria de almacenamiento es de tipo LIFO (ultimo en entrar-primero en salir), lo que describe la forma en que datos son almacenados y extrados de la pila. Los datos son colocados en la memoria de pila con una instruccin PUSH y extrados de ella con una instruccin POP. La instruccin CALL tambin utiliza la memoria de pila para contener la direccin de retorno para procedimiento y una instruccin RET para extraer la direccin de retorno de la pila. La memoria de pila es controlada por dos registros: el apuntador de pila (SP ESP) y el registro de segmento de pila (SS). Siempre que una palabra de datos est ubicada en la pila, los 8 bits ms significativos son colocados en la localidad direccionada por SP-1. Los 8 bits menos significativos son colocados en la localidad direccionada por SP-2. El apuntador SP disminuye despus en 2, para que la siguiente palabra de datos sea almacenada en la siguiente localidad de memoria de pila disponible. El registro SP seala siempre hacia un rea de memoria ubicada dentro del segmento de pila. El registro SP se suma a SS x 10H para formar la direccin de memoria de pila en el modo real. En operacin en modo protegido, el registro SS contiene un selector que accede a un descriptor para la direccin de base del segmento de pila. Siempre que los datos son recuperados de la memoria de pila, los 8 bits menos significativos son extrados de la localidad direccionada por SP + 1. El registro SP se incrementa entonces en 2. NOTA:Para entrar a la memoria lgica del microprocesador se multiplica x 10.

En las siguientes graficas mostramos cmo funciona las instrucciones PUSH y POP y como. (a) PUSH BX coloca el contenido en BX en la pila y (b) POP CX extrae datos de la pila y los coloca en CX. Ambas instrucciones son mostradas despus de su ejecucin.

9

MEMORIAEspacio de memoria

1Arreglo de registros

2

EAX EBX ECX EDX 1 2 3 4

1

Representa el contenido

43 4

23espacio dela memoria

ESP

+

SS x 10H

MEMORIAEspacio de memoria

Arreglo de registros

1

2

EAX EBX ECX EDX 1 2 3 4

1

Representa el contenido

43 4

23espacio dela memoria

ESP

+

SS x 10H 10

La siguiente tabla contiene algunas de las instrucciones PUSH y POP disponibles para los microprocesadores (8086 y posteriores), no todas las instrucciones son utilizadas para un mismo microprocesador.

LENGUAJE ENSAMBLADOR POPF POPFD PUSHF PUSHFD PUSH AX POP BX PUSH DS PUSH 1234H POP CS PUSH WORD PTR [BX]

PUSHA POPA PUSHAD

POPAD POP EAX PUSH EDI

OPERACIN Extrae una palabra de la memoria de pila y la coloca en las banderas Extrae una palabra doble de la memoria de pila y la coloca en el registro EFLAG Copia las banderas sobre la pila Copia el registro EFLAG sobre la pila Copia AX a la pila Extrae una palabra de la pila y la coloca en BX Copia DS a la pila Copia un 1234H a la pila Instruccin Ilegal Copia una palabra de la localidad de memoria del segmento de datos direccionada por BX, en la memoria de la pila Copia las palabras contenidas en AX, CX, DX, BX, SP, BP, DI y SI en la pila Extrae datos de la pila y los coloca en SI, DI, BP, SP, BX, DX, CX y AX Copia las palabras dobles contenidas en EAX, ECX, EDX, EBX, ESP, EBP, EDI y ESI en la memoria de pila Extrae datos de la memoria de pila y los coloca en ESI, EDI, EBP, ESP, EBX, EDX, ECX y EAX Extrae datos de la memoria de pila y los coloca en EAX Copia EDI en la memoria de pila

11

Observamos que la instruccin PUSH y POP siempre almacenan o extraen palabras de datos-NUNCA BYTES- en los microprocesadores 8086 al 80286. Los 80386 y posteriores permiten la transferencia de palabras o palabras dobles desde y hacia la memoria de pila. Los datos pueden ser colocados dentro de la pila desde cualquier registro de 16 bits o de segmento; en los 80386 y posteriores tambin pueden ser colocados desde cualquier registro extendido de 32 bits. Los datos pueden ser extrados de la memoria de la pila hacia cualquier registro de 16 bits o registro de segmento, excepto CS. La razn por la que los datos no pueden ser extrados de la memoria de pila hacia CS consiste en que con ello solo de cambia una parte de la direccin de la siguiente instruccin. Las instrucciones PUSHA y POPA copian o extraen todos los registros salvo los registros de segmento, de la memoria de pila. Estas instrucciones no estn disponibles en los primeros microprocesadores 8086/8088. La instruccin inmediata PUSH tambin es nueva para los microprocesadores 80286 al Pentium.

Bibliografa:

12

GLOSARIO: MOV: Copia el contenido del operando fuente al operando destino. La fuente nunca cambia con una instruccin. Transfiere el byte o la palabra que sigue despus del cdigo de operacin hacia un registro o localidad de memoria. Ejemplos: Lenguaje Ensamblador MOV AL, BL MOV AX, BX MOV EAX, ECX MOV DS, CX Generacin de direccin Direccionamiento de registros de 8 bits Direccionamiento de registros de 16 bits Direccionamiento de registros de 32 bits Direccionamiento de registro de segmento

JMP: Salta o transfiere por un mtodo de control, es incondicional, ya que la operacin transfiere el control bajo cualquier circunstancia del programa, puede saltar en una direccin corta, cercana o lejana. Ejemplo:mov mov mov mov mov ax, @data ds, ax dx, offset mensaje ah, 09 cx, 3 21h

brinca: int dec jcxz JMP cx salto brinca

salto: mov int end 21h empieza

ah, 4ch

AX (Acumulador): Conserva el resultado temporal despus de una operacin aritmtica o lgica.

13

BX (Base): Conserva la direccin base (desplazamiento) de los datos que hay en la memoria o la direccin base de una tabla de datos referenciados por laguna instruccin. CX (Contador): Se utiliza en operaciones de repeticin de datos (iteracin), como un contador que automticamente se incrementa o decrementa de acuerdo con el tipo de instrucciones usadas. DX (Datos): Algunas operaciones de entrada-salida requieren su uso. Tambin se usan como fuente para el acceso de datos. DS (Segmento de datos): Es una seccin de memoria que contiene la mayor parte de los datos utilizados en un programa. Se le accesa en el DS con un desplazamiento o con un contenido de otros registros que tienen la direccin de desplazamiento. SS (Segmento de pila): Define la superficie de la memoria utilizada por la pila, la direccin del punto inicial de entrada a la pila, se determina por el registro apuntador de la pila. El registro BP tambin direcciona los datos que hay en el segmento de pila. ES (Segmento Extra): El ES o adicional de datos lo utilizan algunas instrucciones de cadenas. CS (Segmento de Cdigo): Es una seccin de la memoria que tiene los programas y procedimientos utilizados por los programas. El registro de segmento de cdigo define la direccin inicial de la seccin de memoria de 64 Kb que consta el CS. SP (Apuntador de Pila): Se emplea para direccionar datos en una pila de memoria LIFO (ultimo en entrar-primero en salir). Esto ocurre cuando se ejecutan las instrucciones PUSH y POP, cuando se llama CALL o se regresa (RET) de una subrutina o de un programa principal. BP (Apuntador de Base): Se usa para manipular la pila sin afectar al registro de segmento SS. DI (ndice Destino): Se usa para ciertos modos de direccionamiento indirecto. Tambin puede guardar un valor de direccionamiento indirecto y se utiliza tambin para manejar bloques de cadena en memoria. SI (ndice Fuente): Se usa igual que el DI, pero en este caso es la fuente. IP (Apuntador de Instrucciones): Se utiliza siempre para direccionar a la siguiente instruccin que va a ejecutar el microprocesador.

14