Graficacion

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 49

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 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 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 Columna 2 Columna 3 Columna 4


.model tiny ; prog.
.stack
.data
.code
start:
MOV CX,0005H
MOV DX,100AH
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 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,0005H
MOV BX,100AH
MOV CX,0005H
MOV DX,100AH

MOV AX,4C00H ; vuelta al DOS


INT 21H

END start ; fin

MOV2 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,0005H
MOV BX,100AH
MOV ax,bx

MOV AX,4C00H ; vuelta al DOS


INT 21H

END start ; fin

[Profr. Gerardo Nava Hernández] Página 15


XCHG 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,0005H
MOV BX,000AH
XCHG AX,BX ; INTERCAMBIA EL CONTENIDO DE
;LOS REGISTROS

MOV AX,4C00H ; vuelta al DOS


INT 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 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,0010H
INC AX

MOV AX,4C00H ; vuelta al DOS


INT 21H

END start ; fin

[Profr. Gerardo Nava Hernández] Página 17


JMP 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

otro: MOV AX,0005H


INC AX ;INCREMENTA UNA POSICIÓN
MOV BX,AX
JMP otro

MOV AX,4C00H ; vuelta al DOS


INT 21H

END start ; fin

[Profr. Gerardo Nava Hernández] Página 18


JE 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

otro: MOV CX,0000H


CMP CX,0;SI ES IGUAL Z=1 SI ES DIFERENTE Z=0
JE otro ;BRINCA SI Z=1 SINO CONTINUA
MOV AX,4C00H ; vuelta al DOS
INT 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]

[Profr. Gerardo Nava Hernández] Página 19


INSTRUCCIONES DE TRANFERENCIA MEMORIA Y SEGMENTOS

EJEMPLO 3:

DIRECCIONAMIENTO AL DS 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,DS:[000Ah]
;MUEVE LO QUE ESTA EN DS CON OFFSET 000AH
;TOMA EL 10 EN LOW Y LUEGO EL 11 HIGH

MOV AX,4C00H ; vuelta al DOS


INT 21H

END start ; fin

[Profr. Gerardo Nava Hernández] Página 20


SI 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 AL,[si+2]
;MUEVE LO QUE ESTA EN DS CON OFFSET 0,1,2

MOV AX,4C00H ; vuelta al DOS


INT 21H
END start ; fin

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 AX,4C00H ; vuelta al DOS


INT 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

[Profr. Gerardo Nava Hernández] Página 21


SUBRUTINA Y OPERACIONES LÓGICO-ARITMÉTICAS

EJEMPLO 4:

CALL 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:
begin PROC FAR; INICIO DE PROCEDIMIENTO BEGIN
MOV CX,000AH
MOV 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 PROC NEAR ;PRICIPIO DE PROCEIMIENTO


INC BX
RET ;RETORNO
IR ENDP ;FIN DE PROCEDIMIENTO IR

END start ;FIN DE PROGRAMA

[Profr. Gerardo Nava Hernández] Página 22


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

BOOLEANAS 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,0105H
MOV BX,0505H
MOV 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 AX,4C00H ; vuelta al DOS


INT 21H

END start ; fin

[Profr. Gerardo Nava Hernández] Página 23


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

ADD AL,BL
SUB AH,BH
MUL AX

MOV AX,4C00H ; vuelta al DOS


INT 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

[Profr. Gerardo Nava Hernández] Página 24


Introducción a las
Interrupciones

MOV AX,4C00H
INT 21H

[Profr. Gerardo Nava Hernández] Página 25


INTERRUPCIONES: FIJAR EL CURSOS Y DESPLIEGE 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

[Profr. Gerardo Nava Hernández] Página 26


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 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:
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 PROC NEAR


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

[Profr. Gerardo Nava Hernández] Página 27


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 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
TEXTO DB "HOLA TESOEM $" ; declaración de la variable texto
.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

LEA DX,TEXTO ;CARGA DE LA DIRRECCION


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

PAUSA PROC NEAR


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

BEGIN ENDP ;FIN DE PROCEDIMIENTO


END start ;FIN DE PROGRAMA

ACTIVIDAD 8:

ESCRIBA SU NOMBRE EN LAS 4 ESQUINAS DE LA PANTALLA

