Исправление вывода строки - Assembler

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

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

Уважаемы, помогите поправить программу. Суть программы, вводим строку ограниченно длинны, например 5 символов, и выводим эту строку по углам экрана разными цветами. Проблема заключается в выводе, если вводить строку меньше 5 символов, то она дополняется ненужными символами, как это можно поправть? Зарнее благодарен за помощь. Код прогаммы прилагаю.
Листинг программы
  1. data segment
  2. string db 5 dup (5)
  3. lstr dw $ - string
  4. data ends
  5. code segment
  6. assume cs:code,ds:data
  7. start:
  8. mov ax,data
  9. mov ds,ax
  10. mov ax,3
  11. int 10h
  12. mov cx,5
  13. call INPUT
  14. mov ax,0b800h
  15. mov es,ax
  16. ;левый верхний угол
  17. xor di,di
  18. mov bl,10
  19. call OUT_STRING
  20. ;левый нижний угол
  21. mov di,160*24
  22. mov bl,11
  23. call OUT_STRING
  24. ;правый верхний угол
  25. mov ax,lstr
  26. shl ax,1
  27. mov di,160
  28. sub di,ax
  29. mov bl,12
  30. call OUT_STRING
  31. ;правый нижний угол
  32. mov ax,lstr
  33. shl ax,1
  34. mov di,160*25
  35. sub di,ax
  36. mov bl,13
  37. call OUT_STRING
  38. mov ah,10h
  39. int 16h
  40. mov ah,4ch
  41. int 21h
  42. OUT_STRING proc
  43. mov cx,lstr
  44. xor si,si
  45. O1:
  46. mov al,byte ptr string[si]
  47. mov byte ptr es:[di],al
  48. inc si
  49. inc di
  50. mov byte ptr es:[di],bl
  51. inc di
  52. loop O1
  53. ret
  54. OUT_STRING endp
  55. INPUT proc near
  56. xor di,di
  57. m1:
  58. mov ah,0
  59. int 16h
  60. cmp al,0
  61. jne m3
  62. mov ah,0
  63. int 16h
  64. jmp m1
  65. m3:
  66. cmp al,13
  67. je quit
  68. m4:
  69. cmp al,33
  70. jle m1
  71. mov string[di],al
  72. inc di
  73. mov ah,2
  74. mov di,al
  75. int 21h
  76. loop m1
  77. quit:
  78. ret
  79. INPUT endp
  80.  
  81. code ends
  82. end start

Решение задачи: «Исправление вывода строки»

textual
Листинг программы
  1. string  db 5 dup (20h)

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

  1. В начале кода объявляется переменная типа string с именем str и значением, которое состоит из 5 повторяющихся символов 20h. Это означает, что в памяти будет выделено 5 байт для хранения строки.
  2. Далее, с помощью команды mov в регистр ax записывается значение 20h.
  3. Затем, с помощью команды mov из регистра ax в память по адресу str записывается значение 20h. Это означает, что первый символ в строке str будет равен 20h.
  4. Последней командой mov из регистра ax в память по адресу str+1 записывается значение 20h. Это означает, что второй символ в строке str будет также равен 20h.
  5. Процесс повторяется еще 3 раза, пока все 5 символов в строке str не будут равны 20h.
  6. Код не содержит инструкций для вывода строки str на экран, поэтому предполагается, что это должно быть реализовано в другом месте программы.
  7. Код не содержит инструкций для изменения значения переменной str, поэтому предполагается, что это должно быть реализовано в другом месте программы.

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


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

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

15   голосов , оценка 3.933 из 5

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

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

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