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
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