[Profr. Gerardo Nava Hernández] Página 28


INTERRUPCIÓN: RECORRE LA PANTALLA, ENTRADA DESDE TECLADO

MODO TEXTO MODO GRÁFICO


MODO 00 - 25 RENGLONES MONO 40 MODO 04H - COLOR
COLUMNAS 320 X 200 CGA,EGA,MCGA,VGA 320 X 200

MODO 01 - 25 RENGLONES COLOR 40 MODO 05H - MONO


COLUMNAS 360 X 400 CGA,EGA,MCGA,VGA 320 X 200

MODO 02 - 25 RENGLONES MONO 80 MODO 06H - MONO


COLUMNAS 640 X 200 CGA,EGA,MCGA,VGA 640 X 200

MODO 03 - 25 RENGLONES COLOR 80 MODO 0DH - COLOR EGA,VGA 320 X


COLUMNAS 720 X 400 200

MODO 07 - 25 RENGLONES MONO 40 MODO 0EH - COLOR EGA,VGA 640 X


COLUMNAS 720 X 350 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

[Profr. Gerardo Nava Hernández] Página 29


07H - RECORRE LA PANTALLA HACIA ABAJO

08H - LEE CARACTER EN CURSOR

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

EJEMPLO 6:

LIMPIA PANTALLA 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
TEXTO DB "ESCRIBA SU NOMBRE: $"
.code ; directiva de asignación de segmento de datos
start:

begin PROC FAR; INICIO DE PROCEDIMIENTO BEGIN

MOV AX,0600H ; PETICION


MOV BH,07H ;ATRIBUTO NEGRO SOBRE
BLANCO
MOV CX,0000H ;INICIO
MOV DX,184FH ;FINAL
INT 10H

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

LEA DX,TEXTO ;CARGA DE LA


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

[Profr. Gerardo Nava Hernández] Página 30


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

BEGIN ENDP ;FIN DE PROCEDIMIENTO


END start ;FIN DE PROGRAMA

ENTRADA DESDE TECLADO 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
TEXTO DB "ESCRIBA SU NOMBRE: $"
ENT LABEL BYTE
MAXIMO DB 20
REAL DB ?
DATOS DB 20 DUP('')
.code ; directiva de asignación de segmento de datos
start:

begin PROC FAR; INICIO DE PROCEDIMIENTO BEGIN

MOV AX,0600H ; PETICIÓN


MOV BH,07H ;ATRIBUTO NEGRO SOBRE
BLANCO
MOV CX,0000H ;INICIO
MOV DX,184FH ;FINAL
INT 10H

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

LEA DX,TEXTO ;CARGA DE LA


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

MOV AH,0AH
LEA DX,ENT
INT 21H

LEA DX,DATOS ;CARGA DE LA DIRRECCIÓN


MOV AH,09H
INT 21H ;INTERRUPCIÓN

[Profr. Gerardo Nava Hernández] Página 31


CALL PAUSA
MOV AX,4C00H ; vuelta al DOS
INT 21H

PAUSA PROC NEAR


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

BEGIN ENDP ;FIN DE PROCEDIMIENTO


END 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

[Profr. Gerardo Nava Hernández] Página 32


Programación Gráfica

[Profr. Gerardo Nava Hernández] Página 33


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,0) EJEMPLO 7: (319,199)

[Profr. Gerardo Nava Hernández] Página 34


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 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
TEXTO DB "HOLA! TESOEM $"
.code ; directiva de asignación de segmento de datos
start:
begin PROC FAR; inicio de
PROCEDIMIENTO BEGIN
MOV AH,00H; PETICIÓN PARA HABILITAR MODO
VIDEO
MOV AL,0EH; 640 X 200 EGA, VGA
INT 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

CALL PAUSA

[Profr. Gerardo Nava Hernández] Página 35


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

MOV AX,4C00H ; vuelta al DOS


INT 21H

PAUSA PROC NEAR


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

DIBUJAR PIXEL 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:
begin PROC FAR; inicio de
PROCEDIMIENTO BEGIN

MOV AH,00H; PETICION 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 DX, 100 ;DX = COORD Y
RE:

MOV AH, 0Ch ;DRAW PIXEL


MOV AL, 05H ;AL=COLOR
INT 10h

