Professional Documents
Culture Documents
;En ensamblador se deben definir los segmentos de memoria donde se alojaran el código, ;los datos y la pila.
;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
; Convenciones
;Instrucciones del procesador o compilador en mayúscula normal ejemplo “MOV AX,BX”
;identificadores o datos insertados por el usuaria en cursiva “oprima enter”
;Vamos a declarar los mensajes que aparecerán en pantalla durante la ejecución del ;programa la sintaxis es la
siguiente
; nombre_de_cadena DB 'Mensaje','$'
;el $ es porque en asm toda cadena debe terminar con este caracter
; 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.
;
MOV AX,CS ;se pasa a AX la dirección del segmento de codigo
MOV DS,AX ;Se asigna al segmento de datos la misma dirección del segmento
;de código osea segmentos de código y datos se solapan
;esto es importante para poder usar algunas funciones que requieren
;que los datos estén en el segmento de datos con datos que se
;encuentran en el segmento de codigo.
MOV AH,09H ;Queremos invocar la función 09 de la INT 21H para imprimir en pantalla
MOV DX, OFFSET POR ;Movemos a DX el offset del mensaje POR
INT 21H ;Invocamos la interrupción 21.
CALL RETOR ;Insertamos un RETURN para pasar a la otra línea
MAIN1:
MOV AH,09H
MOV DX, OFFSET MES
INT 21H
;Ahora capturamos una letra del teclado mediante la función 1 de la INT 21H.
;El carácter capturado queda almacenado en el registro AL
MOV AH,1
MOV DL,0FFH
INT 21H ; LEE EL CARACTER DEL TECLADO
CALL RETOR ; RETURN
; Verificamos si el carácter 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 comparación los registro eran iguales
CMP AL,3AH
JB NUM ;Es un numero
CMP AL,41H
JB ERROR ;Es un símbolo
CMP AL,5BH
JB MAY ;Es una mayúscula
CMP AL,61H
JB ERROR ;Es un símbolo
CMP AL,7BH
JB MINU ;Es una minúscula
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.
MINU:
push ax
MOV AH,09H
MOV DX, OFFSET RESPMIN
INT 21H
pop ax
MOV AH,06H
SUB AL,20H ; Convierte a mayúscula
MOV DL,AL
INT 21H
CALL RETOR
JMP MAIN1
PORTADA:
JMP MAIN1
FIN:
MOV AH,4CH ;Siempre antes de salir se invoca la función 4Ch de la INT 21h para
; retornar el control al sistema operativo.
INT 21H
MAIN ENDP
COD ENDS
END MAIN