Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .stack 256
- EscribirMensaje MACRO message
- push ax ;agregar valores a la pila
- push dx ;agregar valores de la pila
- mov ah, 09 ;mostrar el string
- mov dx, offset message ;mostrar el mensaje
- int 21h ;llamada al sistema operativo
- pop dx ;transfiere el ultimo valor almacenado en la pila
- pop ax ;transfiere el ultimo valor almacenado en la pila
- ENDM
- .data
- ;================ Variables aquí =====================
- msg1 db 10, 13, 'Tarea 2 - Juan D. Lopez - 2015-0793 $'
- msg2 db 10, 13, "Escriba una frase o palabra: $"
- msg3 db "Se ingres",162,": $"
- msg4 db 10, 13, "Ingrese la letra a buscar: $"
- msg5 db "Cantidad de letras: $"
- msg6 db 10, 13, "No encontrado $"
- msg7 db 10, 13, "Se deseas salir, pulse la tecla (ESCAPE), si no presiona cualquier letra"
- symbol db 10, 13, "$"
- count db 0
- string label byte
- _ascii db 0FFH dup ('$')
- char db ?
- char2 db ?
- l1 db ?
- string_len dw ?
- .CODE
- MAIN PROC
- mov ax, @DATA
- mov ds, ax
- DisplayPrompt:
- mov count, 0 ;declara el contador a 0
- EscribirMensaje msg1 ;Escribe el mensaje con su funcion
- EscribirMensaje msg2 ;Escribe el mensaje con su funcion
- lea SI, string ;lea si equivale a mov si, offset string
- call ReadString ;llama a la función ReadString
- mov string_len, ax ;asigna la posición del string
- EscribirMensaje msg3 ;Escribe el mensaje con su funcion
- EscribirMensaje string ;Escribe el mensaje con su funcion
- EscribirMensaje msg4 ;Escribe el mensaje con su funcion
- mov ah, 01h ;para capturar la pantalla
- int 21h ;llamda al sistema operativo
- mov char, al ;guardo el valor capturado por el teclado
- mov ah, 01h ;para capturar la pantalla
- int 21h ;llamada al sistema operativo
- cmp al, 13 ;compara si la tecla ENTER si entró
- je NO ;si entró pues llamar la funcion "NO" (Salta si es igual)
- call CAP1 ;llamar la función "CAP1"
- CAP1:
- mov ah, 01h ;para capturar la pantalla
- int 21h ;llamada al sistema operativo
- mov char2, al ;guardo el valor capturado por el teclado
- NO:
- EscribirMensaje symbol ; mostrar el mensaje db 13,10, "$"
- mov si, offset _ascii ; paso al sistema la ubicación del letrero.
- mov cl, l1
- mov ch, 0 ;declaro la contadora en 0
- CHECK:
- mov al, [si] ;obtengo el la ubicación del caracter _ascii
- cmp char, al ;comparamos cada caracter si es igual
- jne SKIP ;si no es igual salta a la función "OMITIR"
- inc count ;incrementa la contadora
- SKIP:
- cmp char2, al ;comparamos cada caracter si es igual
- jne SKIP2 ;si no es igual salta a la funcion "OMITIR2"
- inc count ;incrementa la contadora
- inc si ;incrementa la ubicacion del caracter
- loop CHECK ;retorna a CHECK
- SKIP2:
- inc si ;incrementa la contadora
- loop CHECK ;retorna a CHECK
- cmp count, 0 ;comparar si la contadora es igual a 0
- je NotFound ;entonces si es igual, no encontró caracteres y envía a la funcion "NO ENCONTRADO"
- EscribirMensaje symbol ;mostrar el mensaje db 13,10, "$"
- EscribirMensaje msg5 ;mostrar el mensaje
- mov dl, count ;para capturar la pantalla de la contadora
- add dl, 30H ;agregar mas el caracter "0"
- mov ah, 02H ;para imprimir en pantalla la contadora
- int 21h ;llamada al sistema operativo
- EscribirMensaje msg7 ;mostrar el mensaje
- start:
- mov ah, 01h ;para capturar la pantalla
- int 21h ;llamada al sistema operativo
- cmp al, 27 ;compara la tecla ESC
- je Exit ;si comparó salta a la función "EXIT"
- jmp DisplayPrompt ;salta a la función
- NotFound:
- EscribirMensaje msg6 ;mostrar el mensaje
- jmp Exit ; salta la función
- Exit:
- mov ah,4ch ;para finalizar el programa
- mov al,00 ;asigna el valor
- int 21h ;llamada al sistema operativo
- MAIN ENDP
- ;============ Funciones aquí =====================
- ReadString PROC NEAR
- mov cx, si ;asigno el valor de la ubicación de si a CX
- Leer:
- mov ah, 01h ;para capturar la pantalla
- int 21h ;llamada al sistema operativo
- cmp al, 13 ;compara la tecla ENTER
- je Done ;si es igual llama la función "DONE"
- mov [si], al ;asigno el valor de la ubicación del letrero capturada.
- inc si ;incrementa la ubicación del letrero
- jmp Leer ;salta a la función leer si no ha dado la tecla "ENTER"
- Done:
- mov [si], "$" ;cuando llega la última ubicación del letrero, se le asigna un caracter para cerrar la cadena
- mov ax, si ;asigno ax de la ubicación del letrero
- sub ax, cx ;resta el cx al ax
- ret ; fin de la función
- ReadString ENDP
- end MAIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement