Замена одного символа на два - Assembler

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

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

Нужно заменить в строке все символы # на &&. Нужно применять цепочечные команды. После первой замены исходная строка перестает копироваться в результирующую. При исходной строке 123#12345 в результат копируется только 123&&.
Листинг программы
  1. data segment para public "data"
  2. source db 127 dup('$')
  3. marker db 127 dup('#')
  4. result db 256 dup('$')
  5. tmp_cx db ?
  6. alt_si db 0
  7. first db 1
  8. iter db 0
  9.  
  10. data ends
  11. code segment para public "code"
  12. start:
  13. assume ds:data,cs:code,es:data
  14. mov ax,data
  15. mov ds,ax
  16. mov es,ax
  17. cld
  18. prog:
  19. mov si,0
  20. mov cx,127
  21. inp:
  22. mov ah, 01h
  23. int 21h
  24. cmp al,0dh
  25. je inp_end
  26. mov source[si], al
  27. inc si
  28. loop inp
  29. inp_end:
  30. xor bx,bx
  31. mov bx,0
  32. lea si,source
  33. lea di,marker
  34. xor cx,cx
  35.  
  36. mov cx,127
  37. n1:
  38. repne cmps source,marker
  39. cmp cx,0
  40. je nxt
  41. mov tmp_cx,cl
  42. xor cx,cx
  43. mov cl,126
  44. sub cl,tmp_cx
  45. lp:
  46. mov al,source[bx]
  47. add bl,iter
  48. mov result[bx],al
  49. sub bl,iter
  50. inc bx
  51. loop lp
  52.  
  53. mov result[bx],'&'
  54. inc bx
  55. mov result[bx],'&'
  56. inc iter
  57. mov cl,tmp_cx
  58. inc si
  59. inc di
  60. loop n1
  61. nxt:
  62. mov si,0
  63. mov cx,255
  64. outp:
  65. cmp result[si],'$'
  66. ;je stp
  67. mov ah,02h
  68. mov dl, result[si]
  69. int 21h
  70. inc si
  71. loop outp
  72. stp:
  73. mov AX,4c00h
  74. int 21h
  75. code ends
  76. end start

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

textual
Листинг программы
  1.     std
  2. rep movsb

Объяснение кода листинга программы

  1. Указатель на область памяти, содержащую символы, которые нужно заменить, хранится в переменной std.
  2. Команда rep movsb используется для повторяющегося копирования байтов из одной области памяти в другую.
    • rep указывает, что операция должна быть повторена несколько раз.
    • movsb копирует один байт из исходной области памяти в указанное место.
  3. В результате выполнения этой команды, символы, хранящиеся в области памяти, на которую указывает std, будут заменены на другие символы или копии самих себя. Точное значение этих символов зависит от того, как именно сконфигурированы перед использованием команды.

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


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

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

9   голосов , оценка 3.556 из 5

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

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

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