GRAFICAS EN ENSAMBLADOR

Page 1

Ing. Gerardo Nava Hernรกndez


Desarrollo y ediciรณn. Ing. Gerardo Nava Hernรกndez gerexo@hotmail.com Versiรณn 2017

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 2


Programación Gráfica en Ensamblador

Ensamblador

Ing. Gerardo Nava Hernández

Esta obra es producto del gusto de ejercer la docencia.

Primera edición Febrero 2016

Dedicatoria Para mi familia con gran admiración

[Ing. Gerardo Nava Hernández]

Página 3


Contenido 6.- Unidad I.- Descripción del funcionamiento 1.1 Funcionamiento del microprocesador 8086 1.2 Organización de memoria 1.3 Instalación y uso de las herramientas de software 1.4 Archivos generados 1.5 Cuerpo del programa 16.- Unidad II.-Introducción a la programación 2.1 Instrucciones de transferencia 2.2 Instrucción de incremento y de salto 2.3 Instrucciones de transferencia, memoria y segmentos 2.4 Subrutina y operaciones lógico-aritméticas 28.- Unidad III.- Introducción a las interrupciones 3.1 Interrupciones: fijar el cursos y despliegue en pantalla 3.2 Interrupciones: recorre la pantalla y entrada desde teclado 37.- Unidad IV.- Programación gráfica 4.1 Interrupción: modo gráfico 4.2 Dibuja pixel 4.3 Dibuja línea 4.4 Dibuja rectángulo 44.- Unidad V.- Interrupción: animación, control y sonido 5.1 Interrupción espera 5.2 Control básico 5.3 Sonido 5.3.1 Tabla de frecuencias 51.- Unidad VI.- Ejemplos de clase Bibliografía

[Ing. Gerardo Nava Hernández]

Página 4


[Ing. Gerardo Nava Hernรกndez]

Pรกgina 5


Unidad I: 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.

1.1 FUNCIONAMIENTO DEL MICROPROCESADOR 8086 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.

[Ing. Gerardo Nava Hernández]

Página 6


[Ing. Gerardo Nava Hernรกndez]

Pรกgina 7


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.

1.2 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) hasta 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.

[Ing. Gerardo Nava Hernández]

