MODELO DE PROGRAMACIÓN DEL 8086 (2)

12
Equipo 1 Jorge Arturo Hurtado Martínez 10300469 Bruno Dávila Assad 10300222 MODELO DE PROGRAMACIÓN DEL 8086.

Transcript of MODELO DE PROGRAMACIÓN DEL 8086 (2)

Equipo 1

Jorge Arturo Hurtado Martínez 10300469

Bruno Dávila Assad 10300222

MODELO DE PROGRAMACIÓN DEL 8086.

Estructura interna de la CPU

Registros de datos o de propósito general

AX, BX, CX, DX: pueden utilizarse bien como registros de 16 bits o como dos registros separados de 8 bits (byte superior e inferior) cambiando la X por H o L según queramos referirnos a la parte alta o baja respectivamente. Por ejemplo,AX se descompone en AH (parte alta) y AL (parte

baja). Evidentemente, ¡cualquier cambio sobre AH o AL altera AX

AX = Acumulador.Es el registro principal, es utilizado en las instrucciones de multiplicación y división y en algunas instrucciones aritméticas especializadas, así como en ciertas operaciones de carácter específico como entrada, salida y traducción. Obsérvese que el 8086 es suficientemente potente para realizar las operaciones lógicas, la suma y la resta sobre cualquier registro de datos, no necesariamente el acumulador.

BX = Base.

Se usa como registro base para referenciar direcciones de memoria con direccionamiento indirecto, manteniendo la dirección de la base o comienzo de tablas o matrices. De estamanera, no es preciso indicar una posición de memoria fija, sino la número BX (así, haciendo avanzar de unidad en unidad a BX, por ejemplo, se puede ir accediendo a un gran bloque dememoria en un bucle).

CX = Contador.

Se utiliza comúnmente como contador en bucles y operaciones repetitivas de manejo de cadenas. En las instrucciones de desplazamiento y rotación se utiliza como contador de 8 bits.

 DX = Datos.

Usado en conjunción con AX en las operaciones de multiplicación y división que involucran o generan datos de 32 bits. En las de entrada y salida se emplea para especificar la dirección del puerto E/S.

Registros de segmento:  

Definen áreas de 64 Kb dentro del espacio de direcciones de 1Mb del 8086. Estas áreas pueden traslaparse total o parcialmente. No es posible acceder a una posición de memoriano definida por algún segmento: si es preciso, habrá de moverse alguno.

CS = Registro de segmento de código (code segment).Contiene la dirección del segmento con las instruccionesdel programa. Los programas de más de 64 Kb requieren cambiar CS periódicamente.

DS = Registro de segmento de datos (data segment).Segmento del área de datos del programa.

SS = Registro de segmento de pila (stack segment). Segmento de pila.

ES = Registro de segmento extra (extra segment). Segmento de ampliación para zona de datos. Es extraordinariamente útil actuando en conjunción con DS: con ambos se puede definir dos zonas de 64 Kb, tan alejadas como se desee en el espacio de direcciones, entre las que se pueden intercambiar datos

Registros punteros de pila

SP = Puntero de pila (stack pointer). Apunta al inicio de la pila. Utilizado en las instrucciones de manejo de la pila.

BP = Puntero base (base pointer).Es un puntero de base, que apunta a una zona dentro de la pila dedicada al almacenamiento de datos (variables locales y parámetros de las funciones en los programas compilados).Puntero de instrucciones o contador de programa

IP = Puntero de instrucción (instruction pointer).

Marca el desplazamiento de la instrucción en curso dentro del segmento de código. Es automáticamente modificado con la lectura de una instrucción.

Registros índices:

SI = Índice fuente (source index).

Utilizado como registro de índice en ciertos modos de direccionamiento indirecto, también se emplea para guardar unvalor de desplazamiento en operaciones de cadenas.

DI = Índice destino (destination index).

Se usa en determinados modos de direccionamiento indirecto y para almacenar un desplazamiento en operaciones con cadenas.

Registro de estado o de indicadores (flags)

• Es un registro de 16 bits de los cuales 9 son utilizadospara indicar diversas situaciones durante la ejecución de un programa.

• Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condición, que reflejan los resultados de operaciones del programa

• los bits del 8 al 10 son indicadores de control y el resto no se utilizan.

• Estos indicadores pueden ser comprobados por las instrucciones de salto condicional, lo que permite variar el flujo secuencial del programa según el resultado de las operaciones.

 NV  ("No overflow")

 OV  ("Overflow") Desbordamiento