CALL PAUSA

MOV AH,00H; REGRESAMOS AL MODO TEXTO


MOV AL,03H
INT 10H

[Profr. Gerardo Nava Hernández] Página 36


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

LINEA DE PIXELES 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:
begin PROC 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 DX, 100 ;DX = COORD Y
RE:

MOV AH, 0CH ;DRAW PIXEL


MOV AL, 05H ;AL=COLOR
INT 10H

INC CX ;INCREMENTA POSICIÓN EN X


CMP CX, 200 ;HASTA LA POSICION 200
JNE RE

CALL PAUSA

MOV AH,00H; REGRESAMOS AL MODO TEXTO


MOV AL,03H
INT 10H

MOV AX,4C00H ; vuelta al DOS


INT 21H

[Profr. Gerardo Nava Hernández] Página 37


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

BEGIN ENDP ;FIN DE PROCEDIMIENTO


END start ;FIN DE PROGRAMA

RECTÁNGULO 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:
begin PROC 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 DX, 100 ;DX = COORD Y
RE:
MOV AH, 0CH ;DRAW PIXEL
MOV AL, 05H ;AL=COLOR
INT 10H

INC CX ;INCREMENTA POSICIÓN EN X


CMP CX, 200 ;HASTA LA POSICIÓN 200
JNE RE

MOV CX, 60 ;CX = COORD. X


MOV DX, 100 ;DX = COORD Y
REG:

MOV AH, 0CH ;DRAW PIXEL


MOV AL, 05H ;AL=COLOR
INT 10H

INC DX ;INCREMENTA POSICIÓN EN X


CMP DX, 120 ;HASTA LA POSICIÓN 20
JNE REG

MOV CX, 60 ;CX = COORD. X

[Profr. Gerardo Nava Hernández] Página 38


MOV DX, 120 ;DX = COORD Y
REG1:
MOV AH, 0CH ;DRAW PIXEL
MOV AL, 05H ;AL=COLOR
INT 10H

INC CX ;INCREMENTA POSICIÓN EN X


CMP CX, 200 ;HASTA LA POSICIÓN 200
JNE REG1

MOV CX, 199 ;CX = COORD. X


MOV DX, 100 ;DX = COORD Y
REG2:
MOV AH, 0CH ;DRAW PIXEL
MOV AL, 05H ;AL=COLOR
INT 10H

INC DX ;INCREMENTA POSICIÓN EN X


CMP DX, 120 ;HASTA LA POSICIÓN 20
JNE REG2

CALL PAUSA

MOV AH,00H; REGRESAMOS AL MODO TEXTO


MOV AL,03H
INT 10H

MOV AX,4C00H ; vuelta al DOS


INT 21H

PAUSA PROC NEAR


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

ACTIVIDAD 10:

DISEÑAR UN TRAPECIO

ACTIVIDAD 11: CREE UN FONDO DE BARRAS DE COLORES

[Profr. Gerardo Nava Hernández] Página 39


INTERRUPCIÓN: ANIMACIÓN

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 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:
begin PROC 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
RE:

[Profr. Gerardo Nava Hernández] Página 40


MOV AH, 0CH ;DRAW PIXEL
MOV AL, 05H ;AL=COLOR
INT 10H

MOV CX, 00H


MOV DX, 4120H
MOV AH, 86H
INT 15H

MOV DX,100
INC BX
MOV CX,BX

;INCREMENTA POSICIÓN EN X
CMP CX, 200 ;HASTA LA POSICIÓN 200
JNE RE

CALL PAUSA

MOV AH,00H; REGRESAMOS AL MODO TEXTO


MOV AL,03H
INT 10H

MOV AX,4C00H ; vuelta al DOS


INT 21H

PAUSA PROC NEAR


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

BEGIN ENDP ;FIN DE PROCEDIMIENTO


END start ;FIN DE PROGRAMA

ACTIVIDAD 12:

MOVER UNA FIGURA BÁSICA

[Profr. Gerardo Nava Hernández] Página 41


CONTROL BÁSICO

CONTROL CON NÚMEROS 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
TEXTO DB "JUEGO $"
.code ; directiva de asignación de segmento de datos
start:
begin PROC 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 ;DRAW PIXEL


MOV AL, 05H ;AL=COLOR
INT 10H

