Vous êtes sur la page 1sur 5

;================================================================================================

;Programa
:Examen.asm
;Funcion
:Determina si un numero es capicua o no
;Realizado por
:Acevedo Herrera Jose Alberto
;Compilador en el que se ejecuto:TASM 5.0
;Fecha
:04/12/13
;================================================================================================
;DECLARACION DE CONSTANTES
;================================================================================================
CR
EQU 13
;CR=>retorno de carro
LF
EQU 10
;LF=>salto de linea
FIN EQU 4C00H
;FIN=>finaliza el programa
BIOS EQU 10H
;BIOS=>interrupcion del BIOS
DOS EQU 21H
;DOS=>interrupcion del DOS
TAB EQU 09H
;TAB=>tabulador horizontal
IMP EQU 9
;IMP=>funcion DOS para escribir texto en pantalla
TEC EQU 8
;TEC=>servicio del DOS para entrada de Teclado
;================================================================================================
;DECLARACION DEL SEGMENTO DE DATOS
;================================================================================================
DATOS SEGMENT
;Inicio del segmento de datos
;-------------------------------------------------------------------------------------------MEN1 DB CR,LF,TAB,TAB,'=============================================',LF
DB CR,TAB,TAB,TAB,TAB,'PROGRAMA DEL EXAMEN',LF
DB CR,TAB,TAB,'FUNCION: Determinar si un numero es capicua',LF
DB CR,TAB,TAB,'==============================================',LF,'$'
MEN2 DB CR,TAB,'Ingrese el numero a evaluar (ingrese Enter para terminar):',LF,CR,TAB,'$'
MEN3 DB LF,LF,CR,TAB,'El numero dado es capicua','$'
MEN4 DB LF,LF,CR,TAB,'El numero dado no es capicua','$'
MEN5 DB LF,LF,CR,TAB,'Si desea dar otro numero porfavor introduzca Enter:',TAB,'$'
NUM DB 128 DUP(?),'$'
BAN DB 'X$'
;-------------------------------------------------------------------------------------------DATOS ENDS
;Fin del segmento de datos
;================================================================================================
;DECLARACION DEL SEGMENTO DE PILA
;================================================================================================
PILA SEGMENT STACK
;Inicio de la pila
;-------------------------------------------------------------------------------------------DW 128 DUP('P')
;-------------------------------------------------------------------------------------------PILA ENDS
;Fin de pila

;================================================================================================
;DECLARACION DEL SEGMENTO DE CODIGO
;================================================================================================
CODIGO SEGMENT
;Inicio del segmento de codigo
;-------------------------------------------------------------------------------------------CAPI PROC FAR
;---------------------------------------------------------------------------------------ASSUME CS:CODIGO,DS:DATOS,SS:PILA ;Asignacion de segmentos a cada registro
;---------------------------------------------------------------------------------------CALL PRO
;---------------------------------------------------------------------------------------CALL EVALUAR
;Llamar a la funcion EVALUAR
;---------------------------------------------------------------------------------------CALL SALIR
;Llamar a la funcion SALIR
;---------------------------------------------------------------------------------------CAPI ENDP
;-------------------------------------------------------------------------------------------ESCRIBE PROC
;---------------------------------------------------------------------------------------MOV AH,IMP
;Funcion para imprimir texto en pantalla
INT DOS
;Llamar a la interrupcion al DOS
RET
;Retornar
;---------------------------------------------------------------------------------------ESCRIBE ENDP
;-------------------------------------------------------------------------------------------PRO PROC
PROG:
CALL CLS
MOV AX,DATOS
;Puenteo de DS al
MOV DS,AX
;segmento de datos
;---------------------------------------------------------------------------------------LEA DX,MEN1
;Carga mensaje MEN1
CALL ESCRIBE
;Llamar la funcion escribe
;---------------------------------------------------------------------------------------LEA DX,MEN2
;Carga mensaje MEN2
CALL ESCRIBE
;Llamar a la funcion escribe
;---------------------------------------------------------------------------------------MOV SI,OFFSET NUM
;SI toma la direccion de NUM
MOV CX,30
;Inicializacion del contador en 30
CALL PEDIR
;Llamar a la funcion PEDIR
;---------------------------------------------------------------------------------------RET

PRO ENDP
;-------------------------------------------------------------------------------------------SALIR PROC NEAR
;---------------------------------------------------------------------------------------MOV AX,FIN
;Instruccion para terminar el programa
INT DOS
;Interrupcion al DOS
RET
;---------------------------------------------------------------------------------------SALIR ENDP
;-------------------------------------------------------------------------------------------SALTA PROC NEAR
;---------------------------------------------------------------------------------------RET
;---------------------------------------------------------------------------------------SALTA ENDP
;-------------------------------------------------------------------------------------------PEDIR PROC NEAR
;Inicio del procedimiento PEDIR_DATOS
XOR DI,DI
;---------------------------------------------------------------------------------------BUCLE:
;---------------------------------------------------------------------------------------MOV AH,TEC
;Esperar entrada de teclado
INT DOS
CMP AL,CR
;Comparar AL con enter
JE EVALUAR
;Ir a la funcion SALTA
;-------------------------------------------------------------------------------MOV AH,2
;Funcion para imprimir
MOV DL,AL
;un caracter en pantalla
INT DOS
;-------------------------------------------------------------------------------MOV [SI],AL ;Guarda tecla en SI
INC SI
INC DI
PUSH AX
LOOPNZ BUCLE
;Repetir mientras CX no sea 0
;---------------------------------------------------------------------------------------PEDIR ENDP
;Fin del procedimiento PEDIR_DATOS
;-------------------------------------------------------------------------------------------ME PROC NEAR
LEA DX,MEN4
CALL ESCRIBE

JMP CICLO
ME ENDP
;-------------------------------------------------------------------------------------------;-------------------------------------------------------------------------------------------;Funcion EVALUAR: Comprueba si el numero es capicua e imprime el mensaje correspondiente
;-------------------------------------------------------------------------------------------EVALUAR PROC NEAR
;Inicio del procedimiento EVALUAR
XOR AX,AX
MOV CX,DI
MOV SI,OFFSET NUM ;Se dezplaza a la primera posicion de NUM
BUC:
MOV DX,[SI] ;SI= Direccion inicio de NUM
POP AX
INC SI
CMP AL,DL
;
JNE ME
LOOP BUC
LEA DX,MEN3
CALL ESCRIBE
JMP CICLO
;---------------------------------------------------------------------------------------EVALUAR ENDP
;-------------------------------------------------------------------------------------------CLS PROC
;--------------------------------------------------------------------------------------MOV AX,0600H
;Establecer modo texto y CLS
MOV BH,6FH
;Colores
MOV CX,0000H
;Desde el inicio de pantalla
MOV DX,484FH
;Hasta el fin de la pantalla
INT BIOS
;Interrupcion al BIOS
RET
;---------------------------------------------------------------------------------------CLS ENDP
;-------------------------------------------------------------------------------------------CICLO PROC
LEA DX,MEN5
CALL ESCRIBE
;--------------------------------------------------------------------------------------MOV AH,TEC
;Esperar entrada de teclado
INT DOS
;-------------------------------------------------------------------------------MOV AH,2
;Funcion para imprimir

MOV DL,AL
;un caracter en pantalla
INT DOS
CMP AL,CR
;Comparar AL con
JE P
JMP SALIR
CICLO ENDP
;-------------------------------------------------------------------------------------------P PROC
CALL PRO
P ENDP
CODIGO ENDS
;================================================================================================
END CAPI
;================================================================================================
;================================================================================================
;================================================================================================

Vous aimerez peut-être aussi