OF

 DN  ("Down")  decremento DirecciónDF  UP  incremento

 EI    ("Enabled Interrupt") activa

 InterrupciónIF  DI  ("DisabledInterrupt")

 NG  ("Negative") negativo SignoSF  PL   ("Plus") positivo

 ZR   ("Zero") CeroZF  NZ   ("No Zero")

 AC   ("Auxiliar Carry") Acarreo auxiliar

AF  NA  ("No Auxiliar")

 PE   ("Parity Even") paridad par

 ParidadPF  PO  ("Parity Odd") paridad

 CY   ("Carry yes") AcarreoCF  NC  ("No Carry")

Indicativo sibit 0

Indicativo si bit 1Indicador de:Bit

Organización lógica de la memoria La memoria se encuentra dividida a nivel lógico en

“segmentos” de 64kB. Un segmento siempre empieza en una dirección múltiplo de

16. Para acceder a una dirección de memoria el

microprocesador calcula la dirección real @ como: @ = REG.SEG x 16 + OFFSET

Dependiendo del sistema operativo pueden existir zonas de memoria reservadas para los vectores de interrupción y otros usos.

La zona de memoria comprendida entre FFFF0 y FFFFF está reservada para las rutinas de arranque.

Normalmente, en un programa, las instrucciones deben estar en un segmento, los datos en uno o varios segmentos distintos y la pila en otro aunque hay situaciones especiales en las que este comportamiento nose cumple.

Antes de ejecutar cualquier programa los registros de segmento (CS, SS, DS y ES) deben de tomar los valores adecua dos.

Inicialmente son asignados por el sistema operativo peroES y DS no coinciden con ningún segmento de datos sino con el PSP. ES y DS deben ser asignados por el programador y SS puede ser reasignado.

En un instante dado el 8086 sólo es capaz de direccionar4x64 kB (cada segmento tiene un tamaño máximo de 64 kB) del megabyte de memoria total. Para acceder a otras posiciones d e memoria es necesario reasignar los registros de segmento a los nuevos segmentos a utilizar.

Hay programas en los que se definen varios segmentos coninstrucciones y/o varios segmentos de datos e inclusive varios segmentos de pila. En este caso debe ser el

propio programa el que se encargue de la modificación delos valores de los distintos registros de segmento.

Espacio de direcciones lógicas

La memoria de un sistema basado en 8086 está organizada como 220 posiciones de memoria (20 líneas de direcciones) de 8 bits cada una.

Dependiendo del registro que interviene en la instrucción el acceso se puede realizar a un byte o a dos bytes (una palabra).

Acceso a memoria (modo real)

Hardware: 20 líneas de dirección (A19-A0) Software: 32 bits (16 bits de segmento y 16 de offset)

Modos de direccionamiento del 8086Pueden distinguirse 7 tipos diferentes:

Inmediato Por registro Directo Indirecto Relativo Indexado Implícito

Los modos de direccionamiento directo e indirecto consisten en “punteros” a memoria.

Direccionamiento inmediato

El operando fuente siempre es un valor y el destino un registro.

Direccionamiento por registro

Ambos operandos son siempre registros.

Direccionamiento directo

El offset de la posición de memoria a la que se quiere acceder se especifica en la instrucción. Por defecto, el segmento lo toma del valor existente en el registro DS.

Direccionamiento indirecto por registro

La dirección efectiva del operando está contenida en uno de los registros BX, BP, SI o DI.

Direccionamiento relativo a base

La dirección efectiva se obtiene sumando un desplazamiento alregistro BX o al BP.

Direccionamiento indexado

La dirección efectiva se calcula sumando un desplazamiento alcontenido de SI o DI.

Direccionamiento indexado a base

La dirección efectiva se obtiene sumando BX o BP con SI o DI y/o un offset directo.

Direccionamiento relativo

Las instrucciones que utilizan este modo, especifican el operando como un número de 8 bit con signo (i.e., de -128 a 127), que se suma al puntero de instrucciones IP. La función de estas instrucciones es la de algún tipo de transferencia de control.

Direccionamiento implícito

No es necesario indicar el operando. Éste está indicado de forma implícita.

Notas generales Registros de segmento por defecto en direccionamiento

indirecto, relativo e indexado:SI DI BX -> DSBP -> SS

Uso forzado de otro segmento: Basta con poner delante dela dirección a usar el registro de segmento deseado.

Si en la instrucción no aparece ningún registro que pueda indicar si el tamaño del elemento que se debe operar es una posición de memoria (byte), 2 posiciones (word) o 4 posiciones (dword), es necesario especificarlo añadiendo el tamaño y la partícula ptr.