26
LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 9-1 PRÁCTICA 9 USO DE MACROS, EMPLEO DE ARCHIVOS DE CONFIGURACIÓN E IMPLEMENTACIÓN DE ATRIBUTOS DE COLOR DE VÍDEO 1. INTRODUCCIÓN Esta práctica ayudará a familiarizarse con el uso de macros, el empleo de archivos de configuración, la implementación de diferentes atributos de color en el modo alfanumérico de video. Presenta las funciones de DOS en forma de macros. Rutinas que acceden de modo directo a la RAM de video. 2 OBJETIVOS 2.1 El alumno aprenderá a usar la directiva INCLUDE, que permite que un archivo con datos, rutinas o macros sea procesado por TASM junto con el archivo que contiene el programa. 2.2 Aprenderá a usar archivos que contengan parámetros de operación de un programa, que éste usa en el momento de su ejecución. 2.3 Aprenderá a generar y ensamblar algunos macros relacionados con la interrupción 21h, para llamar a DOS. 3 DESARROLLO 3.1 Capturar, sin ensamblar, el siguiente módulo con el nombre MACDOS.ASM. %NOLIST IDEAL ; Subconjunto de macros de funciones de DOS (modo IDEAL) ;LLDOS LLAMA CUALQUIER FUNCIÓN DE DOS ; ;Entrada: NumeroFuncion = número de función de DOS ;Salida: Depende de la función específica ;Registros: Depende de la función específica

practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-1

PRÁCTICA 9

USO DE MACROS, EMPLEO DE ARCHIVOS DE CONFIGURACIÓN E IMPLEMENTACIÓN DE ATRIBUTOS DE COLOR DE VÍDEO

1. INTRODUCCIÓN

Esta práctica ayudará a familiarizarse con el uso de macros, el empleo de archivos de configuración, la implementación de diferentes atributos de color en el modo alfanumérico de video. Presenta las funciones de DOS en forma de macros. Rutinas que acceden de modo directo a la RAM de video.

2 OBJETIVOS

2.1 El alumno aprenderá a usar la directiva INCLUDE, que permite que un archivo con datos, rutinas o macros sea procesado por TASM junto con el archivo que contiene el programa.

2.2 Aprenderá a usar archivos que contengan parámetros de operación de un programa, que éste usa en el momento de su ejecución.

2.3 Aprenderá a generar y ensamblar algunos macros relacionados con la interrupción 21h, para llamar a DOS.

3 DESARROLLO

3.1 Capturar, sin ensamblar, el siguiente módulo con el nombre MACDOS.ASM. %NOLIST

IDEAL ; Subconjunto de macros de funciones de DOS (modo IDEAL) ;LLDOS LLAMA CUALQUIER FUNCIÓN DE DOS ; ;Entrada: NumeroFuncion = número de función de DOS ;Salida: Depende de la función específica ;Registros: Depende de la función específica

Page 2: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-2

MACRO LLDOS NumeroFuncion mov ah,NumeroFuncion ;Asigna número de función in 21h ;Llama a DOS ENDM LLDOS ;D_TraeCar TRAE CARÁCTER DEL TECLADO CON ECO ESPERA (01h) ; ;Entrada: Ninguna ;Salida: AL = siguiente carácter de la entrada estándar ;Registros: AX MACRO D_TraeCar mov ah,1 ;Asigna número de función int 21h ENDM D_TraeCar MACRO D_SacaCar

mov ah,2 int 21h

ENDM D_SacaCar MACRO D_ImprCar

mov ah,5 int 21h

ENDM D_ImprCar MACRO D_TraeCarC

mov ah,7 int 21h

ENDM D_TareCarC

;D_SacaCar ESCRIBE UN CARÁCTER A LA SALIDA ESTÁNDAR (02h) ; ;Entrada: DL = ASCII del carácter (0...225) a sacar ;Salida: Ninguna ;Registros: AH

;D_ImprCar ENVÍA CARÁCTER A DISPOSITIVO DE LISTADOS (05h) ; ;Entrada: DL = ASCII del carácter (0...225) ;Salida: Ninguna ;Registros: AH

;D_TraeCarC TRAE CARÁCTER SIN FILTRAJE Y SIN ECO (07h) ; ;Entrada: Ninguna ;Salida: AL = siguiente carácter de la entrada estándar ;Registros: AX

;D_TraeCarSE TRAE CARÁCTER FILTRADO SIN ECO (08h) ; ;Entrada: Ninguna ;Salida: AL = siguiente carácter de la entrada estándar ;Registros: AX

Page 3: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-3

MACRO D_TraeCarSE mov ah,8 int 21h

ENDM D_TraeCaeSE MACRO D_SacaCadena cadena

mov ah,9 mov dx,offset cadena int 21h

ENDM D_SacaCadena MACRO D_EsperaTecla

mov ah,0Bh int 21h or al,al ;pone / limpia ZF

ENDM D_EsperaTecla MACRO D_FijaDrive

mov ah,0Eh int 21h

ENDM D_FijaDrive MACRO D_TraeDrive

mov ah,19h int 19h

ENDM D_TraeDrive

;D_SacaCadena ESCRIBE CADENA ASCII A LA SALIDA ESTÁNDAR (09h) ; ;Entrada: cadena = etiqueta de variable ASCII ;Salida: Ninguna ;Registros: AH, DX

;D_EsperaTecla VERIFICA SI UNA TECLA OPRIMIDA ESTÁ ESPERANDO (0Bh) ; ;Entrada: Ninguna ;Salida: ZF = 0 si un carácter está esperando, ZF = 1, si no ;Registros: AX

;D_FijaDrive CAMBIA EL DRIVE ACTUAL (0Eh) ; ;Entrada: DL = número de drive (0 = A:, 1 = B:, 2 = C:, etc.) ;Salida: AL = número de drives disponibles ;Registros: AX

;D_TraeDrive TRAE NÚMERO DE DRIVE ACTUAL (19h) ; ;Entrada: Ninguna ;Salida: AL = número de drive (0 = A:, 1 = B:, 2 = C:, etc.) ;Registros: AX

Page 4: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-4

MACRO D_FijaDTA nuevoDTA

mov ah,1Ah mov dx,offset nuevoDTA int 21h

ENDM D_FijaDTA MACRO D_FijaVector numero,direccion

push ds ;salva registro DS actual mov ax,SEG dirección ;asigna el segmento de la direc- mov ds,ax ;ción de servicio a DS mov dx,offset dirección ;asigna el sesgo de la misma a DX mov ah,25h mov al,numero ;pone número de interrupción en AL int 21h pop ds ;repone DS

ENDM D_FijaVector MACRO D_TraeDTA

mov ah,2Fh int 21h

ENDM D_TraeDTA MACRO D_TSR codigo,parrafos

mov ah,31h mov al,codigo mov dx,parrafos ;memoria, párrafo = 16 bytes int 21h

ENDM D_TSR

;D_FijaDTA DEFINE UNA NUEVA DIRECCIÓN PARA DTA (1Ah) ; ;Entrada: nuevoDTA = variable en DS para DTA (43 bytes mínimo) ;Salida: Ninguna ;Registros: DX

;D_FijaVector PONE UN VECTOR DE INTERRUPCIONES (25H) ; ;Entrada: numero = número de interrupciones (0-55) ; dirección = etiqueta donde está la rutina de servicio ;Salida: Ninguna ;Registros: AX, DX

;D_TraeDTA TRAE DIRECCIÓN DE DTA (ÁREA DE TRANSFERENCIAL) (2Fh) ; ;Entrada; ninguna ;Salida: ES:BX apunta a DTA actual ;Registros: ES, AX, BX

;D_TSR TERMINAR Y PERMANECER RESIDENTE (31h) ; ;Entrada: codigo = clave para la función ; parrafos = cantidad de memoria reservada ;Salida: ninguna ;Registros: AX, DX

Page 5: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-5

MACRO D_TraeVector numero

mov al,numero ;asigna número de interrupción a AL mov ah,35h int 21h

ENDM D_TraeVector MACRO D_CamDir NombreDir

mov ah,3Bh mov dx,offset NombreDir ;apunta a cadena con DS:DX int 21h

ENDM D_CamDir MACRO D_CreaArch NombreArch

mov ah,3Ch mov dx,offset NombreArch ;apunta a nombre con DS:DX int 21h

ENDM D_CreaArch MACRO D_AbreArch NombreArch

mov ah,3Dh mov al,02 ;abre para lectura/escritura mov dx,offset NombreArch ;apunta a cadena ASCIIZ int 21h

ENDM D_AbreArch

;D_TraeVector OBTIENE EL VECTOR DE INTERRUPCIÓN (35h) ; ;Entrada: numero = número de interrupción ;Salida: ES:BX = segmento:offset de rutina de servicio ;Registros: AX, BX, ES

;D_CamDir CAMBIA DIRECTORIO ACTUAL (3Bh) ; ;Entrada: NombreDir = etiqueta de cadena ASCIIZ en segmento DS ;Salida: CF = 0: el cambio se realizó bien CF = 1: el cambio no se realizó (AX = código de falla) ;Registros: AX, DX

;D_CreaArch CREA UN NUEVO ARCHIVO (3Ch) ; ;Entrada: NombreArch = etiqueta de cadena ASCIIZ en segmento DS ; CX = atributo (00 = normal, 01 = sólo lectura, 02 = oculto) ;Salida: CF 0: archivo fue creado, AX = handle para siguientes accesos ;Registros: AX, DX

;D_AbreArch ABRE UN ARCHIVO PARA LEER/ESCRIBIR (3Dh) ; ;Entrada: NombreArch = etiqueta de cadena ASCIIZ en segmento DS ;Salida: CF = 0: archivo fue abierto, AX = handle para siguientes accesos ; CF = 1: falló en abrirlo, AX = código de errores ;Registros: AX, DX

Page 6: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-6

MACRO D_CierraArch

mov ah,3Eh int 21H

ENDM D_CierraArch MACRO D_LeeArch sector

mov ah,3Fh mov dx,offset sector ;apunta al buffer de destino int 21h

ENDM D_LeeArch MACRO D_EscribeArch sector

mov ah,40h mov dx,offset sector int 21h

ENDM D_EscribeArch MACRO D_BorrarArch cadena

mov ah,41h mov dx,offset cadena int 21h

ENDM D_BorrarArch

;D_CierraArch CIERRA UN ARCHIVO QUE ESTABA ABIERTO (3Eh) ; ;Entrada: BX = handle que DOS asignó al crear/abrir el archivo ;Salida: CF = 0: archivo fue cerrado CF = 1: archivo no cerrado, AX = código de error ;Registros: AX

;D_LeeArch LEE UN ARCHIVO O UN DISPOSITIVO (3Fh) ; ;Entrada: BX = handle dado por DOS al crear/abrir el archivo ; CX = número de bytes que se quieren leer ; sector = etiqueta de buffer de destino en segmentos DS ;Salida: CF = 0: lectura bien, AX = número de bytes leídos ; CF = 1: no se pudo leer, AX = código de error ;Registros: AX, DX

;D_EscribeArch ESCRIBE UN ARCHIVO O DISPOSITIVO (40h) ; ;Entrada: BX = handle dado por DOS al crear/abrir el archivo ; CX = número de bytes que se quieren escribir ; sector = etiqueta del buffer fuente en segmento de datos ;Salida: CF = 0: escritura bien, AX = número de escritos (0 = disco lleno) ; CF = 1: no se pudo escribir, AX = código de error ;Registros: AX, DX

;D_BorrarArch BORRA UN ARCHIVO ESPECIFICADO (41h) ; ;Entrada: cadena = variable ASCIIZ sin condiciones ;Salida: CF = 0: archivo borrado ; CF = 1: error AX = código ;Registros: AX, DX

Page 7: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-7

MACRO D_Busca

mov ah,42h xor al,al ;busca posición absoluta int 21h

ENDM D_Busca MACRO D_Atributos

mov ah,43h int 21h

ENDM D_Atributos MACRO D_TraeDir cadena

mov ah,47h xor dl,dl ;O para drive activo mov si,offset cadena ;apunta a variable con DS:SI int 21h

ENDM D_TareDir MACRO D_TomaMem parrafos

mov ah,48h mov bx,parrafos ;lo solicitado

ENDM D_TomaMem

;D_Busca SE POSICIONA PARA SIGUIENTE LECTURA/ESCRITURA (42h) ; ;Entrada: BX = handle del archivo dado por DOS al crearlo/abrirlo ; CX = parte alta del sesgo de 32 bits del byte ; DX = parte baja del sesgo de 32 bits del byte ;Salida: CF = 0: búsqueda bien, DX = parte alta, AX = parte baja del sesgo ; CF = 1: no se pudo, AX = código de error ;Registros: AX

;D_Atributos OBTIENE O CAMBIA LOS ATRIBUTOS DE UN ARCHIVO (43h) ; ;Entrada: AL = 00 (obtiene atributos), AL = 01 (fija atributos) ; CX = nuevo atributo (sólo lectura, esconder y sistema) ; DS:DX = apuntador a cadena ASCIIZ de la especificación ;Salida: CF = 0: búsqueda bien, CX = byte de archivo ; CF = 1 no se pudo, AX = código de error ;Registros: AX

;D_TraeDir OBTIENE NOMBRE DEL SUBDIRECTORIO ACTUAL (47h) ; ;Entrada: cadena = dirección de la variable (64 bytes mínimo) ;Salida: nombre del subdirectorio en ASCIIZ puesto en cadena ; CF = 1: no se pudo escribir, AX = código de error ;Registros: AX, DL, SI

;D_TomaMem ASIGNA MEMORIA (48h) ; ;Entrada: parrafos = número de párrafos solicitados ;Salida: CF = 0: se obtuvo, AX = segmento del bloque dado ; CF = 1: error, AX = código de error, BX = largo del bloque ;Registros: AX, BX

Page 8: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-8

MACRO D_SueltaMem segmento

push es ;salva ES mov ax,segmento ;trae segmento mov es,ax ;lo pone en ES mov ah,49h int 21h

ENDM D_SueltaMem MACRO D_EXEC codigo

mov ah,4Bh mov al,codigo ;programa u overlay int 21h

ENDM D_EXEC MACRO D_Termina ClaveFin

mov ah,4Ch mov al,[ClaveFin] ;pone código de error int 221h

ENDM D_Termina MACRO D_Busca1er cadena,atributo

mov ah,4Eh

;D_SueltaMem REGRESA A DOS UN BLOQUE DE MEMORIA (49h) ; ;Entrada: segmento = segmento del bloque a liberar ;Salida: CF = 0: operación correcta ; CF = 1: error, AX = código de error ;Registros: AX

;D_EXEC EJECUTAR UN PROGRAMA (4Bh) ; ;Entrada: codigo (0 = cargar y ejecutar, 3 = cargar overlay) ; ES:BX apunta a bloque de parámetros ; DS:DX apunta a especificaciones del programa ;Salida: CF = 0: todo bien (destruye los registros) ; CF = 1: error, AX = código de error ;Registros: prácticamente todos

,D_Termina TERMINA PROGRAMA CON CÓDIGO DE SALIDA (4Ch) ; ;Entrada: ClaveFin = variable tipo byte con código de error ;Salida: ninguna: regresa a DOS ;Registros: ninguno

;D_Busca1er ENCUENTRA PRIMER ARCHIVO QUE CONCUERDE (4Eh) ; ;Entrada: cadena = variable ASCIIZ para archivo con / sin comodines ; atributo = tipo de archivos buscados ;Salida: CF = 0: sí hallo, llena DTA ; CF = 1: no hallo, AX = código ;Registros: CX, AX, DX

Page 9: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-9

mov cx,atributo mov dx,offset cadena ;apunta especificación de archivo int 21h

ENDM D_Busca1er MACRO D_BuscaDemas

mov ah,4Fh int 21h

ENDM D_BuscaDemas MACRO D_CambiaNom cad1,cad2

mov ah,56h ;drive debe ser el mismo mov dx,offset cad1 ;apunta a especificación actual mov di,es:offset cad2 ;apunta a especificación nueva int 21h

ENDM D_CambiaNom

;D_BuscaDemas ENCUENTRA DEMÁS ARCHIVOS QUE CONCUERDEN (4Fh) ; ;Entrada: DTA debe tener la información de búsqueda anterior ;Salida: CF = 0: halló otro, renueva DTA ; CF = 1: error, AX = código ;Registros: AX

;D_CambiaNom RENOMBRA UN ARCHIVO O LO MUEVE A OTRO DIRECTORIO (56h) ; ;Entrada: cad1 = cadena ASCIIZ de nombre actual, sin comodines, en DS ; cad2 = cadena ASCIIZ de nombre nuevo, sin comodines, en ES ;Salida: CF = 0: cambio bien ; CF = 1: error, AX = código de error ;Registros: AX

;D_Tiempo OBTIENE O CAMBIA FECHA Y HORA DE UN ARCHIVO (57h) ; ;Entrada: BX = handle del archivo dado por DOS al crearlo/abrirlo ; CX = hora (si se cambia) DX = fecha (si se cambia) ; AL = 00 (se obtiene fecha y hora), AL = 01 (se cambia) ;Salida: CF = 0: búsqueda bien, DX = fecha, CX = hora (si se obtuvo) ; CF = 1: no se pudo, AX = código de error ; ; Codificación para la hora: ; FEDCBA98 76543210 ; xxxxx........ horas (0-23) ; x xxx..... minutos (0-59) ; .................. .....xxxxx pares de segundos (0-29) ; ; Codificación para la fecha: ; FEDCBA98 76543210 ; xxxxx........ año (1995) ; ,,,,,,,,,,,,,,,,,x xxx...... meses (1-12) ; .................. .....xxxxx días (1-31) ;Registros: AX

Page 10: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-10

MACRO D_Tiempo mov ah,57h xor al,al ;busca posición absoluta int 21h

ENDM D_Tiempo %LIST

3.2 Capturar los siguientes módulos en VIDEO.ASM. %TITLE “RUTINAS DE SALIDA A PANTALLA DE VIDEO MAPEADO A MEMORIA” ; Usar siempre IniciaPan antes de usar estas rutinas

IDEAL DOSSEG MODEL small

FilaMax EQU 25 ;número máximo de filas exhibidas Colmax EQU 80 ;número máximo de columnas exhibidas BaseMono EQU 0b000h ;dirección de segmento de RAM para mono BaseNormal EQU 0b800h ;para CGA y VGA ; Byte de atributo y máscaras para el AND RECORD ByteAtrib Dest:1,Fondo:3,Brillo:1,Frente:3 mascDest EQU MASK Dest ;máscara para destello mascFondo EQU MASK Fondo ;máscara para color de fondo mascBrillo EQU MASK Brillo ;máscara para intensidad mascFrente EQU MASK Frente ;máscara para color de frente

DATASEG

Atributo ByteAtrib <0,0,7> ;atributo por omisión BaseVid DW BaseNormal ;dirección de RAM de video Resta DW ? Restar DW ? ; FilaPan: arreglo de sesgos (desde BaseVid) en RAM de video BytesPorFila =ColMax*2 Fila = 0 LABEL FilaPan Word REPT FilaMax DW (Fila*BytesPorFila)

Fila =Fila+1 ENDM

Page 11: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-11

CODESEG PUBLIC FijaFondo, FijaFrente, PoneBrillo, QuitaBrillo, PoneDest PUBLIC QuitaDest, LeeAtributo, PoneAtributo, IniciaPan, PintaCar PUBLIC PanIrXY, PanLeeXY, PanPoneCar, PanPoneCad, PanLimpRect PUBLIC Coor_xy, RectanDoble, RectanSenci PROC PoneDirVid

Mov es,[BaseVid] ;ES = dirección de segmento de video Xor bh,bh ;BH = 0 Mov bl,dh ;BL = fila Sh bx,1 ;Multiplica fila por 2 Mov di,[FilaPan + bx] ;DI = dirección para buffer de fila Push ax Mov ah,15 ;trae pagina activa en BH Int 10h Xor bl,bl ;pagina * 4096 Shl bx,1 Shl bx,1 Shl bx,1 Sh bx,1 Add di,bx Pop ax Xor dh,dh ;Columna a palabra de 16 bits Shl dx,1 ;Multiplica columna por 2 Add di,dx ;Suma sesgo de columna al de fila ret

ENDE PoneDirVid PROC PanIrXY

Push ax ;salva registros usados Push bx Mov ah,15 ;Pone numero de pagina en BH Int 10h ;usando el BIOS Mov ah,2 ;Función del BIOS para fijar Int 10h ;el cursor Pop bx ;recupera registros Pop ax ret

;PoneDirVid Prepara direccionamiento a RAM de video ; ;Entrada: DH = Fila (la línea superior es 0) ; DL = Columna (extremo izquierda es 0) ;Salida: ES:DI = Direcc de RAM de video

Nota: DH y DL no son verificados ;Registros: BX,DX,DI,ES Rutina privada para PanPoneCar,PanPoneCad

;PanIrXY Fija la posición del cursor ; ;Entrada: DH = Fila ( 0, la de arriba) ; DL = Columna (0, la primera) ;Salida: El cursor se reposiciona en la pagina actual ;Registros: Ninguno

Page 12: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-12

ENDE PanIrXY PROC PanLeeXY

Push ax ;salva lo que usa Push bx Push cx Mov ah,15 ;Trae pagina de video a BH Int 10h ;con servicio a video del BIOS Mov ah,3 ;función del BIOS para leer Int 10h ;la posición del cursor Pop cx ;repone todo Pop bx Pop ax ret

ENDP PanLeeXY PROC PanPoneCar

Push es ;salva registro de segmento ES Call PoneDirVid ;prepara ES:DI Mov ah,[atributo] ;atributo en AH Stosw ;exhibe atributo y carácter pop es ;recobra ES ret

ENDE PanPoneCar PROC PanPoneCad

Push es ;salva ES Call PoneDirVid ;prepara ES:DI Mov ah,[atributo] ;atributo en AH cld

;PanLeeXY Obtiene la posición del cursor ; ;Entrada: Ninguna ;Salida: DH = Fila (24, la inferior) ; DL = Columna (79, la última) ;Registros: DX

;PanPoneCar Coloca un carácter en la pantalla ; ;Entrada: AL = ASCII del carácter a desplegar ; DH = Fila, DL = Columna ;Salida: Carácter en AL es exhibido en la pantalla ;Registros: AX,BX,DX,DI no revisa a DH ni a DL

;PanPoneCad Coloca una cadena en la pantalla ; ;Entrada: CX = Numero de caracteres a escribir ; DH = Fila, DL = Columna (no checa valores) ; DS:SI = direccion de la cadena ;Salida: Exhibe cadena en la pantalla ;Registros: AX,BX,CX,DX,DI,SI

Page 13: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-13

@@10: Lodsb ;pone siguiente carácter en AL Stosw ;exhibe atributo y carácter loop @@10 ;ajusta contador CX pop es ;repone ret

ENDE PanPoneCad PROC PanLimpRect

Push bx Mov ah,6 ;función del BIOS para enrollar Mov al,0 ;que limpie la ventana Mov bh,[atributo] ;atributo a usar en BH Int 10h ;usa servicio del BIOS Pop bx ret

ENDP PanLimpRect PROC FijaFondo IF Fondo GT 0

push cx mov cl,Fondo ;entonces corre bits en la shl al,al ;posición para hacer el OR pop cx ;en el byte de atributo

ENDIF and al,mascFondo ;aísla bits en AL and [atributo], NOT mascFondo ;bits de fondo en cero or [atributo],al ;pone color de fondo en atributo ret

ENDP FijaFondo PROC FijaFrente IF Fondo GT 0

;FijaFondo DEFINE EL COLOR DE FONDO A USAR ; ;Entrada: AL = color de fondo ;Salida: Fija color de fondo para PanPoneCar y PanPoneCad ;Registros: AL

;FijaFrente DEFINE EL COLOR DE FRENTE A USAR ; ;Entrada: AL = color de frente ;Salida: Fija color de frente para PanPoneCar y PanPoneCad ;Registros: AL

;PanLimpRect Limpia área rectangular en la pantalla ;---------------------------------------------------------------------- ;Entrada: CH,CL = fila,columna de esquina superior izquierda ; DH,DL = fila,columna de esquina inferior derecha ;Salida: Se limpia el rectángulo definido ;Registros: AX,BH

Page 14: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-14

push cx mov cl,frente ;entonces corre bits en la shl al,cl ;posición para hacer el OR pop cx ;en el byte de atributo

ENDIF and al,mascFrente ;aísla bits en AL and [atributo], NOT mascFrente ;bits de fondo en cero or [atributo],al ;pone color de fondo en atributo

ENDP FijaFrente PROC PoneBrillo

or [atributo],mascBrillo ret

ENDP PoneBrillo PROC QuitaBrillo

and [atributo], NOT mascBrillo ret

ENDP QuitaBrillo PROC PoneDest

or [atributo],mascDest ret

ENDP PoneDest PROC QuitaDest

and [atributo], NOT mascDest ret

ENDP QuitaDest PROC LeeAtributo

mov dl,[atributo] ret

ENDP LeeAtributo

;PoneBrillo PONE EN 1 EL BIT DE INTENSIDAD ;QuitaBrillo PONE EN 0 EL BIT DE INTENSIDAD ;PoneDest PONE EN 1 EL BIT DE PARPADEO ;QuitaDest PONE EN 0 EL BIT DE PARPADEO (DESTELLO) ; ;Entrada: Ninguna ;Salida: Bit de intensidad o destello se alteran ;Registros: Ninguno

;LeeAtributo TRAE VALOR ACTUAL DEL ATRIBUTO ; ;Entrada: Ninguna ;Salida: DL = valor actual del atributo ;Registros: DL

;PoneAtributo CAMBIA EL VALOR DEL ATRIBUTO ; ;Entrada: AL = nuevo valor del atributo ;Salida: Ninguna: se almacena al atributo para uso posterior ;Registros: Ninguno

Page 15: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-15

PROC PoneAtributo mov [atributo],al ret

ENDP PoneAtributo PROC IniciaPan

push ax ;salva registros push bx mov ah,15 ;función del BIOS para int 10h ;traer modo de video en AL cmp al,7 ;¿monocromático? jne @@10 ;no, brinca mov [BaseVid],BaseMono ;asigna segmento para monocolor

@@10: pop bx ;recupera pop ax ret ;regresa

ENDP IniciaPan PROC PintaCar

mov ah,02 int 21h ret

ENDP PintaCar PROC Coor_xy Push ax Push bx Mov bh,0 Mov ah,02 Int 10h Pop bx Pop ax ret ENDP Coor_xy

;IniciaPan INICIA EL PAQUETE DE VIDEO ; ;Entrada: Ninguna ;Salida: BaseVid es inicializada ;Registros: ninguno

;PintaCar PINTA CARACTERES ; ;Entrada: DL = carácter ASCII en hexadecimal ;Salida: carácter en pantalla ;Registros: Ninguno

;Coor-XY Encuentra coordenadas XY ; ;Entrada: dh - renglón ; dl - columna

Page 16: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-16

PROC RectanDoble Push ax Push bx Push cx Push dx ; desplegando líneas verticales Mov cl,22 Sbb cl,01 Mov ch,0 mov bl,1 repite: mov dh,bl mov dl,01 call Coor_xy mov dl,0bah ;código ascii de || call PintaCar mov dl,50 call Coor_xy mov dl,0bah call PintaCar inc bl loop repite ; desplegando líneas horizontales Mov cl,50 Sbb cl,01 Mov ch,0 Mov bh,1 repite1: mov dl,bh mov dh,01 call Coor_xy mov dl,0cdh ;código ascii de = call PintaCar mov dh,22 mov dl,bh call Coor_xy mov dl,0cdh call PintaCar inc bh loop repite1 mov dl,01 mov dh,01 call Coor_xy mov dl,0c9h ;código ascii esquina superior izquierda

;RectanDoble Dibuja un rectángulo en línea doble ; ;Entrada: (esquina superior izquierda) ; (esquina inferior derecha) ;Salida: Rectángulo a línea doble

Page 17: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-17

call PintaCar mov dl,50 mov dh,01 call Coor_xy mov dl,0bbh ;código ascii esquina superior derecha call PintaCar mov dl,01 mov dh,22 call Coor_xy mov dl,0c8h ;código ascii esquina inferior izquierda call PintaCar mov dl,50 mov dh,22 call Coor_xy mov dl,0bch ;código ascii esquina inferior derecha call PintaCar pop dx pop cx pop bx pop ax ret ENDE RectanDoble PROC RectanSenci Push ax Push bx Push x Push x ; desplegando líneas verticales Mov l,15 Sbb l,4 Mov h,0 Mov l,4 repi: mov h,bl mov l,5 ;columna 1 call oor_xy mov l,0b3h ;código ascii de | call intaCar mov l,55 call oor_xy ov dl,0b3h

;RectanSenci Dibuja un rectángulo en línea sencilla ; ;Entrada: (esquina superior izquierda) ; (esquina inferior derecha) ;Salida: Rectángulo a línea sencilla

Page 18: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-18

all PintaCar nc bl oop repi ; desplegando líneas horizontales Ov cl,55 Bb cl,5 Ov ch,0 Ov bh,5 repi1: mov dl,bh mov dh,4 ;renglon 1 call Coor_xy mov dl,0c4h ;codigo ascii de - call PintaCar mov dh,15 mov dl,bh call Coor_xy mov dl,0c4h call PintaCar inc bh loop repi1 mov dl,5 mov dh,4 call Coor_xy mov dl,0dah ;código ascii esquina superior izquierda call PintaCar mov dl,55 mov dh,4 call Coor_xy mov dl,0bfh ;código ascii esquina superior derecha call PintaCar mov dl,5 mov dh,15 call Coor_xy mov dl,0c0h ;código ascii esquina inferior izquierda call PintaCar mov dl,55 mov dh,15 call Coor_xy mov dl,0d9h ;código ascii esquina inferior derecha call PintaCar pop dx pop cx pop bx pop ax ret ENDP RectanSenci

END ;Fin del módulo VIDEO.ASM

Page 19: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-19

3.3 Capturar el programa PANTALLA.ASM, ensamblarlo y ejecutarlo. %TITLE “DESPLIEGA REFERENCIA DE CARACTERES / ATRIBUTOS DESDE UN ARCHIVO”

IDEAL DOSSEG MODEL small STACK

; Programa PANTALLA.ASM que exhibe varios atributos de color. También abre el archivo ; CONFIG.TXT que consta de dos bytes: el primero que es una letra mayúscula para la ca- ; rátula y el segundo que es el color que usa la línea que parpadea. Ensamblarlo con ; TASM /ziI PANTALLA, ligarlo con TLINK:> /v PANTALLA,,,REM

INCLUDE “MACDOS.ASM”

rc EQU 13 ;ASCII para retorno de carro nl EQU 10 ;ídem para otra línea FilaCarta EQU 5 ;fila para carta de atributos turquesa EQU 3 ;color turquesa (cian) rojo EQU 4 azul EQU 1 verde EQU 2 magenta EQU 5 cafe EQU 6 negro EQU 0

DATASEG

claveFin DB 0 ;código de fin Saludo DB ‘Atributos para caracteres..’,rc,nl DB ‘Filas = fondo, columnas = frente’,rc,nl DB ‘Primer carácter es oscuro, el segundo brillante’,0 caratula DB ‘ 00 01 02 03 04 05 06 07’,rc,nl DB ‘00’,rc,nl,’01’,rc,nl,’02’,rc,nl,’03’,rc,nl DB ‘04’,rc,nl,’05’,rc,nl,’06’,rc,nl,’07’,rc,nl BlanBTu DB ‘Línea en blanco intenso sobre fondo turquesa’,0 CafeCAzul DB ‘Línea en color café sobre fondo azul ‘,0 VerCMage DB ‘Línea verde claro sobre fondo magenta ‘,0 NegCRojo DB ‘Línea en negro sobre fondo rojo ‘,0 CadParp DB ‘Esta línea debe estar parpadeando en color 7 ‘,0 Config DB ‘A7’ ;parámetros para carátula y parpadeo CadArch DB ‘config.txt’,0 ;cadena ASCIIZ para especificar HandleA DB ? ;handle del archivo config.txt

CODESEG

; De CADENAS.OBJ y MANCADE.OBJ EXTERN SacaCadena:proc,LargoCad:proc

; De VIDEO.OBJ EXTERN IniciaPan:proc,PanIrXY:proc,PanLimpRect:proc EXTERN PanPoneCar:proc,FijaFondo:proc,FijaFrente:proc EXTERN PanPoneCad:proc,QuitaBrillo:proc,PoneBrillo:proc

Page 20: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-20

EXTERN PoneDest:proc,QuitaDest:proc

Inicia: mov ax,@data ;inicia dirección en DS mov ds,ax ;con segmento de datos mov es,ax ;ES = DS

; intenta abrir y luego leer archivo config.txt.

xor al,al ;especifica sólo lectura mov ah,3dh ;función de DOS para abrir archivo mov dx,offset CadArch ;apunta a cadena ASCIIZ int 21h ;intenta abrir jc @@10 ;si no puede salta mov [HandleA],ax ;salva handle del archivo mov bx,[HandleA] ;pone handle en BX mov cx,2 ;que lea dos caracteres D_LeeArch Config

@@10:

call Iniciapan ;inicia paquete VIDEO call Prepara ;prepara el video call TresFilas ;tres filas de las posibles mov al,[Config+1] ;trae número de color mov [CadParp+43],al ;lo pone en cadena de parpadeo call Parpadeo ;exhibe caracteres intermitentes mov dh,23 ;pone cursor después de última mov dl,0 ;línea desplegada call PanIrXY ;antes de salir

Salir: D_Termina ClaveFin

; PREPARA: Inicia el video... PROC Prepara

mov ch,0 ;limpia pantalla mov cl,0 mov dh,24 ;define vértice inferior mov dl,79 ;izquierdo call PanLimpRect ;limpia pantalla entera mov dh,1 ;exhibe el saludo mov dl,0 ;define posición del cursor call PanIrXY ;coloca cursor mov di,offset saludo ;apunta al saludo call SacaCadena ;exhibe cadena mov dh,FilaCarta ;despliega carátula de la carta mov dl,0 call PnaIrXY ;coloca cursor mov di,offset caratula ;apunta a carátula call SacaCadena ;la exhibe ret

ENDP Prepara

Page 21: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-21

; ATRIBUTOS: Exhibe carta de atributos UDATASEG fila DB ? ;variables no inicializadas columna DB ? ;columna del cursor fondo DB ? ;color del fondo frente DB ? ;color del frente CODESEG PROC Atributos

mov [fila],FilaCarta ;inicia fila mov [fondo],0 ;y el color de fondo

@@10: inc [fila] ;siguiente hilera mov al,[fondo] ;pone atributo de fondo call FijaFondo ;modifica byte de atributo mov [columna],1 ;inicia columna mov [frente],0 ;inicia atributo de frente

@@20: add [columna],3 ;se mueve a siguiente columna mov al,[frente] ;pone atributo de frente call FijaFrente ;lo hace call QuitaBrillo ;primer carácter sin brillo call UnCar inc [columna] call PoneBrillo ;segundo sí brilla call UnCar inc [frente] ;repite para todos los colores cmp [frente],7 jbe @@20 inc [fondo] ;repite para todos los colores cmp [fondo],7 ;¿terminó? jbe @@10 ;no, salta ret

ENDP Atributos ; UNCAR: Rutina local para ATRIBUTOS PROC UnCar

mov dh,[fila] ;trae número de fila mov dl,[columna] ;y columna mov al,[Config] ;carácter a desplegar call PanPoneCar ret

ENDP UnCar ; PARPADEO: Despliega texto parpadeando PROC Parpadeo

mov al,0 call FijaFondo ;pone fondo en negro

Page 22: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-22

mov al,[config+1] sub al,’0’ call FijaFrente ;y frente en color recibido call PoneBrillo ;más blanco que el blanco call PoneDest ;que destella mov di,offset CadParp ;apunta a cadena con DI call LargoCad ;CX = largo de la misma mov dh,23 ;asigna lugar a DH y DL mov dl,0 mov si,offset CadParp call PanPoneCad ;saca la cadena call QuitaDest ;quita futuro parpadeo call QuitaBrillo ;y brillo ret

ENDP Parpadeo ; TRESFILAS: Muestra cuatro filas con diferentes combinaciones PROC TresFilas

mov al,turquesa call FijaFondo ;pone fondo en turquesa mov al,7 call FijaFrente ;y frente en blanco call PoneBrillo ;más blanco que el blanco mov di,offset BlanBTur ;apunta a cadena con DI call LargoCad ;CX = largo de la misma mov dh,15 ;asigna lugar a DH y DL mov dl,0 mov si,offset BlanBTur call PanPoneCad ;saca la cadena mov al,azul call FijaFondo ;pone fondo en azul mov al,6 call FijaFrente ;y frente en color café call QuitaBrillo ;quita brillantez mov di,offset CafeCAzul ;apunta a cadena con DI call LargoCad ;CX = largo de la misma mov dh,17 mov dl,0 mov si,offset CafeCAzul call PanPoneCad ;saca la cadena mov al,magenta call FijaFondo ;pone fondo en magentas mov al,verde call FijaFrente ;y frente en verde claro call PoneBrillo ;más blanco que el blanco mov di,offset VerCMage ;apunta a cadena con DI call di,offset VerCMage ;apunta a cadena con DI call LargoCad ;CX = largo de la misma mov dh,19 ;asigna lugar a DH y DL mov dl,0 mov si,offset VerCMage

Page 23: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-23

call PanPoneCad ;saca cadena mov al,rojo call FijaFondo ;pone fondo en rojo mov al,negro call FijaFrente ;y frente en negro call QuitaBrillo ;que no sea gris mov di,offset NegCRojo ;apunta a cadena con DI call LargoCad ;CX = largo de la misma mov dh,21 ;asigna lugar a DH y DL mov dl,0 mov si,offset NegCRojo call PanPoneCad ;saca la cadena ret

ENDP TresFilas END Inicia ;Fin del programa PANTALLA.ASM

3.4 Ejecutar el programa PANTALLA y observar cómo escribe las combinaciones de color y ver cómo afecta el contenido del archivo CONFIG.TXT. Se muestran dos ejemplo de corrida del programa PANTALLA. Correrlo con diferentes contenidos de CONFIG.TXT.

Atributos para caracteres: Filas = fondo, columnas = frente Primer carácter es oscuro, el segundo brillante

00 01 02 03 04 05 06 0700 AA AA AA AA AA AA AA AA01 AA AA AA AA AA AA AA AA02 AA AA AA AA AA AA AA AA03 AA AA AA AA AA AA AA AA04 AA AA AA AA AA AA AA AA05 AA AA AA AA AA AA AA AA06 AA AA AA AA AA AA AA AA07 AA AA AA AA AA AA AA AA

• Línea en blanco intenso sobre fondo turquesa • Línea en color café sobre fondo azul • Línea en verde claro sobre fondo magenta • Línea en negro sobre fondo rojo Esta línea debe estar parpadeando en color 7 C:\SEM286> Atributos para caracteres: Filas = fondo, columnas = frente Primer carácter es oscuro, el segundo brillante

00 01 02 03 04 05 06 07

Page 24: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-24

00 EE EE EE EE EE EE EE EE01 EE EE EE EE EE EE EE EE02 EE EE EE EE EE EE EE EE03 EE EE EE EE EE EE EE EE04 EE EE EE EE EE EE EE EE05 EE EE EE EE EE EE EE EE06 EE EE EE EE EE EE EE EE07 EE EE EE EE EE EE EE EE

• Línea en blanco intenso sobre fondo turquesa • Línea en color café sobre fondo azul • Línea en verde claro sobre fondo magenta • Línea en negro sobre fondo rojo Esta línea debe estar parpadeando en color 5 C:\SEM286>

4. TAREAS

4.1 Agregar al programa PANTALLA rutinas del MOUSE que permitan ver el efecto del mismo sobre los diferentes colores desplegados. Dejar las rutinas para el ratón en REM.

3.5 Escribir rutinas que usen exclusivamente funciones del BIOS para obtener la hora, la fecha, para fijar la hora y la fecha del reloj del sistema y dejarlas en el módulo CRONOL.ASM y una vez ensamblado dejarlo en REM.

3.6 Escribir un programa tipo COM que ponga la hora en toda la pantalla en blanco intenso sobre cian y que la refresque cada segundo, según el formato dado. Las rutinas para obtener la fecha y hora a usar deben estar basadas en el BIOS, solamente.

Page 25: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9

AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS

9-25

*RELOJ DIGITAL*

Ensamblador 38624 de mayo de 1994

╔════════════════════════════════════════════════════════════╗ ║ ║ ║ ║ ║ 2222 3333 2222 8888 7777 ║ ║ 2 3 2 8 8 1 7 ║ ║ 2 3 █ 2 8 8 █ 1 7 ║ ║ 2 3 2 8 8 1 7 ║ ║ 2 3 2 8 8 1 7 ║ ║ 2222 3333 2222 8888 ║ ║ 2 3 2 8 8 1 7 ║ ║ 2 3 █ 2 8 8 █ 1 7 ║ ║ 2 3 2 8 8 1 7 ║ ║ 2 3 2 8 8 1 7 ║ ║ 2222 3333 2222 8888 ║ ║ ║ ║ ║ ╚════════════════════════════════════════════════════════════╝

(oprimir una tecla para salir)

└────────────────────────────────────────────────────────────┘

Page 26: practica 9 ensamblador 80386azul2.bnct.ipn.mx/computacion5/practicas 80386... · LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 9 AUTOR: PROFESOR SALVADO SAUCEDO FLORES EDICIÓN: PROFESOR PABLO

Nombre de archivo: practica 9 ensamblador 80386 Directorio: C:\Documents and Settings\Administrador\Mis

documentos\pafura\sistema minimo Plantilla: C:\Documents and Settings\Administrador\Datos de

programa\Microsoft\Plantillas\Normal.dot Título: PRÁCTICA 9 Asunto: Prácitas de laboratorio de Computación V Autor: M. en C. Salvador Saucedo Flores Palabras clave: Comentarios: Fecha de creación: 14/11/2003 14:03:00 Cambio número: 13 Guardado el: 17/11/2003 12:59:00 Guardado por: ESIME Tiempo de edición: 411 minutos Impreso el: 17/11/2003 13:00:00 Última impresión completa Número de páginas: 25 Número de palabras: 3,313 (aprox.) Número de caracteres: 18,227 (aprox.)