Página 8


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. 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 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 del 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 banco bajo (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 vez se dirigen datos byte (A0 ALTO) se transfiere en las líneas de buses D15-D8. 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

[Ing. Gerardo Nava Hernández]

Página 9


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 el 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. Ubicaciones de dirección FFFF0h través FFFFFH están reservados para estas 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. 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. Traducción:

[Ing. Gerardo Nava Hernández]

Página 10


1.3 INSTALACIÓN Y USO DE LAS HERRAMIENTAS DE SOFTWARE Para poder practicar estos ejercicios, te proporcionamos un sitio web en el apartado de descargas al final del libro, 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 (la descomprimimos) en c:/, 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 y para android sería en \storage\sdcard0\TASM\BIN

[Ing. Gerardo Nava Hernández]

Página 11


Montamos el emulador de S.O (esto para emular el 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 archivos y si no está

[Ing. Gerardo Nava Hernández]

Página 12


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 (ensamblado)

2.- TLINK miprograma (Enlazado)

3.- TD miprograma (Depurador)

Para ir ejecutando paso a paso el depurador oprimir F8, con F7 ejecuta el contenido de las subrutinas y F9 lo ejecuta completo.

[Ing. Gerardo Nava HernĂĄndez]

PĂĄgina 13


1.4 ARCHIVOS GENERADOS OBJ TASM

MAP

TLINK

LIST Fichero fuente

Proceso de ensamblado

Proceso de enlazado

1.5 CUERPO DEL PROGRAMA El fichero fuente 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: Las directivas son comandos que afectan al proceso de ensamblado, y no al microprocesador. Una etiqueta es una direcciรณn de memoria. Columna 2.- Operadores: Son las operaciones a realizar. Columna 3.- Operandos: Elementos necesarios para la ejecuciรณn de una operaciรณn. Columna 4.- Comentarios: Estas son ignoradas al proceso de ensamblado.

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 14


[Ing. Gerardo Nava Hernรกndez]

Pรกgina 15


Unidad II Introducciรณn a la programaciรณn 2.1 INSTRUCCIONES DE TRANSFERENCIA

Modelo de Registros

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 16


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

[Ing. Gerardo Nava Hernández]

Página 17


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 AX,0005H MOV BX,000AH XCHG 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

[Ing. Gerardo Nava Hernández]

Página 18


2.2 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

[Ing. Gerardo Nava Hernández]

Página 19


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

MOV INC MOV JMP 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,0005H AX ;INCREMENTA UNA POSICIÓN BX,AX otro AX,4C00H ; vuelta al DOS 21H

END start ; fin

[Ing. Gerardo Nava Hernández]

Página 20


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

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 CMP JE MOV INT

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

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]

[Ing. Gerardo Nava Hernández]

Página 21


2.3 INSTRUCCIONES DE TRANSFERENCIA, MEMORIA Y SEGMENTOS

EJEMPLO 3: DIRECCIONAMIENTO AL DS .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

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

[Ing. Gerardo Nava Hernández]

Página 22

Notas


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 <- H90 DS OFFSET 0010H(H11,H12,H13 Y H14) <- AX ACTIVIDAD 5: ALMACENE 10 DATOS EN LA PILA APARTIR DE LA POSICIÓN 0010H

[Ing. Gerardo Nava Hernández]

Página 23


2.4 SUBRUTINA Y OPERACIONES LÓGICO-ARITMÉTICAS

EJEMPLO 4: CALL .model tiny ; .stack ; .data ; .code ; start: begin PROC MOV MOV

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 FAR; INICIO DE PROCEDIMIENTO BEGIN CX,000AH BX,0000H

otro:

CALL IR ;LLAMADA A SUBRUTINA CMP CX,BX ;SI ES IGUAL Z=1 Y SI ES DIFERENTE Z=0 JNE otro ;BRINCA SI NO ES IGUAL Z=0 MOV AX,4C00H ; vuelta al DOS INT 21H

BEGIN

ENDP

;FIN DE PROCEDIMIENTO

IR IR

PROC INC RET ENDP

NEAR ;PRICIPIO DE PROCEIMIENTO BX ;RETORNO ;FIN DE PROCEDIMIENTO IR

END

start

;FIN DE PROGRAMA

[Ing. Gerardo Nava Hernández]

Página 24


Organización de computadoras Andrew S. Tanenbaum cuarta edición pag.117

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

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,0105H BX,0505H CX,0505H

AND AL,BL OR AH,BH XOR AX,BX TEST CH,00001111B ;EFECTUA LA OPERACION AND ;CAMBIAR EL CONTENIDO DEL REGISTRO Z=0 MOV INT

AX,4C00H ; vuelta al DOS 21H

END start ; fin

[Ing. Gerardo Nava Hernández]

Página 25


ARITMÉTICAS .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,0105H BX,0505H CX,0505H

ADD SUB MUL

AL,BL AH,BH AX

MOV INT

AX,4C00H ; vuelta al DOS 21H

END start ; fin

ACTIVIDAD 6: 11000000 XOR 10000001 GUARDAR RESULTADO EN DS:[H20] ACTIVIDAD 7: ELEVAR AL CUADRADO EL CONTENIDO DE AX Y GUARDARLO EN DS:[H20] USAR SUMAS

[Ing. Gerardo Nava Hernández]

Página 26


[Ing. Gerardo Nava Hernรกndez]

Pรกgina 27


Unidad III Introducciรณn a las Interrupciones 3.1 INTERRUPCIONES: FIJAR EL CURSOS Y DESPLIEGUE EN PANTALLA

FUNCIONES INT 10 DEL BIOS: 02H FIJAR EL CURSOR 06H RECORRE LA PANTALLA

FUNCIONES DE LA INT 21 DEL DOS 02H DESPLIEGE EN PANTALLA 09H DESPLIEGA EN PANTALLA 0AH ENTRADA DESDE TECLADO 3FH ENTRADA DESDE TECLADO 40H DESPLIEGA EN PANTALLA

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 28


EL MODO (03H) TEXTO ES DE 25 RENGLONES 80 COLUMNAS UBICACIÓN

RENGLÓN

COLUMNA

ESQUINA SUPERIOR IZQUIERDA

00

00

ESQUINA SUPERIOR DERECHA

00

79

CENTRO DE LA PANTALLA

12

39/40

ESQUINA INFERIOR IZQUIERDA

24

00

ESQUINA INFERIOR DERECHA

24

79

EJEMPLO 5: COLOCACIÓN DEL CURSOR .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: begin PROC FAR; inicio de PROCEDIMIENTO BEGIN MOV AH,02H ;PETICIÓN PARA COLOCAR EL ;CURSOR MOV BH,00 ;NÚMERO DE PÁGINA 0 MOV DH,12 ;RENGLÓN MOV DL,39 ;COLUMNA INT 10H CALL PAUSA MOV AX,4C00H ; vuelta al DOS INT 21H PAUSA

PAUSA BEGIN END

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP ;FIN DE PROCEDIMIENTO start ;FIN DE PROGRAMA

[Ing. Gerardo Nava Hernández]

Página 29

Notas


TIPOS DE VARIABLES DB (Define Byte) Reservar datos de tamaño byte (8 bits) DW (Define Word) Reservar datos de tipo palabra (16 bits) DD (Define Doubleword) Reservar datos de tipo doble palabra (32 bits) DQ (Define Quadword) Reservar datos de tipo quádruple palabra (64 bits) DT (Define Terabyte) Reservar datos de tipo terabyte (80 bits o 10 bytes)

ESCRIBE EN PANTALLA .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 TEXTO DB "HOLA MUNDO$" ; declaración de la variable texto .code ; directiva de asignación de segmento de datos start: begin BEGIN

PROC

FAR;

inicio de PROCEDIMIENTO

MOV MOV MOV MOV INT

AH,02H ;PETICIÓN PARA COLOCAR EL CURSOR BH,00 ;NÚMERO DE PÁGINA 0 DH,12 ;RENGLÓN DL,39 ;COLUMNA 10H

LEA MOV MOV MOV INT CALL MOV INT

DX,TEXTO ;CARGA DE LA DIRRECCION AX,SEG TEXTO ; SEGMENTO EN AX DS,AX ; DS:DX APUNTA AL MENSAJE AH,09H ;PETICIÓN DE DESPLIEGE 21H ;INTERRUPCIÓN PAUSA AX,4C00H ; vuelta al DOS 21H

PAUSA

PAUSA

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP

BEGIN

ENDP

;FIN DE PROCEDIMIENTO

[Ing. Gerardo Nava Hernández]

Página 30

Notas


END

start

;FIN DE PROGRAMA

ACTIVIDAD 8: ESCRIBA SU NOMBRE EN LAS 4 ESQUINAS DE LA PANTALLA

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 31


3.2 INTERRUPCIONES: RECORRE LA PANTALLA Y ENTRADA DESDE TECLADO MODO TEXTO

MODO GRÁFICO

MODO 00 - 25 RENGLONES MONO 40 COLUMNAS 320 X 200 MODO 01 - 25 RENGLONES COLOR 40 COLUMNAS 360 X 400 MODO 02 - 25 RENGLONES MONO 80 COLUMNAS 640 X 200 MODO 03 - 25 RENGLONES COLOR 80 COLUMNAS 720 X 400 MODO 07 - 25 RENGLONES MONO 40 COLUMNAS 720 X 350

MODO 04H - COLOR CGA,EGA,MCGA,VGA 320 X 200 MODO 05H - MONO CGA,EGA,MCGA,VGA 320 X 200 MODO 06H - MONO CGA,EGA,MCGA,VGA 640 X 200 MODO 0DH - COLOR EGA,VGA 320 X 200 MODO 0EH - COLOR EGA,VGA 640 X 200 MODO 0FH - MONO EGA,VGA 640 X 350 MODO 10H - COLOR EGA,VGA 640 X 480 MODO 11H - COLOR MCGA,VGA 640 X 480 MODO 12H - COLOR VGA 640 X 480 MODO 13H - COLOR MCGA,VGA 320 X 200

INT 10H DEL BIOS 00H - ESTABLECE EL MODO EN VIDEO 01H - ESTABLECE EL TAMAÑO DEL CURSOR 02H - ESTABLECE LA POSICIÓN DEL CURSOR 03H - LEE LA POSICIÓN DEL CURSOR 04H - LEE LA POSICIÓN DE LA PLUMA OPTICA 05H - SELECCIONA LA PAGINA ACTIVA 06H - RECORRE LA PANTALLA HACIA ARRIBA 07H - RECORRE LA PANTALLA HACIA ABAJO 08H - LEE CARACTER EN CURSOR

[Ing. Gerardo Nava Hernández]

Página 32


09H - DESPLIEGA CARACTER 0AH - DESPLIEGA CARACTER 0BH - ESTABLECE LA PALETA DE COLORES 0CH - ESCRIBE EL PIXEL PUNTO 0DH - LEE EL PIXEL PUNTO 0EH - ESCRIBE EN TELETIPO

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 33


EJEMPLO 6: LIMPIA PANTALLA .model tiny ; .stack ; .data ; TEXTO DB .code ; start:

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos "ESCRIBA SU NOMBRE: $" directiva de asignación de segmento de datos

begin

PROC

FAR; INICIO DE PROCEDIMIENTO BEGIN

MOV MOV MOV MOV INT

AX,0600H ; PETICION BH,07H ;ATRIBUTO NEGRO SOBRE BLANCO CX,0000H ;INICIO DX,184FH ;FINAL 10H

MOV

AH,02H

;PETICIÓN PARA COLOCAR EL

MOV MOV MOV INT

BH,00 DH,12 DL,39 10H

;NÚMERO DE PÁGINA 0 ;RENGLÓN ;COLUMNA

CURSOR

LEA DIRRECCION MOV MOV MOV INT CALL MOV INT PAUSA

PAUSA BEGIN

DX,TEXTO

;CARGA DE LA

AX,SEG TEXTO ; SEGMENTO EN AX DS,AX ; DS:DX APUNTA AL MENSAJE AH,09H ;PETICIÓN DE DESPLIEGE 21H ;INTERRUPCIÓN PAUSA AX,4C00H ; vuelta al DOS 21H

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP END

;FIN DE PROCEDIMIENTO start ;FIN DE PROGRAMA

[Ing. Gerardo Nava Hernández]

Página 34

NOTAS


ENTRADA DESDE TECLADO .model tiny ; .stack ; .data ; TEXTO DB ENT LABEL MAXIMO DB REAL DB DATOS DB .code ; start:

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos "ESCRIBA SU NOMBRE: $" BYTE 20 ? 20 DUP('') directiva de asignación de segmento de datos

begin

PROC

FAR; INICIO DE PROCEDIMIENTO BEGIN

MOV MOV MOV MOV INT

AX,0600H ; PETICIÓN BH,07H ;ATRIBUTO NEGRO SOBRE BLANCO CX,0000H ;INICIO DX,184FH ;FINAL 10H

MOV

AH,02H

;PETICIÓN PARA COLOCAR EL

MOV MOV MOV INT

BH,00 DH,12 DL,39 10H

;NÚMERO DE PÁGINA 0 ;RENGLÓN ;COLUMNA

CURSOR

LEA DIRRECCION MOV MOV MOV INT

PAUSA

PAUSA

DX,TEXTO

;CARGA DE LA

AX,SEG TEXTO ; SEGMENTO EN AX DS,AX ; DS:DX APUNTA AL mensaje AH,09H ;PETICIÓN DE DESPLIEGE 21H ;INTERRUPCIÓN

MOV LEA INT

AH,0AH DX,ENT 21H

LEA MOV INT

DX,DATOS ;CARGA DE LA DIRRECCIÓN AH,09H 21H ;INTERRUPCIÓN

CALL MOV INT

PAUSA AX,4C00H ; vuelta al DOS 21H

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP

[Ing. Gerardo Nava Hernández]

Página 35

NOTAS


BEGIN

ENDP END

;FIN DE PROCEDIMIENTO start ;FIN DE PROGRAMA

ACTIVIDAD 9: GUARDAR NOMBRE COMPLETO DESDE TECLADO MOSTRARLO EN LAS 4 ESQUINAS DE LA PANTALLA MIENTRAS EL FONDO SEA DE ALGร N COLOR

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 36


[Ing. Gerardo Nava Hernรกndez]

Pรกgina 37


Unidad IV Programación gráfica 4.1 INTERRUPCIÓN: MODO GRÁFICO EJM: EN MODO 04H PROPORCIONA 200 RENGLONES DE 320 PIXELES: 0 1 2----------------------------------------317 318 319 320

200 PIXELES

------------------------------------------------------63399 320 PIXELES PUNTO CENTRAL DEL MONITOR

(0,0)

(319,0)

APROX. (99,69)

(319,199)

(319,0)

EJEMPLO 7: [Ing. Gerardo Nava Hernández]

Página 38


PIXELES O ELEMENTOS GRÁFICOS O PELS Asi pués: cada byte representa 4 pixeles( 2 bits por pixel ) limitado a 4 colores debido a que 1 pixel usa 2 bits y las combinaciones solo son 4. 1 BIT POR PIXEL : 2 1 = 2 colores, también llamado monocromo. 2 BITS POR PIXEL : 2 2 = 4 colores, o cga . 4 BITS POR PIXEL : 2 4 = 16 colores, la cual es la mínima profundidad aceptada por el estándar vga. 8 BITS POR PIXEL : 2 8 = 256 colores, también llamado SUPERVGA.

INT 10H DEL BIOS 00H - ESTABLECE EL MODO EN VIDEO 09H - DESPLIEGA CARACTER 0AH - DESPLIEGA CARACTER 0BH - ESTABLECE LA PALETA DE COLORES 0CH - ESCRIBE EL PIXEL PUNTO MODO GRÁFICO .model tiny ; .stack ; .data ; TEXTO DB .code ; start: begin PROC MOV VIDEO MOV INT

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos "HOLA! $" directiva de asignación de segmento de datos FAR; inicio de PROCEDIMIENTO BEGIN AH,00H; PETICIÓN PARA HABILITAR MODO AL,0EH; 640 X 200 EGA, VGA 10H

MOV AH, 0BH ;ESTABLECE LA PALETA DE 16 COLORES MOV BX, 000AH ;BH=PAGE=0, BL=COLOR VERDE CLARO INT 10H ;PARA EL FONDO DE PANTALLA

[Ing. Gerardo Nava Hernández]

Página 39

NOTAS


PAUSA

PAUSA BEGIN

CALL

PAUSA

MOV MOV INT

AH,00H; REGRESAMOS AL MODO TEXTO AL,03H 10H

MOV INT

AX,4C00H ; vuelta al DOS 21H

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP ;FIN DE PROCEDIMIENTO END start ;FIN DE PROGRAMA

4.2 DIBUJA PIXEL DIBUJAR PIXEL .model tiny ; .stack ; .data ; .code ; start: begin PROC BEGIN

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

inicio de PROCEDIMIENTO

MOV

AH,00H; PETICION PARA HABILITAR MODO

MOV INT

AL,04H; 320 X 200 EGA, VGA 10H

VIDEO

MOV AH, 0BH ;ESTABLECE LA PALETA DE 16 COLORES MOV BX, 0001H ;BH=PAGE=0, BL=COLOR AZUL INT 10H ;PARA EL FONDO DE PANTALLA

MOV CX, 60 MOV DX, 100

;CX = COORD. X ;DX = COORD Y

RE: MOV AH, 0Ch ;DRAW PIXEL MOV AL, 0005H ;AL=COLOR INT 10h

[Ing. Gerardo Nava Hernández]

Página 40

NOTAS


PAUSA

PAUSA BEGIN

CALL

PAUSA

MOV MOV INT

AH,00H; REGRESAMOS AL MODO TEXTO AL,03H 10H

MOV AX,4C00H ; vuelta al DOS INT 21H PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP ;FIN DE PROCEDIMIENTO END start ;FIN DE PROGRAMA

4.3 DIBUJA UNA LINEA LINEA DE PIXELES .model tiny ; .stack ; .data ; .code ; start: begin PROC

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

INICIO DE PROCEDIMIENTO BEGIN

MOV AH,00H ;PETICIÓN PARA HABILITAR MODO VIDEO MOV AL,04H; 320 X 200 EGA, VGA INT 10H MOV AH, 0BH ;ESTABLECE LA PALETA DE 16 COLORES MOV BX, 0001H ;BH=PAGE=0, BL=COLOR AZUL INT 10H ;PARA EL FONDO DE PANTALLA MOV CX, 60 MOV DX, 100

;CX = COORD. X ;DX = COORD Y

MOV AH, 0CH MOV AL, 0005H INT 10H

;DRAW PIXEL ;AL=COLOR

RE:

INC CX CMP CX, 200 JNE RE CALL MOV MOV INT

;INCREMENTA POSICIÓN EN X ;HASTA LA POSICION 200

PAUSA AH,00H; REGRESAMOS AL MODO TEXTO AL,03H 10H

[Ing. Gerardo Nava Hernández]

Página 41

NOTAS


MOV INT PAUSA

PAUSA BEGIN

AX,4C00H ; vuelta al DOS 21H

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP END

;FIN DE PROCEDIMIENTO start ;FIN DE PROGRAMA

4.4 DIBUJA RECTÁNGULO RECTÁNGULO .model tiny ; .stack ; .data ; .code ; start: begin PROC

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 FAR; INICIO DE PROCEDIMIENTO BEGIN

MOV AH,00H ; PETICIÓN PARA HABILITAR MODO VIDEO MOV AL,04H; 320 X 200 EGA, VGA INT 10H MOV AH, 0BH ;ESTABLECE LA PALETA DE 16 COLORES MOV BX, 0001H ;BH=PAGE=0, BL=COLOR AZUL INT 10H ;PARA EL FONDO DE PANTALLA MOV CX, 60 MOV DX, 100

;CX = COORD. X ;DX = COORD Y

RE: MOV AH, 0CH MOV AL, 0005H INT 10H INC CX CMP CX, 200 JNE RE

;DRAW PIXEL ;AL=COLOR ;INCREMENTA POSICIÓN EN X ;HASTA LA POSICIÓN 200

MOV CX, 60 MOV DX, 100

;CX = COORD. X ;DX = COORD Y

MOV AH, 0CH MOV AL, 0005H INT 10H

;DRAW PIXEL ;AL=COLOR

INC DX

;INCREMENTA POSICIÓN EN X

REG:

[Ing. Gerardo Nava Hernández]

Página 42

NOTAS


CMP DX, 120 JNE REG MOV CX, 60 MOV DX, 120

;HASTA LA POSICIÓN 20 ;CX = COORD. X ;DX = COORD Y

REG1: MOV AH, 0CH MOV AL, 0005H INT 10H INC CX CMP CX, 200 JNE REG1

REG2:

PAUSA BEGIN END

;INCREMENTA POSICIÓN EN X ;HASTA LA POSICIÓN 200

MOV CX, 199 ;CX = COORD. X MOV DX, 100 ;DX = COORD Y MOV AH, 0CH ;DRAW PIXEL MOV AL, 0005H ;AL=COLOR INT 10H INC DX CMP DX, 120 JNE REG2

PAUSA

;DRAW PIXEL ;AL=COLOR

;INCREMENTA POSICIÓN EN X ;HASTA LA POSICIÓN 20

CALL

PAUSA

MOV MOV INT

AH,00H; REGRESAMOS AL MODO TEXTO AL,03H 10H

MOV INT

AX,4C00H ; vuelta al DOS 21H

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP ;FIN DE PROCEDIMIENTO start ;FIN DE PROGRAMA

ACTIVIDAD 10: DISEÑAR UN TRAPECIO

ACTIVIDAD 11: CREE UN FONDO DE BARRAS DE COLORES [Ing. Gerardo Nava Hernández]

Página 43


ANIMACIร N, CONTROL Y SONIDO

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 44


Unidad V INTERRUPCIÓN: ANIMACIÓN, CONTROL Y SONIDO 5.1 Interrupción espera INT 15H 86H: Wait LINEA DE PIXELES 1000000 -> 1 seg. 16672 (4129H) microsegundos a BIOS delay input: AH = 86h, al = dont care CX = high 16 bits of timing value DX = low 16 bits of timig value OUTPUT: delay DESTROYS: nothing (ah may be recarded as destroyed) EJEMPLO 8: ANIMACIÓN .model tiny ; .stack ; .data ; .code ; start: begin PROC

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 FAR; INICIO DE PROCEDIMIENTO BEGIN

MOV AH,00H ;PETICIÓN PARA HABILITAR MODO VIDEO MOV AL,04H; 320 X 200 EGA, VGA INT 10H MOV AH, 0BH ;ESTABLECE LA PALETA DE 16 COLORES MOV BX, 0001H ;BH=PAGE=0, BL=COLOR AZUL INT 10H ;PARA EL FONDO DE PANTALLA MOV CX, 60

;CX = COORD. X

[Ing. Gerardo Nava Hernández]

Página 45


MOV BX,CX MOV DX, 100

;DX = COORD Y

RE: MOV AH, 0CH MOV AL, 05H INT 10H

;DRAW PIXEL ;AL=COLOR

MOV CX, 00H MOV DX, 4120H MOV AH, 86H INT 15H MOV DX,100 INC BX MOV CX,BX CMP CX, 200 JNE RE CALL

PAUSA

PAUSA BEGIN

;INCREMENTA POSICIÓN EN X ;HASTA LA POSICIÓN 200

PAUSA

MOV MOV INT

AH,00H; REGRESAMOS AL MODO TEXTO AL,03H 10H

MOV INT

AX,4C00H ; vuelta al DOS 21H

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP END

;FIN DE PROCEDIMIENTO start ;FIN DE PROGRAMA

ACTIVIDAD 12: MOVER UNA FIGURA BÁSICA

[Ing. Gerardo Nava Hernández]

Página 46


5.2 CONTROL BÁSICO CONTROL CON NÚMEROS .model tiny ; .stack ; .data ; TEXTO DB .code ; start: begin PROC

directiva de modelo de programación directiva de asignación de segmento de stack directiva de asignación de segmento de datos "JUEGO $" directiva de asignación de segmento de datos FAR;

INICIO DE PROCEDIMIENTO BEGIN

MOV AH,00H ; PETICIÓN PARA HABILITAR MODO VIDEO MOV AL,04H; 320 X 200 EGA, VGA INT 10H MOV AH, 0BH ;ESTABLECE LA PALETA DE 16 COLORES MOV BX, 0001H ;BH=PAGE=0, BL=COLOR AZUL INT 10H ;PARA EL FONDO DE PANTALLA MOV CX, 60 ;CX = COORD. X MOV BX,CX MOV DX, 100 ;DX = COORD Y MOV AH, 0CH MOV AL, 05H INT 10H

;DRAW PIXEL ;AL=COLOR

RE:

LEA MOV MOV MOV INT

DX,TEXTO ;CARGA DE LA DIRRECCIÓN AX,SEG TEXTO ; SEGMENTO EN AX DS,AX ;DS:DX APUNTA AL MENSAJE AH,09H ;PETICIÓN DE DESPLIEGE 21H ;INTERRUPCIÓN

MOV AH,07H ; ALMACENA DATO SIN ECO Y MANDA DATO A AL INT 21H CMP AL,32H JE izq CMP AL,33H JE der CMP AL,35H JE sal izq:

[Ing. Gerardo Nava Hernández]

Página 47

NOTAS


CALL LIMPIA CALL SONIDO MOV CX, 50 MOV BX,CX MOV DX, 100 MOV AH, 0CH MOV AL, 05H INT 10H

;CX = COORD. X ;DX = COORD Y ;DRAW PIXEL ;AL=COLOR

JMP re der: CALL LIMPIA CALL SONIDO MOV CX, 70 MOV BX,CX MOV DX, 100

;CX = COORD. X

MOV AH, 0CH MOV AL, 05H INT 10H

;DRAW PIXEL ;AL=COLOR

;DX = COORD Y

JMP re sal: MOV MOV INT

AH,00H; REGRESAMOS AL MODO TEXTO AL,03H 10H

MOV INT

AX,4C00H ; vuelta al DOS 21H

limpia PROC NEAR MOV AH,00H; PETICIร N PARA HABILITAR MODO VIDEO MOV AL,04H; 320 X 200 EGA, VGA INT 10H MOV AH, 0BH ;ESTABLECE LA PALETA DE 16 COLORES MOV BX, 0001H ;BH=PAGE=0, BL=COLOR AZUL INT 10H ;PARA EL FONDO DE PANTALLA RET limpia ENDP SONIDO PROC NEAR MOV AL, 182 OUT 43H, AL MOV AX, 4560

; PREPARE THE SPEAKER FOR THE ; NOTE. ; FREQUENCY NUMBER (IN DECIMAL) ; FOR MIDDLE C.

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 48


OUT 42H, AL MOV AL, AH OUT 42H, AL IN AL, 61H

; OUTPUT LOW BYTE. ; OUTPUT HIGH BYTE.

; TURN ON NOTE (GET VALUE FROM ; PORT 61H). OR AL, 00000011B ; SET BITS 1 AND 0. OUT 61H, AL ; SEND NEW VALUE. MOV BX, 25 ; PAUSE FOR DURATION OF NOTE. .PAUSE1: MOV CX, 65535 .PAUSE2: DEC CX JNE .PAUSE2 DEC BX JNE .PAUSE1 IN AL, 61H ; TURN OFF NOTE (GET VALUE FROM ; PORT 61H). AND AL, 11111100B ; RESET BITS 1 AND 0. OUT 61H, AL ; SEND NEW VALUE. RET SONIDO ENDP PAUSA

PAUSA BEGIN

PROC NEAR MOV AH, 10h ; PAUSA INT 16h RET ENDP ENDP END

;FIN DE PROCEDIMIENTO start ;FIN DE PROGRAMA

5.3 SONIDO MOV AL, 182 ; PREPARE THE SPEAKER FOR THE OUT 43H, AL ; NOTE. MOV AX, 4560 ; FREQUENCY NUMBER (IN DECIMAL) ; FOR MIDDLE C. OUT 42H, AL ; OUTPUT LOW BYTE. MOV AL, AH ; OUTPUT HIGH BYTE. OUT 42H, AL IN AL, 61H ; TURN ON NOTE (GET VALUE FROM ; PORT 61H). OR AL, 00000011B ; SET BITS 1 AND 0. OUT 61H, AL ; SEND NEW VALUE. MOV BX, 25 ; PAUSE FOR DURATION OF NOTE. .PAUSE1: MOV CX, 65535 .PAUSE2: DEC CX JNE .PAUSE2 DEC BX JNE .PAUSE1 IN AL, 61H ; TURN OFF NOTE (GET VALUE FROM

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 49


AND OUT

; PORT 61H). AL, 11111100B ; RESET BITS 1 AND 0. 61H, AL ; SEND NEW VALUE.

5.3.1 Tabla de frecuencias En la siguiente tabla se muestran las frecuencias y los números de frecuencia para las tres octavas alrededor del Do central en un teclado de piano Nota C C# D D# E F F# G G# A A# B Middle C C# D D# E F F# G G# A A# B C C# D D# E F F# G G# A A# B C

[Ing. Gerardo Nava Hernández]

Frecuencia 130.81 138.59 146.83 155.56 164.81 174.61 185.00 196.00 207.65 220.00 233.08 246.94 261.63 277.18 293.66 311.13 329.63 349.23 369.99 391.00 415.30 440.00 466.16 493.88 523.25 554.37 587.33 622.25 659.26 698.46 739.99 783.99 830.61 880.00 923.33 987.77 1046.50

Frecuencia # 9121 8609 8126 7670 7239 6833 6449 6087 5746 5423 5119 4831 4560 4304 4063 3834 3619 3416 3224 3043 2873 2711 2559 2415 2280 2152 2031 1917 1809 1715 1612 1521 1436 1355 1292 1207 1140

Página 50


EJEMPLOS DE CLASE

[Ing. Gerardo Nava Hernรกndez]

Pรกgina 51


Unidad VI Ejemplos de clase

“GOKU”

El alumno se hace de una referencia con una hoja de texto, en donde ubica cada pixel que pintará con las interrupciones además lo dibuja a mano.

[Ing. Gerardo Nava Hernández]

Página 52


Ejemplo de clase “MARIO”

En este otro caso el alumno referencia la imagen a partir de una impresión

[Ing. Gerardo Nava Hernández]

Página 53


BIBLIOGRAFÍA      

http://www.ece.cmu.edu/~ece740/f11/lib/exe/fetch.php?media=wiki:8086-datasheet.pdf Intel family user´s manual october 1979 http://www.fing.edu.uy/inco/cursos/arqsis2/teorico/notas-8086.pdf http://pdf.datasheetcatalog.com/datasheets/2300/499305_DS.pdf http://matthieu.benoit.free.fr/ http://www.abreojosensamblador.net/

DESCARGAS  

https://www.dosbox.com/download.php?main=1 (Dos box) http://graficasenensamblador.net16.net/grafen.htm (TASM)

[Ing. Gerardo Nava Hernández]

Página 54


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.