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