0% ont trouvé ce document utile (0 vote)
7 vues5 pages

Programa

Transféré par

JoseAcevedo
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues5 pages

Programa

Transféré par

JoseAcevedo
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

;Programa
:[Link]
;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