Заменить символы «с» на «е» - Assembler

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

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

Товарищи! HELP! Разработать программу вывода строковых данных в файл. Строка вводится с клавиатуры, во введенной строке выполнить замену символов, и вывести результирующую строку в файл. Так вот запускаю, а программа выдаёт "Error! Could not handle file $" если файл существует пустой, или если файла нет вообще то и ничего не записывает. в чём проблема? и что нужно исправить?
Листинг программы
  1. data segment
  2. msg db 255, 0, 255 dup ('$'), '$'
  3. file_name db 'C:\output.txt',0
  4. error_msg db 'Error! Could not handle file $'
  5. msg_size db 0
  6. handler dw 0
  7. data ends
  8. code segment
  9. assume cs:code, ds:data
  10. read_from_keyboard proc
  11. mov ah, 0ah
  12. lea dx, msg
  13. int 21h
  14. ret
  15. read_from_keyboard endp
  16. replace_5 proc
  17. mov si, offset msg + 2 ; move to register si offset of msg's
  18. ; data (we do not need first 2 bytes)
  19. mov al, [si] ; move current (first) symbol from pointer si
  20. ;to register al
  21. met:
  22. cmp al, 'c' ; compare current symbol with 'c'
  23. jne skip ; if current symbol is not equal to 'c' then
  24. ; go to skip label
  25. mov al, 'e'
  26. mov [si], al ; change current symbol to 'e'
  27. skip:
  28. inc si ; go to the next symbol
  29. mov al, [si] ; move current symbol from pointer si
  30. ;to register al
  31. cmp al, '$' ; compare current symbol with '$'
  32. jne met ;if current symbol is not equal to '$' then
  33. ;go to met label
  34. ret
  35. replace_5 endp
  36. print_error proc
  37. ;write error
  38. mov ah, 09h
  39. lea dx, error_msg
  40. int 21h
  41. ret
  42. print_error endp
  43. handle_file proc
  44. ;create file
  45. mov ah, 3ch
  46. xor cx, cx ; cx = 0
  47. lea dx, file_name
  48. int 21h
  49. jc error_file ;check if error occured
  50. mov handler, ax
  51. ;write to file
  52. mov ah, 40h
  53. mov bx, handler
  54. xor cx, cx ; cx = 0
  55. mov cl, [msg_size] ; number of bytes to write
  56. lea dx, msg + 2
  57. int 21h
  58. jc error_file ;check if error occured
  59. cmp ax, cx
  60. jne error_file ;check if string is completely written to file
  61. ;close file
  62. mov ah, 3Eh
  63. mov bx, handler
  64. int 21h
  65. jc error_file ;check if error occured
  66. ret
  67. error_file:
  68. call print_error
  69. ret
  70. handle_file endp
  71. start:
  72. mov ax, ax
  73. mov bx, data
  74. mov ds, bx
  75. ;read string from keybord
  76. call read_from_keyboard
  77. ;get msg size
  78. lea si, msg + 1
  79. mov al, [si]
  80. mov msg_size, al
  81. ; first 2 bytes of msg is max length and length,
  82. ; we do not need this data anymore
  83. ; change second byte to new line symbol and
  84. ; don't use first byte
  85. mov msg + 1, 0ah; change second byte to new line symbol
  86. call replace_5
  87. ;write result to file
  88. call handle_file
  89. mov ah, 4ch
  90. int 21h
  91. code ends
  92. end start

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

textual
Листинг программы
  1. start:
  2. mov ax,ax
  3. mov ax,ax
  4. mov ax,ax
  5. mov ax,ax
  6. mov ax,ax
  7. mov ax,ax
  8. mov ax,ax
  9. mov ax,ax
  10. mov ax,ax

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

  1. Создаётся метка start.
  2. Загружается значение из регистра ax в регистр ax.
  3. Загружается значение из регистра ax в регистр ax.
  4. Загружается значение из регистра ax в регистр ax.
  5. Загружается значение из регистра ax в регистр ax.
  6. Загружается значение из регистра ax в регистр ax.
  7. Загружается значение из регистра ax в регистр ax.
  8. Загружается значение из регистра ax в регистр ax.
  9. Загружается значение из регистра ax в регистр ax.
  10. Загружается значение из регистра ax в регистр ax. Как видно, данный код просто загружает значение из регистра ax в регистр ax несколько раз.

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


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

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

7   голосов , оценка 3.714 из 5

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

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

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