You are on page 1of 4

Programacin en Ensamblador

Carlos F. Jimnez P. Cali Julio 9 de 2005

Ejemplo del uso del teclado y la pantalla


;En ensamblador se deben definir los segmentos de memoria donde se alojaran el cdigo, ;los datos y la pila. ;-El cdigo son las instrucciones que se da al microprocesador ;-Los datos son tablas y espacio para variables. ;-El segmento de stack es un rea de pila de memoria la cual usa el procesador para ; ;almacenar las direcciones de memoria para retornar despus de instrucciones call o ;interrupciones, tambin puede ser usada por el usuario para guardar datos mediante las ;instrucciones push y pop. ;Comenzamos por definir el segmento de pila o stack reservando para este 256 bytes. STACK SEGMENT PARA STACK 'STACK' DB 256 DUP(0) ;256 BYTES DE ESPACIO EN EL STACK STACK ENDS ASSUME CS:COD ,DS:COD ;Ahora comienza el segmento de codigo COD SEGMENT ;Primero declaramos algunas variables ; Convenciones ;Instrucciones del procesador o compilador en mayscula normal ejemplo MOV AX,BX ;identificadores o datos insertados por el usuaria en cursiva oprima enter ;Vamos a declarar los mensajes que aparecern en pantalla durante la ejecucin del ;programa la sintaxis es la siguiente ; nombre_de_cadena DB 'Mensaje','$' ;el $ es porque en asm toda cadena debe terminar con este caracter POR DB 'Ejemplo del uso del teclado y la pantalla ','$' POR2 DB 'Presentado por Carlos F. Jimnez. Cali Julio 9 de 2005,'$' MES DB 'ESCRIBA UN CARACTER=> ','$' ME DB 'CARACTER INVALIDO!!!!','$' RESPMIN DB 'USTED OPRIMIO UNA MINUSCULA ESTA EL LA MAYUSCULA CORRESPONDIENTE: ','$' RESPMAY DB 'LA LETRAS MAYUSCULA QUE USTED OPRIMIO FUE: ','$' RESPNUM DB 'EL NUMERO OPRIMIDO FUE: ','$' P DB 0 ; Ahora comenzamos con el procedimiento principal, es algo as como el main( ) en C,. ; por aqu se comienza a ejecutar el un programa escrito en asm. MAIN PROC FAR ;

MOV AX,CS MOV DS,AX

;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

; LEE EL CARACTER DEL TECLADO ; RETURN

; 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.

COD ENDS END MAIN

You might also like