Advertisement
Guest User

Untitled

a guest
Jan 4th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. .model small
  2. .stack 100h
  3. .data
  4. stroka db 80 dup(?),'$'
  5. symb db ?,' ','$' ; можно и не выделять память для символа
  6. msg_in db 0ah,0dh,"Vvedite simvol:",0ah,0dh,"$"
  7. msg db 0ah,0dh,"Simvol ","$"
  8. msg1 db "nayden! Ego index - ","$"
  9. msg_err db "ne nayden.","$"
  10. c10 dw 10
  11. .code
  12. start:
  13. mov ax,@data
  14. mov ds,ax
  15. xor bx,bx ; в bx - индекс вводимого символа
  16. input_loop:
  17. mov ah,01h ; считываем символ
  18. int 21h
  19. cmp al,13 ; если это enter
  20. je for_find ; то конец ввода
  21. mov stroka[bx],al ; иначе записываем символ в строку
  22. cmp bx,80 ; если ввели 80 символов
  23. je for_find ; то конец ввода
  24. inc bx ; увеличиваем bx
  25. jmp input_loop
  26. for_find:
  27. lea dx,msg_in ; вывод msg_in
  28. mov ah,09h
  29. int 21h
  30. mov ah,01h ; ввод нужного символа
  31. int 21h
  32. mov byte ptr symb,al ; сохраняем его в symb ( можно использовать любой из свободных регистров, если хошь)
  33. mov cx,bx ; в cx - длина строки
  34. xor bx,bx ; bx - индекс элемента
  35. mov ah,byte ptr symb ; в ah - нужный символ
  36. find:
  37. cmp ah,stroka[bx] ; сравниваем текущий элемент с нужным симв
  38. je found ; если совпадают, то jmp на found
  39. inc bx ; переход к следующему элементу
  40. loop find ; цикл повторяется cx раз
  41. lea dx,msg ; если символ не найден, то
  42. mov ah,09h ; вывод msg
  43. int 21h
  44. lea dx,symb ; вывод самого символа
  45. int 21h
  46. lea dx,msg_err ; вывод msg_err
  47. int 21h
  48. jmp end_program ; завершить программу
  49. found: ; если найден символ
  50. lea dx,msg ; вывод msg
  51. mov ah,09h
  52. int 21h
  53. lea dx,symb ; вывод самого символа
  54. int 21h
  55. lea dx,msg1 ; вывод msg1
  56. int 21h
  57. mov ax,bx ; сохраняем индекс в ax
  58. xor cx,cx ; cx - счетчик цифр
  59. number_to_string:
  60. xor dx,dx ; подготовка к делению
  61. div c10 ; деление
  62. add dx,30h ; в dx - ASCII-код остатка от деления
  63. push dx ; сохраняем его в стеке
  64. inc cx ; инкремент счетчика цифр
  65. cmp ax,0 ; цикл, пока частное ненулевое
  66. jne number_to_string
  67. out_index_loop: ; цикл вывода индекса
  68. pop dx ; извелекаем очередную цифру
  69. mov ah,02h ; выводим ее на экран
  70. int 21h
  71. loop out_index_loop
  72. end_program:
  73. mov ah,4ch
  74. int 21h
  75. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement