Замена символов в строке - Assembler

Узнай цену своей работы

Формулировка задачи:

В общем задача - заменить все точки в двух строках на восклицательные знаки. Пробую это сделать для второй строки сначала - не выходит.
Листинг программы
  1. assume cs: code
  2. data1 segment
  3. buffer db 254,0,254 dup ('$')
  4. str1 db 'enter string:', 0Dh, 0Ah, '$'
  5. str3 db 0Dh, 0Ah, '$'
  6. str2 db 'result:', 0Dh, 0Ah, '$'
  7. data1 ends
  8. data2 segment
  9. buffer2 db 254,0,254 dup ('$')
  10. str4 db 'enter string:', 0Dh, 0Ah, '$'
  11. str6 db 0Dh, 0Ah, '$'
  12. str5 db 'result:', 0Dh, 0Ah, '$'
  13. data2 ends
  14. code segment
  15. start:
  16. ;Ввод строки 1
  17. mov ax, data1
  18. mov ds, ax
  19. mov ah,09h
  20. mov dx, offset str1
  21. int 21h
  22. mov ah,0ah
  23. mov dx, offset buffer
  24. int 21h
  25. mov ah,09h
  26. mov dx, offset str3
  27. int 21h
  28. ;;;;; Ввод строки 2
  29. mov ax, data2
  30. mov ds, ax
  31. mov ah,09h
  32. mov dx, offset str4
  33. int 21h
  34. mov ah,0ah
  35. mov dx, offset buffer2
  36. int 21h
  37. mov ah,09h
  38. mov dx, offset str6
  39. int 21h
  40. ;;;;;; Очистка экрана
  41. mov ah,0
  42. mov al,2
  43. int 10h
  44.  
  45. ;;;; Вывод строки 1
  46. mov ax,data1
  47. mov ds,ax
  48. mov ah,09h
  49. mov dx, offset str2
  50. int 21h
  51. mov ah,09h
  52. lea dx, buffer+2
  53. int 21h
  54. mov ah,09h
  55. mov dx, offset str3
  56. int 21h
  57. ;;;; Вывод строки 2
  58. mov ax, data2
  59. mov ds, ax
  60. mov ah,09h
  61. mov dx, offset str5
  62. int 21h
  63. mov ah,09h
  64. lea dx, buffer2+2
  65. int 21h
  66. ;;;
  67. ;;;;; Замена . на !
  68. mov ax, data2
  69. mov ds, ax
  70. MOV AL,'.' ;Искомый символ.
  71. CLD ;Установка флага направления в 0.
  72. MOV CX,254 ;Макс. длина поля buffer2
  73. LEA DI,buffer2 ;Адрес поля buffer2
  74. REPNE SCASB ;Поиск.
  75. JNZ K20 ;Символ найден?
  76. DEC DI ;Да - уменьшить адрес.
  77. MOV BYTE PTR[DI],21H
  78. K20: RET
  79. ;;;;; Вывод строки 2 после изменения
  80. mov ah,09h
  81. mov dx, offset str6
  82. int 21h
  83. mov ah,09h
  84. mov dx, offset str5
  85. int 21h
  86. mov ah,09h
  87. lea dx, buffer2+2
  88. int 21h
  89. quit:
  90. mov ax, 4c00h
  91. int 21h
  92. code ends
  93. end start

Решение задачи: «Замена символов в строке»

textual
Листинг программы
  1. dos_inp macro lbl, sz
  2. _ib_    struc
  3. max db sz
  4. len db ?
  5. bf  db sz dup('$')
  6. _ib_    ends
  7. lbl _ib_ <>
  8. endm
  9.  
  10. .model  small
  11. .386
  12. .stack
  13. .data
  14. entr    db 0Dh, 0Ah,'enter  string:$'
  15. crlf    db 0Dh, 0Ah, '$'
  16. rslt    db 0Dh, 0Ah,'result:$'
  17. dos_inp buffer, 80
  18. dos_inp buffer2,80
  19.  
  20. .code
  21. start:
  22. ;Ввод строки 1
  23.     mov ax, @data
  24.     mov ds, ax
  25.     mov es, ax
  26.  
  27.     mov ah,09h
  28.     lea dx, entr
  29.     int 21h
  30.  
  31.     mov ah,0ah
  32.     lea dx, buffer
  33.     int 21h
  34.  
  35.     mov ah,09h
  36.     lea dx, crlf
  37.     int 21h
  38.  
  39. ;;;;; Ввод строки 2
  40.     mov ah,09h
  41.     lea dx, entr
  42.     int 21h
  43.  
  44.     mov ah,0ah
  45.     lea dx, buffer2
  46.     int 21h
  47.  
  48. ;;;; Вывод строки 1
  49.  
  50.     mov ah,09h
  51.     lea dx, rslt
  52.     int 21h
  53.  
  54.     mov ah,09h
  55.     lea dx, buffer.bf
  56.     int 21h
  57.  
  58. ;;;; Вывод строки 2
  59.  
  60.     mov ah,09h
  61.     lea dx, rslt
  62.     int 21h
  63.  
  64.     mov ah,09h
  65.     lea dx, buffer2.bf
  66.     int 21h
  67.  
  68. ;;;;;   Замена . на !
  69.     MOVzx   CX, buffer2.len     ;Макс. длина поля buffer2
  70.     lea si, buffer2.bf      ;Адрес поля buffer2
  71. l1:;                ;Поиск.
  72.     lodsb
  73.     cmp al, 2Eh
  74.     JNZ K20         ;Символ найден?
  75.     MOV BYTE PTR[si-1], 21h
  76. K20:    loop    l1
  77.  
  78.     mov ah,09h
  79.     lea dx, rslt
  80.     int 21h
  81.  
  82.     mov ah,09h
  83.     lea dx, buffer2.bf
  84.     int 21h
  85.  
  86. quit:
  87.     mov ax, 4c00h
  88.     int 21h
  89.     end start

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут