Está en la página 1de 29

REPÚBLICA BOLIVARIANA DE VENEZUELA

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA “ANTONIO JOSÉ DE


SUCRE”

VICE – RECTORADO “LUIS CABALLERO MEIJAS”

DEPARTAMENTO DE INGENIERÍA DE SISTEMAS

SISTEMAS DIGITALES III SECCIÓN 03

Profesor: Carlos Betancourt Integrantes: José Antonio Martínez

Expediente: 2013103262

Víctor Fuentes

Expediente: 2011203303

Caracas, febrero del 2019


Temas de Investigación

 PSP (Prefijo del Segmento del Programa)

El DOS carga programas .COM y .EXE para ejecución en un segmento de programa


y crea un PSP en el desplazamiento OOH y el programa mismo en el desplazamiento 100H
del segmento. El PSP contiene los campos siguientes de acuerdo con la posición relativa: El
prefijo de segmento de programa consta de una estructura de distintos campos con una
posición que esta asignada para cada uno:

Campo Contenido
00-001H Una instrucción de la INT 20H para facilitar el regreso al
DOS
02-03H La dirección del segmento del último párrafo de la memoria
asignada
04-09H Reservado por el DOS
OA-ODH Dirección de terminación (dirección del segmento para INT
22H)
OE-11H Dirección de salida de Ctrl + Break (dirección de segmento
para la INT 23H)
12-15H Dirección de salida de error crítico (dirección de segmento
para la INT 23H)
16-17H Reservado por el DOS
18-2BH Tabla de manejadores de archivo por omisión
2C-2DH Dirección de segmento del entorno del programa.
2E-31H Reservado por el DOS
32-33H Longitud de la tabla de manejadores de archivo
34-37H Apuntador lejano a la tabla de manejadores
38-4FH Reservado por el DOS
50-51H Llama a la función del DOS (INT 21H y RETF)
52-5BH Reservado por el DOS
5C-6BH Área de parámetro 1, formateado como un FCB (#1)
estándar no abierto
6C-7FH Área del parámetro 2, formateando como un FCB (#2)
estándar no abierto; traslapado, si el FCB en 5CH esta
abierto.
80-FFH Búfer por omisión para un DTA.
Interrupciones por Hardware. Descripción y Explicación.

Son aquellas que son provocadas por dispositivos externos al procesador su


característica principal es que no son programadas, esto es, pueden ocurrir en cualquier
momento en el programa. Existen dos clases de interrupciones de este tipo:

Interrupciones por hardware enmascarables: Aquellas en las que el usuario decide si


quiere o no ser interrumpido.

Interrupciones por hardware no enmascarables (NMI): Aquellas que siempre


interrumpen al programa.

Cuando el microprocesador accede a un periférico (disco duro, puerto de


comunicación...), puede transcurrir algún tiempo antes de que los datos sean obtenidos o
transmitidos. La solución más simple es esperar hasta recibir los datos o hasta que se haya
efectuado la transmisión (polling), pero esta solución bloquea todos los programas en
ejecución, y eso no puede admitirse en un sistema multitarea.

Por ello, en los sistemas modernos se prefiere un funcionamiento mediante


interrupciones, ya que éstas permiten mejorar la productividad del procesador, de forma que
este último puede ordenar una operación de entrada o salida y, en lugar de tener que realizar
una espera activa, se puede dedicar a atender a otro proceso o aplicación hasta que el
dispositivo esté de nuevo disponible, siendo dicho dispositivo el encargado de notificar al
procesador mediante la línea de interrupción que ya está preparado para continuar o terminar
la operación de entrada o salida.

Interrupciones por Software. Descripción y Explicación.

Son aquellas programadas por el usuario, es decir, el usuario decide cuando y donde
ejecutarlas, generalmente son usadas para realizar entrada y salida.

Las interrupciones por software, también denominadas llamadas al sistema, son


aquellas generadas por un programa mientras este está ejecutándose. En general, actúan de
la siguiente manera: Un programa en ejecución llega a una instrucción que requiere del
sistema operativo para alguna tarea, por ejemplo, para leer un archivo en el disco duro
(cuando un programa necesita un dato exterior, se detiene y pasa a cumplir con las tareas de
recoger ese dato).

En ese momento por tanto llama al sistema y se interrumpe virtualmente hasta recibir
respuesta, en el ejemplo anterior hasta que no se haya leído el disco y el archivo esté en
memoria principal. Durante esa espera las instrucciones que se ejecutarán no serán del
programa, sino del sistema operativo. Una vez éste termine su rutina ordenará reanudar la
ejecución del programa autointerrumpido en espera. Por último, la ejecución del programa
se reanuda.

Una Interrupción software se produce cuando un usuario solicita un recurso del


núcleo, mediante una llamada al sistema, open, write, read, mount, ... El proceso usuario
solicita la función correspondiente de la librería libc. df = open (fichero, modo);

La función de librería coloca los parámetros de la llamada en los registros del


procesador y ejecuta la instrucción INT 0x80.

Se conmuta a modo núcleo mediante las tablas IDT y GDT • Entra a ejecutarse una
función del núcleo, system_call, Interfase entre el usuario y el núcleo. Cuando se termina la
llamada, system_call retorna al proceso que la llamo y se retorna a modo usuario.

Llega la interrupción software INT 80h y se busca en la IDT la entrada


correspondiente a la interrupción. Se obtiene un puntero desplazamiento al núcleo (D). Y una
entrada (S) a GDT. La entrada en la GDT indica una base (B) y un límite (L) del núcleo y se
llega al manejador de interrupción system_call.

Set de instrucciones de Teclado

 INT16H. Diferentes servicios.

INT 16h es la forma abreviada de la interrupción 0x16. Esta interrupción se encarga


de controlar el teclado del PC.

Esta interrupción se encarga de obtener funcionalidades básicas del teclado, es decir,


se encarga de recoger las pulsaciones del teclado, obtener el estado del buffer del teclado,
etc. La codificación estándar del teclado que ofrece la INT 16H es de un teclado
estadounidense. Para adaptar la codificación de la INT16H a otro tipo de teclado (por
ejemplo, un teclado español) hay que atender al scan-code de la tecla pulsada y realizar las
operaciones convenientes para poder interpretar la tecla que se desea.

En los teclados de 101 letras o más, existen unas teclas que la INT16H las interpreta
como teclas expandidas, que tienen un scan-code distinto al de las teclas normales (por
ejemplo, la tecla pausa).

Lista de servicios de la INT 16H

AH = 00h Teclado Leer pulsación de tecla


AH = 01h Teclado Obtener el estado del buffer del teclado
AH = 02h Teclado Obtener el estado del teclado
AH = 03h Teclado Establecer factor de repetición
AH = 05h Teclado Simular la pulsación de una tecla
AH = 0Ah Teclado Obtener el ID del teclado
AH = 10h Teclado expandido Leer carácter del teclado expandido
AH = 11h Teclado expandido Obtener estado del buffer del teclado expandido
AH = 12h Teclado expandido Obtener estado del teclado expandido

INT 16h AH=00h - Leer pulsación de tecla


Parámetros:

AH = 00h Leer pulsación de tecla

Retorna:

AH = ?? Scan-code de la tecla pulsada


AL = ?? Carácter ASCII de la tecla pulsada

Ejemplo:

;Este ejemplo lee una tecla del teclado y si la tecla pulsada es la de la


tecla "ñ" hace las modificaciones para
;que el contenido en AL sea la ñ.
inicio:
CALL leertecla ;Llamamos a la funcion de leer una tecla
MOV AH,0Eh ;Funcion teletype
INT 10h ;Mostramos la tecla en pantalla
JMP inicio ;Hacemos un bucle eterno

leertecla:
XOR AX,AX ;Funcion 0
INT 16h ;Llamamos al teclado
CMP AH,27h ;¿El scancode corresponde con el scancode de
la tecla "ñ"?
JE cambiarletra ;Sí, así que cambiamos el contenido de AL

RET ;No, así que no realizamos otra operación

cambiarletra:
MOV AL,0A4h ;Ponemos la letra "ñ" en AL
RET ;Volvemos de la rutina
Set de interrupciones de Video

 INT10H. Diferentes servicios

El INT10H es la forma abreviada de la interrupción 0x10. Esta interrupción controla


los servicios de pantalla del PC.

Esta interrupción se utiliza básicamente para poder mostrar el texto en la pantalla (sin
llamar a la INT21H de MS-DOS), para cambiar a modo gráfico, para establecer la paleta de
colores, etc.

Lista de funciones soportadas


Función Código de función Parámetros Retorno
AL = Bandera del Modo de
Activa Modo de
AH=00h AL = Modo de video video / byte del modo del
video
controlador de CRT
CH = Fila inicial de scan, CL = Fila final de
scan,
Normalmente una celda de carácter tiene
8 líneas de scan, 0-7. Así, CX=0607h es el
cursor normal de subrayado, CX=0007h
es un cursor de bloque completo. Si el bit
Asigna forma del AH=01h 7 de CH es activado, esto usualmente
cursor de
significa "Oculta el cursor"". Así CX=2607h
modo de texto
es un cursor invisible.
Algunas tarjetas de video tienen 16 líneas
de scan, 00h-0Fh.
Algunas tarjetas de video no usan el bit 5de C
H. Con éstas, haga Inicio > Fin (ej. CX=0706
h)
Asigna
posición del AH = 02h BH = Página, DH = Fila, DL = Columna
cursor
Lee la AX = 0, CH = Inicio de lalí
posición del nea de scan, CL = Fin de la
AH = 03h BH = Página
cursor y su línea de scan, DH = Fila, D
tamaño L= Columna
Lee la AH = Status (0=no
posición del disparado, 1=disparado), BX = Pixel X, CH
light pen (No AH = 04h = Pixel Y, CX = número de línea
funciona en del pixel para los modos 0Fh-
sistemas VGA) 10h, DH = Carácter Y, DL = Carácter X
Selecciona
Página
AH = 05h AL = Número de Página
activa de la
pantalla
Scroll up AL = Lineas de scroll (0 = Borra), BH = Atri
AH = 06h
window buto de las líneas en blanco
Scroll down AL = Lineas de scroll (0 = Borra), BH = Atri
AH = 07h
window buto de las líneas en blanco
Lee carácter y
atributo en AH = Color,
AH = 08h BH = Número de Página
la posición AL = Carácter
del cursor
Escribe
carácter y AL = Caracter, BH = Número de Página, BL
atributo en AH = 09h = Color, CX = Número deveces para escribir
la posición elcaracter
del cursor
Escribe carácter
AL = Caracter, BH = Número de Página, BL
solo en la
AH = 0Ah = Color, CX = Número deveces para escribir
posición del
elcaracter
cursor
Asigna color de BL = Color del fondo/borde (el borde
AH = 0Bh, BH = 00h
fondo/borde solo en modos de texto)
BL = ID de Paleta (solofue válido en el CGA,
Asigna paleta AH = 0Bh, BH = 01h pero las nuevas tarjetaslo soportan en mucho
s otodos los modosgráficos)
Escribe
AH = 0Ch AL = Color, BH = Página, CX = X, DX = Y
pixel gráfico
Lee pixel gráfico AH = 0Dh BH = Página, CX = X, DX= Y AL = Color
AL = Caracter, BL = Color (solo en modo
Salida de teletipo AH = 0Eh
gráfico)
Lee modo
AH = 0Fh AL = Modo de video
de video actual
Escribe
string(EGA+, lo AL = Modo de escritura, BH = Página, BL =
que significa AH = 13h Color, CX = Longitud del string, DH = Fila,
como mínimo un DL = Columna, ES:BP = Posición del string
PC AT)
Tabla de modos de vídeo
Modo Resolución Colores Tipo

AL = 00h 40x25 16 Texto

AL = 01h 40x25 16 Texto

AL = 02h 80x25 16 Texto

AL = 03h 80x25 16 Texto

AL = 04h 320x200 4 Gráfico

AL = 05h 320x200 4 Gráfico

AL = 06h 640x200 2 Gráfico

AL = 07h 80x25 2 Texto

AL = 0Dh 320x200 16 Gráfico

AL = 0Eh 640x200 16 Gráfico

AL = 0Fh 640x350 2 Gráfico

AL = 10h 640x350 4 Gráfico EGA 64 KB

AL = 10h 640x350 16 Gráfico EGA menor de 64 KB y VGA

AL = 11h 640x480 2 Gráfico

AL = 12h 640x480 16 Gráfico

AL = 13h 320x200 256 Gráfico

BX = 100h 640x400 256 Gráfico (SVGA)

BX = 101h 640x480 256 Gráfico (SVGA)

BX = 102h 800x600 16 Gráfico (SVGA)

BX = 103h 800x600 256 Gráfico (SVGA)

BX = 104h 1024x768 16 Gráfico (SVGA)

BX = 105h 1024x768 256 Gráfico (SVGA)

BX = 106h 1028x1024 16 Gráfico (SVGA)

BX = 107h 1028x1024 256 Gráfico (SVGA)

BX = 113h 800x600 32K Gráfico (SVGA)

BX = 114h 800x600 64K Gráfico (SVGA)

BX = 115h 800x600 16M Gráfico (SVGA)


Lista de servicios de la INT 10h
AH = 00h Vídeo Establecer modo de vídeo

AH = 01h Vídeo Establecer el tamaño del cursor

AH = 02h Vídeo Posicionar el cursor

AH = 03h Vídeo Obtener posición y tamaño del cursor

AH = 04h Vídeo Obtener posición del lápiz óptico (excepto VGA)

AH = 06h Vídeo Subir línea

AH = 07h Vídeo Bajar línea

AH = 0Bh BH=00h Vídeo Establecer color de fondo o borde

AH = 0Bh BH=01h Vídeo Establecer paleta gráfica

AH = 0Ch Vídeo Escribir pixel gráfico

AH = 0Dh Vídeo Leer pixel gráfico

AH = 0Eh Vídeo Función TeleType (escribir caracteres en la pantalla)

AH = 0Fh Vídeo Obtener el modo de vídeo

AX = 1100h Vídeo Cambiar fuente de vídeo (Modo Texto)

AX = 4F02h SVGA Establecer modo de vídeo SVGA

AX = 4F03h SVGA Obtener modo de vídeo SVGA

INT 10h AX=1100h - Cambiar fuente de vídeo (Modo Texto)

Parámetros:

AX=1100h Cambiar fuente de vídeo (Modo Texto)

ES:BP Dirección de la tabla de caracteres nuevos

CX = ?? Número de caracteres a cambiar

DX = ?? Número del carácter ASCII desde donde se empieza a cambiar las fuentes

BH = ?? Bloque a leer en el mapa 2

BL = ?? Número de bytes por carácter


Retorna: Nada

Ejemplo:
ORG 100h
;Este ejemplo carga una letra A personalizada
;Para probarlo ejecutar el programa en MS-DOS

push ds ;Asegurar que DS=ES


pop es

mov ax,1100h ;Funcion de cargar caracteres


mov bp,caract ;Tabla de caracteres
mov cx,1 ;Cargar 1 caracter
mov dx,61 ;Cambiar el caracter 61
mov bh,14 ;14 bytes por caracter
xor bl,bl ;Bloque 0
int 10h ;Llamamos a la INT 10h

mov ah,0Eh ;Funcion teletype


mov al,61 ;Mostrar el caracter cambiado
int 10h ;Llamamos a la INT 10h

int 20h ;Volvemos a MS-DOS

caract: ;Tabla de caracteres

db 11111111b ;Dibujo en binaro de nuestra "A" personalizada


db 11111111b
db 11000011b
db 11000011b
db 11000011b
db 11111111b
db 11111111b
db 11000011b
db 11000011b
db 11000011b
db 11000011b
db 11000011b
db 11000011b
db 11000011b
INT 10h AH=0Eh - Función TeleType

Parámetros:

AH = 0Eh Función TeleType

AL = ?? Carácter a escribir

BH = ?? Número de página

BL = ?? Color de fondo (solo en modo gráfico)

Retorna: Nada

Ejemplo:
XOR AX,AX ;AX=0
MOV AL,03h ;Modo de texto 80x25x16
INT 10h ;Llamamos a la INT 10h
LEA SI,holamundo ;Cargamos en SI la dirección de memoria efectiva de la
constante
CALL escribir_cadena ;Llamamos a la función de escribir la variable en
pantalla
INT 16h ;Pedimos una tecla (AH=0)
HLT ;Paramos la ejecución
escribir_cadena:
PUSH AX ;Guardamos los registros AX y SI en la pila
PUSH SI ;
siguiente_caracter:
MOV AL,[SI] ;Movemos la siguiente o primera letra de la variable de SI a
AL
CMP AL,0 ;¿Hemos terminado de escribir en pantalla?
JZ terminado ;Saltamos si es 0, entonces hemos terminado de escribir
INC SI ;Incrementamos el valor de SI (Siguiente caracter)
MOV AH,0Eh ;Función TeleType
INT 10h ;Llamamos a la interrupción 10h
JMP siguiente_caracter ;Hacemos un bucle para escribir el siguiente
caracter
terminado:
POP AX ;Liberamos los registros AX y SI de la pila
POP SI ;
RET ;Salimos de la función
holamundo db "¡Hola Mundo!",0Dh,0Ah,0 ;Variable con la cadena de texto
;0Dh y 0Ah se usan para un salto de
linea
tio;y 0 para indicar que es el final de la
linea
1. Presentar información detallada del PREFIJO DEL SEGMENTO DE PROGRAMA.
Definición, estructura, descripción de campos, dirección de inicio y fin, detalle.

PSP (Prefijo del Segmento del Programa)

El prefijo de segmento de programa es una zona de un archivo .com o .exe de 256


bytes que se utiliza para poder almacenar la cola de órdenes, resguardar ciertos vales, entre
otros y también es una estructura de datos que es usada en el sistema DOS para poder
almacenar el estado de un programa, al cargar un programa.COM o.EXE, esta estructura es
creada en el segmento 00H mientras que el programa mismo en el 100H.

El prefijo de segmento de programa consta de una estructura de distintos campos con


una posición que esta asignada para cada uno:

Campo Contenido
00-01H Instrucción de la INT 20H para el regreso a DOS.
02-03H La dirección del segmento del último párrafo de la memoria
asignada.
04-09H Reservado por DOS
0A-0DH Dirección de terminación. (INT 22H)
0E-11H Dirección de salida. (INT 23H)
12-15H Dirección de salida de error crítico. (INT 24H)
16-17H Reservado por DOS
18-2BH Tabla de trabajo por archivo
2C-2DH Dirección del Segmento del entorno del programa
2E-31H Reservado por DOS
32-33H Longitud de la tabla de manejadores de archivos
34-37H Apuntador a la tabla de manejadores
38-4FH Reservado por DOS
50-51H Llama la función del DOS (siempre contiene INT 21H +
RETF).
52-5BH Reservado por DOS
5C-6BH Área del parámetro 1, formateado como un FCB (#1)
estándar no abierto
6C-7FH Área del parámetro 1, formateado como un FCB (#1)
estándar no abierto
80-FFH Búfer por omisión para un DTA
La PSP se usa con más frecuencia para obtener los argumentos de la línea de
comandos de un programa DOS; por ejemplo, el comando "FOO.EXE / A / F" ejecuta
FOO.EXE con los argumentos '/ A' y '/ F'.

La dirección de segmento de la PSP se pasa en el registro DS cuando se ejecuta el


programa. También puede determinarse más adelante utilizando la función Int 21h 51h o la
función Int 21h 62h. Cualquiera de las funciones devolverá la dirección de PSP en el registro
BX.

Alternativamente, en los programas .COM cargados a un desplazamiento de 100h,


uno puede dirigirse directamente a la PSP utilizando las compensaciones mencionadas
anteriormente. La compensación de 000h apunta al comienzo de la PSP, 0FFh apunta al final,
etc.

Compatibilidad del sistema operativo CP / M

Predecesor de MS-DOS: para proporcionar la disponibilidad de una base de software


de aplicación, MS-DOS fue diseñado para permitir la ejecución de programas de CP / M con
poca o ninguna modificación.

CP / M basado en el procesador 8008 con una memoria direccionable de 16 bits.

Los primeros 100 (hex.) / 256 (dec.) Bytes de memoria formaron una parte "residente"
del sistema operativo; los programas de aplicación se iniciaron en la memoria en la dirección
100 (hex.)

La finalización del programa de aplicación estándar fue "saltando" a la dirección 0,


el comienzo del sistema operativo.

Estructura de PSP

100 (hex) / 256 (dec) bytes

INT 20h - en las direcciones de desplazamiento 0 y 1; una llamada de servicio de MS-


DOS para terminar el programa actual (estilo .COM)
Área de datos formateada - compensaciones 2 a 7F; incluye, por ejemplo, una versión
formateada de hasta 2 rutas de archivo que se ingresaron en la misma línea que el comando
utilizado para ejecutar el programa

Longitud de "cola de comando" - desplazamiento 80h - número de caracteres escritos


en la misma línea que el comando utilizado para ejecutar este programa, siguiendo el
comando real.

Cola del comando: códigos ASCII de caracteres reales escritos después del comando
utilizado para ejecutar este programa (terminado con un código de "retorno de carro"); esto
hace que los valores de los argumentos (típicamente las rutas de archivo) estén disponibles
para los programas durante la ejecución.

Acceso a la PSP

Los registros de segmentos DS y ES inicialmente apuntan a una PSP para cada


programa ejecutado bajo MS-DOS.
2. Hacer un programa que permita ingresar parámetros en la Computadora (Hasta 15 ).
Mostrar en Pantalla:

a. Dirección del campo del PSP. Descripción. Contenido. Ejm:

Código del programa

Programa Sistemas Digitales III

Integrantes: Jose Antonio Martinez

Victor Fuentes

.MODEL SMALL

.STACK 100H

.DATA

VALOR DB 15 DUP(00h)

MENSAJE DB "META LOS 15 CARACTERES DEL PSP","$"

VAL0 DB " CAMPO DESCRIPCION


CONTENIDO","$"

VAL1 DB " 0000H-0001H INSTRUCCION DEL INT 20H PARA REGRESO A DOS
","$"

VAL2 DB " 0002H-0003H La direccion del segmento de la memoria asignada


","$"

VAL3 DB " 0004H-0004H (RESERVADO A DOS)


","$"

VAL4 DB " 0005H-0009H (RESERVADO A DOS)


","$"

VAL5 DB " 000AH-000DH Direccion de terminacion (INT22H)


","$"

VAL6 DB " 000EH-0011H Direccion de salida (INT23H)


","$"
VAL7 DB " 0012H-0015H Direccion de salida de error crticico (INT24H)
","$"

VAL8 DB " 0016H-002BH (RESERVADO A DOS)


","$"

VAL9 DB " 002CH-002DH Direccion del segmento del entorno del programa
","$"

VAL10 DB " 002EH-005BH (RESERVADO A DOS)


","$"

VAL11 DB " 005CH-006BH Area del parametro 1 del primer FCB


","$"

VAL12 DB " 006CH-007FH Area del parametro 1 del segundo FCB


","$"

VAL13 DB " 0080H-0100H Bufer por omision para un DTA


","$"

.CODE

INICIO PROC FAR

MOV AX,@DATA

MOV DS,AX

MOV DX,AX

MOV ES,AX

CALL CLR

LEA DX,MENSAJE

CALL MSJ

JMP GUARDAR

END
INICIO PROC NEAR

MOV AH,01H

INT 21H

MOV AH,09H

INT 21H

RET

INICIO END

;GUARDAR LOS CARACTERES

GUARDAR PROC NEAR

MOV SI, OFFSET VALOR

MOV CX,15

OTR: MOV AH,01H

INT 21H

MOV AL,DS:[SI]

INC SI

LOOP OTR

CALL CLR

JMP GTPSP1

GUARDAR ENDP

;IMPRESION

IMP PROC NEAR

MOV AH,0AH

MOV BL,07H
MOV BH,0

MOV CX,01

INT 10H

CALL CURSOR

RET

IMP ENDP

;LIMPIAR LA PANTALLA

CLR PROC NEAR

MOV AH,00H

MOV AL,03H

INT 10H

RET

CLR ENDP

CURS PROC NEAR ;PARA AVANZAR EL CURSOR

MOV AH,03H

MOV BH,0

INT 10H

MOV AH,02H

INC DL

INT 10H

RET

CURS ENDP
LNCURS PROC NEAR ;SIGUIENTE LINEA

MOV AH,03H

MOV BH,0

INT 10H

MOV AH,02H

MOV DL,08H

INC DH

INT 10H

RET

LNCURS ENDP

LNDCURS PROC NEAR ;SIGUIENTE LINEA DE LOS DATOS

MOV AH,03H

MOV BH,0

INT 10H

MOV AH,02H

MOV DL,52H

INC DH

INT 10H

RET

LNDCURS ENDP

ICURS PROC NEAR ;INICIAR CURSOR

CALL CLR

MOV AH,02H

MOV BH,0
MOV DL,10

MOV DH,08

INT 10H

RET

ICURS ENDP

;CONVERSION HEXADECIMAL A ASCIII

CONV PROC NEAR

CMP AL,09H

JA LET

SUB AL,30H

RET

LET: SUB AL,37H

RET

CONV ENDP

;IMPRESION DEL VAL1

VALPSP1 PROC NEAR

MOV SI,0000H

MOV CX,2

LEA DX,VAL1

CALL MSJ

VPSP1: MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS
LOOP VPSP1

CALL LNCURS

JMP VALPSP2

VALPSP1 ENDP

;IMPRESION DEL VAL2

VALPSP2 PROC NEAR

MOV CX,2

LEA DX,VAL2

CALL MSJ

VPSP2: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP2

CALL LNCURS

JMP VALPSP3

VALPSP2 ENDP

;IMPRESION DEL VAL3

VALPSP3 PROC NEAR

LEA DX,VAL3

CALL MSJ

MOV AL,DS:[SI]

CALL CONV
CALL IMP

CALL LNCURS

JMP VALPSP4

VALPSP3 ENDP

;IMPRESION DEL VAL4

VALPSP4 PROC NEAR

MOV CX,5

LEA DX,VAL4

CALL MSJ

VPSP4: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP4

CALL LNCURS

JMP VALPSP5

VALSP4 ENDP

;IMPRESION DE VAL5

GTPSP5 PROC NEAR

MOV CX,4

LEA DX,VAL5

CALL MSJ

VPSP5: INC SI
MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP5

CALL LNCURS

JMP VALPSP6

VALPSP5 ENDP

;IMPRESION DE VAL6

VALPSP6 PROC NEAR

MOV CX,4

LEA DX,VAL6

CALL MSJ

VPSP6: INC SI

MOV AL,DS:[SI]

CALL CON

CALL IMP

CALL CURS

LOOP VPSP6

CALL LNCURS

JMP VALPSP7

VALPSP6 ENDP

;IMPRESION DE VAL7

VALPSP7 PROC NEAR


MOV CX,4

LEA DX,VAL7

CALL MSJ

VPSP7: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP7

CALL LNCURS

JMP VALPSP8

VALPSP7 ENDP

;IMPRESION DEL VAL8

GTPSP8 PROC NEAR

MOV CX,22

LEA DX,VAL8

CALL MSJ

VPSP8: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP8

CALL LNCURS

JMP VALPSP9
VALPSP8 ENDP

;IMPRESION DEL VAL9

VALPSP9 PROC NEAR

MOV CX,2

LEA DX,VAL9

CALL MSJ

VPSP9: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP9

CALL LNCURS

JMP VALPSP10

VALPSP9 ENDP

;IMPRESION DEL VAL10

VALPSP10 PROC NEAR

MOV CX,46

LEA DX,VAL10

CALL MSJ

VPSP10: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP
CALL CURS

LOOP VPSP10

CALL LNCURS

JMP VALPSP11

VALPSP10 ENDP

;IMPRESION DEL VAL11

VALPSP11 PROC NEAR

MOV CX,16

LEA DX,VAL11

CALL MSJ

VPSP11: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP11

CALL LNCURS

JMP VALPSP12

VALPSP11 ENDP

;IMPRESION DEL VAL12

VALPSP12 PROC NEAR

MOV CX,20

LEA DX,VAL12

CALL MSJ
VPSP12: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

LOOP VPSP12

CALL LNCURS

JMP VALPSP13

VALPSP12 ENDP

;IMPRESION DEL VAL13

VALPSP13 PROC NEAR

MOV CX,007EH

LEA DX,VAL5

CALL MSJ

VPSP13: INC SI

MOV AL,DS:[SI]

CALL CONV

CALL IMP

CALL CURS

MOV BX,CONT

SUB AX,BX

JZ EXT

MOV AX,CONT

ADD AX,20

MOV CONT,AX
CALL LDCURS

JMP VPSP13

EXT: JMP INICIO

VALPSP13 ENDP

END

También podría gustarte