RE:

LEA DX,TEXTO ;CARGA DE LA DIRRECCIÓN


MOV AX,SEG TEXTO ; SEGMENTO EN AX
MOV DS,AX ;DS:DX APUNTA AL MENSAJE
MOV AH,09H ;PETICIÓN DE DESPLIEGE
INT 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:
CALL LIMPIA

[Profr. Gerardo Nava Hernández] Página 42


CALL SONIDO

MOV CX, 50 ;CX = COORD. X


MOV BX,CX
MOV DX, 100 ;DX = COORD Y

MOV AH, 0CH ;DRAW PIXEL


MOV AL, 05H ;AL=COLOR
INT 10H

JMP re
der:

CALL LIMPIA
CALL SONIDO

MOV CX, 70 ;CX = COORD. X


MOV BX,CX
MOV DX, 100 ;DX = COORD Y

MOV AH, 0CH ;DRAW PIXEL


MOV AL, 05H ;AL=COLOR
INT 10H

JMP re

sal:
MOV AH,00H; REGRESAMOS AL MODO TEXTO
MOV AL,03H
INT 10H

MOV AX,4C00H ; vuelta al DOS


INT 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 ; Prepara la bocina
OUT 43H, AL
MOV AX, 4560 ; Frecuencia MIDDLE C.
OUT 42H, AL ; Salida parte baja acumulador.
MOV AL, AH ; Salida parte alta acumulador.
OUT 42H, AL
IN AL, 61H ; Obtención de la configuración

[Profr. Gerardo Nava Hernández] Página 43


OR AL, 00000011B
OUT 61H, AL ; Nueva configuración
MOV BX, 25 ; Pausa
.PAUSE1:
MOV CX, 65535
.PAUSE2:
DEC CX
JNE .PAUSE2
DEC BX
JNE .PAUSE1
IN AL, 61H ; Apagado
AND AL, 11111100B
OUT 61H, AL ; Nueva configuración
RET

SONIDO ENDP

PAUSA PROC NEAR


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

BEGIN ENDP ;FIN DE PROCEDIMIENTO


END start ;FIN DE PROGRAMA

SONIDO

MOV AL, 182 ; Prepara la bocina


OUT 43H, AL
MOV AX, 4560 ; Frecuencia MIDDLE C.
OUT 42H, AL ; Salida parte baja acumulador.
MOV AL, AH ; Salida parte alta acumulador.
OUT 42H, AL
IN AL, 61H ; Obtención de la configuración
OR AL, 00000011B
OUT 61H, AL ; Nueva configuración
MOV BX, 25 ; Pausa
.PAUSE1:
MOV CX, 65535
.PAUSE2:
DEC CX
JNE .PAUSE2
DEC BX
JNE .PAUSE1
IN AL, 61H ; Apagado
AND AL, 11111100B
OUT 61H, AL ; Nueva configuración

[Profr. Gerardo Nava Hernández] Página 44


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 Frecuencia Frecuencia #
C 130.81 9121
C# 138.59 8609
D 146.83 8126
D# 155.56 7670
E 164.81 7239
F 174.61 6833
F# 185.00 6449
G 196.00 6087
G# 207.65 5746
A 220.00 5423
A# 233.08 5119
B 246.94 4831
Middle C 261.63 4560
C# 277.18 4304
D 293.66 4063
D# 311.13 3834
E 329.63 3619
F 349.23 3416
F# 369.99 3224
G 391.00 3043
G# 415.30 2873
A 440.00 2711
A# 466.16 2559
B 493.88 2415
C 523.25 2280
C# 554.37 2152
D 587.33 2031
D# 622.25 1917
E 659.26 1809
F 698.46 1715
F# 739.99 1612
G 783.99 1521
G# 830.61 1436
A 880.00 1355
A# 923.33 1292
B 987.77 1207
C 1046.50 1140

[Profr. Gerardo Nava Hernández] Página 45


Ejemplos de clase

[Profr. Gerardo Nava Hernández] Página 46


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

[Profr. Gerardo Nava Hernández] Página 47


Ejemplo de clase “MARIO”

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

[Profr. Gerardo Nava Hernández] Página 48


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/

[Profr. Gerardo Nava Hernández] Página 49

También podría gustarte