Переставить слова, поменяв местами первое слово с последним, второе с предпоследним - Assembler

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

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

Прошу помощи с задачей. Эмулятор i8086 Задана строка из буквенных символов, разделенных на слова одним или несколькими пробелами. Удалить лишние пробелы в строке и переставить слова, поменяв местами первое слово с последним, второе с предпоследним и т.д.
Вот код. Он вроде бы рабочий, но упростить бы хотелось
Листинг программы
  1. data segment
  2. in_str db 80,?,82 dup (?)
  3. out_str db 80 dup (?)
  4. enter db 0dh, 0ah, '$'
  5. data ends
  6. code segment
  7. assume cs: code, ds: data
  8. start: mov ax, data
  9. mov ds, ax
  10. mov ah, 0ah
  11. int 21h
  12. lea bx, in_str+2
  13. xor cx, cx
  14. mov cl, in_str+1
  15. dec cx
  16. add bx, cx ; чтение с конца строки
  17. xor ax, ax
  18. inc cx
  19. beg: mov dh, cl ; запомним cl через dh
  20. mov al, [bx]
  21. cmp al, ' ' ; сравнение al с пробелом
  22. jne m ; если не равно то на m
  23. s: mov cl, dl ; присвоить счетчик dl в cl
  24. beg1: pop ax
  25. mov out_str[si], al
  26. inc si
  27. loop beg1
  28.  
  29. mov out_str[si], ' ' ; прибавление пробела после перестановки
  30. inc si
  31. mov dl, 0 ; обнуление счетчика
  32. cmp dl, 0
  33. je n
  34. m: inc dl ; счетчик числа элементов до пробела
  35. push ax
  36. cmp dh, 1 ; если конец строки то на s
  37. je s
  38.  
  39. n:
  40. dec bx
  41. mov cl, dh ; то что запомнили в dh обратно в cl
  42. loop beg
  43. xor dx, dx
  44. lea dx, enter
  45. mov ah, 09h
  46. int 21h
  47. lea dx, out_str
  48. mov ah, 09h
  49. int 21h
  50. mov ah, 0ah
  51. int 21h
  52. quit: mov ax, 4c00h
  53. int 21h
  54. code ends
  55. end start

Решение задачи: «Переставить слова, поменяв местами первое слово с последним, второе с предпоследним»

textual
Листинг программы
  1.                mov dl, 0           ; обнуление счетчика
  2.                jmp n

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

  1. Устанавливается значение переменной dl в 0 с помощью инструкции mov dl, 0. В данном случае, регистр dl используется как счетчик.
  2. Программа осуществляет переход на метку n с помощью инструкции безусловного перехода jmp n.

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


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

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

6   голосов , оценка 4.5 из 5

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

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

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