Graficacion

Programación Gráfica en Ensamblador Ensamblador Profr. Gerardo Nava Hernández Programación Gráfica en Ensamblador E

Views 259 Downloads 3 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Programación Gráfica en Ensamblador

Ensamblador

Profr. Gerardo Nava Hernández

Programación Gráfica en Ensamblador

Ensamblador Profr. Gerardo Nava Hernández

Esta obra es producto del gusto de ejercer la docencia.

Primera edición Febrero 2016

Para mi familia con admiración

[Profr. Gerardo Nava Hernández]

Página 2

ÍNDICE

4.- Descripción del funcionamiento 8.- Instalación y uso de las herramientas de software 11.- Archivos generados 12.- Introducción a la programación 24.- Introducción a las interrupciones 32.- Programación gráfica 45.- Ejemplos de clase

BIBLIOGRAFÍA

[Profr. Gerardo Nava Hernández]

Página 3

Hardware

[Profr. Gerardo Nava Hernández]

Página 4

DESCRIPCIÓN DEL FUNCIONAMIENTO

AX Registro acumulador, puede dividirse en AH y AL (8 bits cada uno). BX Registro base, puede dividirse en BH y BL. CX Registro contador, puede dividirse en CH y CL. DX Registro de datos, puede dividirse en DH y DL. SP Puntero de pila. BP Puntero base. SI Puntero índice fuente. DI Puntero índice destino.

[Profr. Gerardo Nava Hernández]

Página 5

FUNCIONAMIENTO GENERAL Las funciones internas del procesador 8086 se repartieron lógicamente en dos unidades de procesamiento. La primera es la unidad de interfaz de bus (BIU) y el segundo es la Unidad de Ejecución (UE) como se muestra en el diagrama de bloques.

Estas unidades pueden interactuar directamente, pero en su mayor parte funciona como procesadores operacionales asincrónicas separadas. La unidad de interfaz de bus proporciona las funciones relacionadas con la instrucción de ir a buscar y hacer cola (Instruction code), recuperación de operando y almacenar, además de reubicación de direcciones. Esta unidad también proporciona el control básico de bus. La superposición de la instrucción pre-fetching proporcionado por esta unidad sirve para aumentar el rendimiento del procesador mediante una mejor utilización de ancho de banda. Hasta 6 bytes del flujo de instrucciones pueden poner en cola a la espera de decodificación y ejecución. El mecanismo de la instrucción de cola permite que el flujo de BIU mantenga la memoria utilizada de manera muy eficiente. Siempre hay espacio para al menos 2 bytes en la cola. Esto reduce en gran medida '' tiempo muerto '' en el bus de memoria. La cola actúa como First-In-First-Out (FIFO), de la que la UE extrae bytes de instrucción como sea necesario. Si la cola está vacía (después de una instrucción de salto, por ejemplo), el primer byte en la cola se convierte de inmediato a disposición de la UE. La unidad de ejecución recibe instrucciones pre-inverosímiles de la cola de BIU y proporciona direcciones de operando reubicados a la BIU. Operandos de memoria se pasan a través de la BIU para su procesamiento por la UE, que pasa los resultados a la BIU para el almacenamiento.

[Profr. Gerardo Nava Hernández]

Página 6

ORGANIZACIÓN DE MEMORIA El procesador proporciona una dirección de 20 bits a la memoria que localiza el byte que se hace referencia. La memoria está organizada como una serie lineal de hasta 1 millón de bytes, se dirigió como 00000 (H) para FFFFF (H). La memoria se divide lógicamente en código, datos, datos adicionales, y los segmentos de pila de hasta 64K bytes cada uno, con cada segmento de la caída en los límites de 16 bytes.

Todas las referencias de memoria se hacen en relación con direcciones base contenidas en registros de segmento de alta velocidad. Los tipos de segmento se eligieron sobre la base de las necesidades de direccionamiento de programas. El segmento de registro de ser seleccionado se elige automáticamente de acuerdo con las reglas de la tabla anterior.

[Profr. Gerardo Nava Hernández]

Página 7

Toda la información en un solo tipo de segmento comparten los mismos atributos lógicos (por ejemplo de código o de datos). Al estructurar la memoria en áreas reubicables de características similares y seleccionando automáticamente registros de segmento, los programas son más cortos, más rápido y más estructurado. Palabra (16 bits), operandos pueden estar ubicados en pares o impares límites de dirección y por lo tanto no están obligados a incluso las fronteras como es el caso en muchos ordenadores de 16 bits. Para direcciones y datos operandos, el byte menos significativo de la palabra se almacena en la ubicación de la dirección valioso inferior y el byte más significativo en la siguiente ubicación de la dirección superior. La BIU realiza automáticamente el número apropiado de accesos a memoria, uno si la palabra es el operando en un límite incluso de bytes y dos si es en un límite de byte impar. A excepción de la pena de rendimiento, este doble acceso es transparente para el software. Esta penalización de rendimiento no se produce para recuperaciones de instrucciones, sólo operandos de palabra. Físicamente, la memoria se organiza como un banco alto (D15-D8) y un bajo banco (D7-D0) de 512K bytes de 8 bits dirigida en paralelo por líneas de dirección del procesador A19-A1. Byte de datos con direcciones incluso se transfiere en las líneas D7-D0 de buses, mientras que rara dirigido datos byte (A0 ALTO) se transfiere en las líneas de buses D15D8. El procesador proporciona dos señales de habilitación, BHE y A0, para permitir selectivamente leer o escribir en una ubicación ya sea impar de bytes, incluso la ubicación de bytes, o ambos. El flujo de instrucciones se obtiene de la memoria como las palabras y se dirige internamente por el procesador al nivel de bytes que sea necesario. En referencia a los datos de la palabra la BIU requiere uno o dos ciclos de memoria en función de si el byte inicial de la palabra está en una dirección par o impar, respectivamente. En consecuencia, en referencia a operandos de palabra rendimiento puede optimizarse mediante la localización de los datos incluso en los límites de direcciones. Esta es una técnica especialmente útil para el uso de la pila, ya que las referencias de direcciones extrañas a la pila pueden afectar negativamente el tiempo el cambio de contexto para el procesamiento de interrupción o multiplexación de tareas. Ciertos lugares de memoria están reservados para las operaciones de CPU específicos anterior. Ubicaciones de dirección FFFF0h través FFFFFH están reservados para las operaciones, incluido un salto a la rutina de carga inicial del programa. Después de RESET, la CPU siempre comenzará la ejecución en lugar FFFF0h donde el salto debe ser. Ubicaciones 00000h través 003FFH están reservados para las operaciones de interrupción. Cada uno de los 256 posibles tipos de interrupción tiene su rutina de servicio a la que apunta un elemento de puntero 4-byte que consiste en un segmento de dirección de 16 bits y una dirección de desplazamiento de 16 bits. Los elementos punteros se supone que han sido almacenados en los lugares respectivos en memoria reservada antes de la ocurrencia de interrupciones.

[Profr. Gerardo Nava Hernández]

Página 8

INSTALACIÓN Y USO DE LAS HERRAMIENTAS DE SOFTWARE Para poder practicar estos ejercicios, te proporcionamos un CD con los programas que deberás de instalar en tu equipo de computo, como lo son DosBox (emulador del sistema operativo MsDos), el editor de textos (ya que este no se agrega al instalar el emulador), TASM (Turbo Ansambler de Borlan), además si decides usar android instalarás aDosbox. Ya instalados los programas ejecutemos un programa:

Copiamos la carpeta TASM en c:/ (Está en el CD), en caso de Android la copiamos en la tarjeta local del dispositivo.

Usamos por ejemplo el Bloc de notas para transcribir nuestro programa y lo guardamos en la siguiente ruta: C:\TASM\BIN para android seria en \storage\sdcard0\TASM\BIN

[Profr. Gerardo Nava Hernández]

Página 9

Montamos el emulador de S.O

Montamos el emulador en android, aquí se monta automáticamente en la memoria local, Ya que lo hemos montado podemos trabajar como regularmente aprendimos de Windows, activamos la configuración y el teclado al oprimir el botón de propiedades del aparato.

En consola vamos a la carpeta BIN y desde ahí ensamblamos, enlazamos y ejecutamos nuestro programa Previamente debimos de haber agregado el archivo “miprograma.asm” en la carpeta TASM/BIN, esto lo hacemos antes de montar el disco duro derivado de que al montar crea una imagen de los

[Profr. Gerardo Nava Hernández]

Página 10

archivos y si no está en ese momento no lo vera después, para su ensamblado y enlazado desde la carpeta, los siguientes comandos son usados para este motivo desde la carpeta TASM/BIN: 1.- TASM miprograma.asm (ensamblador)

2.- TLINK miprograma (Enlazador)

3.- TD miprograma (Depurador)

Para ir ejecutando paso a paso el depurador oprimir F8

[Profr. Gerardo Nava Hernández]

Página 11

ARCHIVOS GENERADOS OBJ TASM

MAP

TLINK

LIST Fichero fuente

Proceso de ensamblado

Proceso de enlazado

CUERPO DEL PROGRAMA Los ficheros fuentes de ensamblador se escriben siempre pensando en cuatro columnas, en donde la primera es para etiquetas y directivas, la segunda operaciones, la tercera operandos y la cuarta los comentarios:

Columna 1 .model tiny .stack .data .code start:

Columna 2

Columna 3

MOV MOV

CX,0005H DX,100AH

Columna 4 ; prog.

END start

Columna 1.- Directivas y etiquetas Columna 2.- Operadores Columna 3.- Operandos Columna 4.- Comentarios

[Profr. Gerardo Nava Hernández]

Página 12

Introducción a la Programación

[Profr. Gerardo Nava Hernández]

Página 13

INSTRUCCIONES DE TRANSFERENCIA

Modelo de Registros

[Profr. Gerardo Nava Hernández]

Página 14

EJEMPLOS 1: MOV1 .model tiny ; .stack ; .data ; .code ; start: ;

Notas

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa

MOV MOV MOV MOV

AX,0005H BX,100AH CX,0005H DX,100AH

MOV INT

AX,4C00H ; vuelta al DOS 21H

END start ; fin

MOV2 .model tiny ; .stack ; .data ; .code ; start: ;

Notas

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa

MOV MOV MOV

AX,0005H BX,100AH ax,bx

MOV INT

AX,4C00H ; vuelta al DOS 21H

END start ; fin

[Profr. Gerardo Nava Hernández]

Página 15

XCHG .model tiny ; .stack ; .data ; .code ; start: ;

Notas

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa

MOV MOV XCHG

AX,0005H BX,000AH AX,BX ; INTERCAMBIA EL CONTENIDO DE ;LOS REGISTROS

MOV INT

AX,4C00H ; vuelta al DOS 21H

END start ; fin

ACTIVIDAD 1: REALICE EL MOVIMIENTO INMEDIATO: BH

15H

BL

0BH

INTERCAMBIA EL CONTENIDO DE BL POR BH

[Profr. Gerardo Nava Hernández]

Página 16

INSTRUCCIÓN INCREMENTO Y DE SALTO

EJEMPLO 2: INC .model tiny ; .stack ; .data ; .code ; start: ; MOV INC MOV INT

Notas

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa AX,0010H AX AX,4C00H ; vuelta al DOS 21H

END start ; fin

[Profr. Gerardo Nava Hernández]

Página 17

JMP .model tiny ; .stack ; .data ; .code ; start: ;

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa

otro:

AX,0005H AX ;INCREMENTA UNA POSICIÓN BX,AX otro

MOV INC MOV JMP MOV INT

Notas

AX,4C00H ; vuelta al DOS 21H

END start ; fin

[Profr. Gerardo Nava Hernández]

Página 18

JE

Notas

.model tiny ; .stack ; .data ; .code ; start: ;

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa

otro:

CX,0000H CX,0;SI ES IGUAL Z=1 SI ES DIFERENTE Z=0 otro ;BRINCA SI Z=1 SINO CONTINUA AX,4C00H ; vuelta al DOS 21H

MOV CMP JE MOV INT

END start ; fin

ACTIVIDAD 2: ALMACENE EN REGISTRO ACUMULADOR H10 MOVER EL DATO HACIA EL SEGMENTO DS CON OFFSET DE H20 DECREMENTE 4 VECES EL NÚMERO EN ESA POSICION

ACTIVIDAD 3: BUSCAR EL NUMERO 02H ENTRE LOS REGISTROS: DS:[20,21,22,23, Y 24]

[Profr. Gerardo Nava Hernández]

Página 19

INSTRUCCIONES DE TRANFERENCIA MEMORIA Y SEGMENTOS

EJEMPLO 3: DIRECCIONAMIENTO AL DS .model tiny ; .stack ; .data ; .code ; start: ;

Notas

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa

MOV AX,DS:[000Ah] ;MUEVE LO QUE ESTA EN DS CON OFFSET 000AH ;TOMA EL 10 EN LOW Y LUEGO EL 11 HIGH

MOV INT

AX,4C00H ; vuelta al DOS 21H

END start ; fin

[Profr. Gerardo Nava Hernández]

Página 20

SI .model tiny ; .stack ; .data ; .code ; start: ;

Notas

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos directiva de asignación de segmento de datos inicio de programa

MOV AL,[si+2] ;MUEVE LO QUE ESTA EN DS CON OFFSET 0,1,2 MOV INT END start ; fin

AX,4C00H ; vuelta al DOS 21H

BP

Notas

.model tiny ; directiva de modelo de programación .stack ; directiva de asignación de segmento de stack .data ; directiva de asignación de segmento de datos .code ; directiva de asignación de segmento de datos start: ; inicio de programa MOV AX,10 MOV SS:[BP],AX ;MUEVE A LA PILA EL DESPLAZAMIENTO EN BP MOV INT

AX,4C00H ; vuelta al DOS 21H

END start ; fin

ACTIVIDAD 4: GENERE UN DIRECCIONAMIENTO INDIRECTO AX