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