Advertisement
Guest User

Untitled

a guest
Oct 24th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small
  2. .stack 256
  3.  
  4. EscribirMensaje MACRO message
  5.   push ax                 ;agregar valores a la pila
  6.   push dx                 ;agregar valores de la pila
  7.   mov ah, 09              ;mostrar el string
  8.   mov dx, offset message  ;mostrar el mensaje
  9.   int 21h                 ;llamada al sistema operativo
  10.   pop dx                  ;transfiere el ultimo valor almacenado en la pila
  11.   pop ax                  ;transfiere el ultimo valor almacenado en la pila
  12. ENDM
  13.  
  14. .data
  15.  
  16. ;================ Variables aquí =====================
  17.  
  18. msg1        db 10, 13, 'Tarea 2 - Juan D. Lopez - 2015-0793 $'
  19. msg2        db 10, 13, "Escriba una frase o palabra: $"
  20. msg3        db "Se ingres",162,": $"
  21. msg4        db 10, 13, "Ingrese la letra a buscar: $"
  22. msg5        db "Cantidad de letras: $"
  23. msg6        db 10, 13, "No encontrado $"
  24. msg7        db 10, 13, "Se deseas salir, pulse la tecla (ESCAPE), si no presiona cualquier letra"
  25. symbol      db 10, 13, "$"
  26. count       db 0
  27. string      label byte
  28. _ascii      db 0FFH dup ('$')
  29. char        db ?
  30. char2       db ?
  31. l1          db ?
  32. string_len  dw ?
  33.  
  34. .CODE
  35. MAIN PROC
  36.     mov     ax, @DATA
  37.     mov     ds, ax
  38.  
  39. DisplayPrompt:
  40.       mov count, 0            ;declara el contador a 0
  41.       EscribirMensaje msg1    ;Escribe el mensaje con su funcion
  42.       EscribirMensaje msg2    ;Escribe el mensaje con su funcion
  43.  
  44.       lea SI, string          ;lea si equivale a mov si, offset string
  45.       call ReadString         ;llama a la función ReadString
  46.       mov string_len, ax      ;asigna la posición del string
  47.  
  48.       EscribirMensaje msg3    ;Escribe el mensaje con su funcion
  49.       EscribirMensaje string  ;Escribe el mensaje con su funcion
  50.       EscribirMensaje msg4    ;Escribe el mensaje con su funcion
  51.  
  52.       mov ah, 01h             ;para capturar la pantalla
  53.       int 21h                 ;llamda al sistema operativo
  54.       mov char, al            ;guardo el valor capturado por el teclado
  55.  
  56.       mov ah, 01h             ;para capturar la pantalla
  57.       int 21h                 ;llamada al sistema operativo
  58.       cmp al, 13              ;compara si la tecla ENTER si entró
  59.       je NO                   ;si entró pues llamar la funcion "NO" (Salta si es igual)
  60.       call CAP1               ;llamar la función "CAP1"
  61.  
  62.     CAP1:
  63.       mov ah, 01h             ;para capturar la pantalla
  64.       int 21h                 ;llamada al sistema operativo
  65.       mov char2, al           ;guardo el valor capturado por el teclado
  66.  
  67.       NO:
  68.       EscribirMensaje symbol  ; mostrar el mensaje db 13,10, "$"
  69.  
  70.     mov si, offset _ascii    ; paso al sistema la ubicación del letrero.
  71.  
  72.       mov cl, l1            
  73.       mov ch, 0             ;declaro la contadora en 0
  74.  
  75.     CHECK:
  76.       mov al, [si]         ;obtengo el la ubicación del caracter _ascii
  77.       cmp char, al         ;comparamos cada caracter si es igual
  78.       jne SKIP             ;si no es igual salta a la función "OMITIR"
  79.       inc count            ;incrementa la contadora
  80.  
  81.     SKIP:
  82.       cmp char2, al       ;comparamos cada caracter si es igual
  83.       jne SKIP2           ;si no es igual salta a la funcion "OMITIR2"
  84.       inc count           ;incrementa la contadora
  85.       inc si              ;incrementa la ubicacion del caracter
  86.       loop CHECK          ;retorna a CHECK
  87.  
  88.     SKIP2:                
  89.       inc si              ;incrementa la contadora
  90.       loop CHECK          ;retorna a CHECK
  91.  
  92.       cmp count, 0        ;comparar si la contadora es igual a 0
  93.       je NotFound         ;entonces si es igual, no encontró caracteres y envía a la funcion "NO ENCONTRADO"
  94.  
  95.       EscribirMensaje symbol  ;mostrar el mensaje db 13,10, "$"
  96.  
  97.       EscribirMensaje msg5    ;mostrar el mensaje
  98.       mov dl, count           ;para capturar la pantalla de la contadora
  99.       add dl, 30H             ;agregar mas el caracter "0"
  100.       mov ah, 02H             ;para imprimir en pantalla la contadora
  101.       int 21h                 ;llamada al sistema operativo
  102.  
  103.       EscribirMensaje msg7   ;mostrar el mensaje
  104.  
  105.     start:
  106.       mov ah, 01h         ;para capturar la pantalla
  107.       int 21h             ;llamada al sistema operativo
  108.       cmp al, 27          ;compara la tecla ESC
  109.       je Exit             ;si comparó salta a la función "EXIT"
  110.  
  111.       jmp DisplayPrompt     ;salta a la función  
  112.  
  113.     NotFound:
  114.       EscribirMensaje msg6  ;mostrar el mensaje
  115.       jmp Exit              ; salta la función
  116.  
  117.  
  118.     Exit:
  119.       mov ah,4ch          ;para finalizar el programa
  120.       mov al,00           ;asigna el valor
  121.       int 21h             ;llamada al sistema operativo
  122.  
  123. MAIN ENDP
  124.  
  125.  
  126. ;============ Funciones aquí =====================
  127.  
  128. ReadString PROC NEAR
  129.     mov cx, si       ;asigno el valor de la ubicación de si a CX
  130.   Leer:
  131.     mov ah, 01h      ;para capturar la pantalla
  132.     int 21h          ;llamada al sistema operativo
  133.     cmp al, 13       ;compara la tecla ENTER
  134.     je Done          ;si es igual llama la función "DONE"
  135.     mov [si], al     ;asigno el valor de la ubicación del letrero capturada.
  136.     inc si           ;incrementa la ubicación del letrero
  137.     jmp Leer         ;salta a la función leer si no ha dado la tecla "ENTER"
  138.   Done:
  139.     mov [si], "$"   ;cuando llega la última ubicación del letrero, se le asigna un caracter para cerrar la cadena
  140.     mov ax, si      ;asigno ax de la ubicación del letrero
  141.     sub ax, cx      ;resta el cx al ax
  142.   ret               ; fin de la función
  143. ReadString ENDP
  144.  
  145.  
  146. end MAIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement