Professional Documents
Culture Documents
;se pasa a AX la direccin del segmento de codigo ;Se asigna al segmento de datos la misma direccin del segmento ;de cdigo osea segmentos de cdigo y datos se solapan ;esto es importante para poder usar algunas funciones que requieren ;que los datos estn en el segmento de datos con datos que se ;encuentran en el segmento de codigo.
; Desplegar los mensajes de portada del programa, ; Para desplegar un mensaje en pantalla se debe cargar en el registro DX al offset de la cadena de ;caracteres esto se logra mediante la instruccin MOV DX, OFFSET nombre_de_a_cadena ;luego se invoca a la funcin 09 de la interrupcin 21H. ;Este tipo de interrupciones si es que se les puede llamar as porque en realidad forman parte del ;flujo normal del progre, son una coleccin de funciones del sistema operativo o del BIOS que ;permite realizar varias funciones como por ejemplo acceder al disco, escribir en pantalla, leer el ;teclado, etc. ; Para invocarlas normalmente se escribe en AH el nmero de la funcin a usar y se invoca la interrupcin ; mediante el comando INT, por ejemplo INT21H MOV AH,09H MOV DX, OFFSET POR INT 21H CALL RETOR MOV DX, OFFSET POR2 INT 21H CALL RETOR ;Queremos invocar la funcin 09 de la INT 21H para imprimir en pantalla ;Movemos a DX el offset del mensaje POR ;Invocamos la interrupcin 21. ;Insertamos un RETURN para pasar a la otra lnea ;Movemos a DX el offset del mensaje POR2 ;Invocamos la interrupcin 21 de nuevo ;Insertamos un RETURN para pasar a la otra lnea
; Ahora entramos en el bucle principal MAIN1: ; Se despliega el mensaje ESCRIBA UN CARACTER=> MOV AH,09H MOV DX, OFFSET MES INT 21H ;Ahora capturamos una letra del teclado mediante la funcin 1 de la INT 21H. ;El carcter capturado queda almacenado en el registro AL MOV AH,1 MOV DL,0FFH INT 21H CALL RETOR
; Verificamos si el carcter que se introdujo es el ? 3FH, si es asi saltamos al FIN del programa CMP AL,3FH ;CMP Compara dos registros JE FIN ;JE Salta si en la ultima comparacin los registro eran iguales ;A continuacin se identifica si el carcter es una letra mayscula, minscula, un numero o un smbolo. ;Para lograr esto se debe tener en cuenta los siguiente: ; 2Fh<Nmeros<3Ah ; 40h<Maysculas<5bh ; 60h<Minsculas<7b
; Smbolos todos lo otros CMP AL,30H JB ERROR CMP AL,3AH JB NUM CMP AL,41H JB ERROR CMP AL,5BH JB MAY CMP AL,61H JB ERROR CMP AL,7BH JB MINU JMP ERROR ;Es un smbolo? ;El comando JB salta si el registro a la izquierda es menor que el de la derecha
;Es un numero ;Es un smbolo ;Es una mayscula ;Es un smbolo ;Es una minscula ;Es un smbolo
ERROR:MOV AH,09H ; Procedimiento de error, se tecleo un smbolo o carcter no valido MOV DX,OFFSET ME ;Se despliega el mensaje de error INT 21H JMP MAIN1 ;Se regresa al bucle principal ;PROCEDIMIENTO PARA MAYUSCULAS MAY: push ax; ;Guardamos AX,en la pila aunque en este caso no es necesario es una ;buena costumbre que siempre se guarde el contenido de los registros ; principales al llamar un procedimiento o subrutina. ;Desplegamos el mensaje: ; 'LA LETRAS MAYUSCULA QUE USTED OPRIMIO FUE
MOV AH,09H
MOV DX, OFFSET RESPMAY INT 21H pop ax ;Se re establece AX sacandolo de la pila ;Invocamos la funcin 06 de la interrupcin 21H para imprimir en pantalla ;una sola letra que se encuentra almacenada en el registro DL MOV AH,06H ;Funcin 06 MOV DL,AL ;Movemos la letra que estaba en AL a DL para imprimirla en pantalla INT 21H ;Invocamos la funcin 21H CALL RETOR ;Inserta un RETURN JMP MAIN1 ;Salta al bucle principal ;PROCEDIMIENTO PARA NMEROS NUM: push ax ; MOV AH,09H MOV DX, OFFSET RESPNUM INT 21H
pop ax MOV AH,06H MOV DL,AL INT 21H CALL RETOR JMP MAIN1 ; PROCEDIMIENTO PARA MINSCULAS ;Este procedimiento convierte las minsculas a maysculas restndoles 20h a su valor ASCII MINU: push ax MOV AH,09H MOV DX, OFFSET RESPMIN INT 21H pop ax MOV AH,06H SUB AL,20H MOV DL,AL INT 21H CALL RETOR JMP MAIN1 PORTADA:
; Convierte a mayscula
JMP MAIN1 FIN: MOV AH,4CH INT 21H MAIN ENDP RETOR PROC NEAR ; TECLA RETURN PUSH AX MOV AH,06H MOV DL,0DH INT 21H ; RETORNO DE CARRO MOV AH,06H MOV DL,0AH INT 21H ; ALIMENTACION DE LINEA POP AX RET RETOR ENDP ;Siempre antes de salir se invoca la funcin 4Ch de la INT 21h para ; retornar el control al sistema operativo.