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

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

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

Ребят, нужна ваша помощь. Вот у меня задание Ввести с клавиатуры строку. Переставить в ней символы, поменяв местами первый символ с последним, второй с предпоследним и т.д. Вывести результаты на экран. Программу я написал. Вот программный код. Только при запуске у меня идет зацикливание. Подскажите, что я сделал не так. И можете по возможности исправить. Буду очень благодарен.
Листинг программы
  1. data segment
  2. schet dw 1
  3. OLD_CS dw ?
  4. OLD_IP dw ?
  5. data ends
  6. code segment
  7. assume cs:code, ds:data
  8. START:
  9. mov ax, DATA
  10. mov ds, ax
  11. mov ah, 35h
  12. mov al, 1Ch
  13. int 21h
  14. mov OLD_IP, bx
  15. mov OLD_CS, es
  16. push ds
  17. mov dx, offset NEW_1C
  18. mov ax, seg NEW_1C
  19. mov ds, ax
  20. mov ah, 25h
  21. mov al, 1Ch
  22. int 21h
  23. pop ds
  24. mov ax, 0B800h
  25. mov es, ax
  26. xor bx,bx
  27. mov di,0
  28. lb:
  29. mov cx,1000
  30. beg:
  31. call OBR
  32. loop beg
  33. inc bx
  34. cmp bx,1000
  35. jne lb
  36.  
  37. mov dx, OLD_IP
  38. mov ax, OLD_CS
  39. mov ds, ax
  40. mov ah, 25h
  41. mov al, 1Ch
  42. int 21h
  43.  
  44. xor dx,dx
  45. mov dl,0ah
  46. mov ah,02h
  47. int 21h
  48.  
  49. mov ax, di
  50. push -1
  51. mov bx,10
  52. l: mov dx,0
  53. div bx
  54. push dx
  55. cmp ax,0
  56. jne l
  57. l2: pop dx
  58. cmp dx,-1
  59. je exit
  60. add dl,'0'
  61. mov ah,02h
  62. int 21h
  63. inc di
  64. mov [di], dl
  65. jmp l2
  66. EXIT:
  67. mov ax, 4C00h
  68. int 21h
  69.  
  70. NEW_1C proc far
  71. push ax
  72. push bx
  73. push cx
  74. push dx
  75. push ds
  76. push es
  77. mov ax, DATA
  78. mov ds, ax
  79. mov ax, 40h
  80. mov es, ax
  81. add di,1
  82. pop es
  83. pop ds
  84. pop dx
  85. pop cx
  86. pop bx
  87. pop ax
  88. iret
  89. NEW_1C endp
  90. OBR proc rat
  91. push bp
  92. mov bp, sp
  93. push ax
  94. push si
  95. push di
  96. mov di, si
  97. add di,si
  98. mul si
  99. pop di
  100. pop si
  101. pop ax
  102. mov sp,bp
  103. pop bp
  104. ret
  105. OBR endp
  106. code ends
  107. end START

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

textual
Листинг программы
  1. org  100h
  2. jmp  start
  3.  
  4. mess0  db  13,10,'String: $'
  5. mess1  db  13,10,'Result: $'
  6.  
  7. start:
  8.    mov   ah,9
  9.    mov   dx,mess0
  10.    int   21h
  11.  
  12.    mov   di,500h
  13.    xor   cx,cx
  14.    mov   ah,1
  15. @@:
  16.    int   21h
  17.    cmp   al,13
  18.    je    @print
  19.    stosb
  20.    inc   cx
  21.    jmp   @b
  22.  
  23. @print:
  24.    mov   ah,9
  25.    mov   dx,mess1
  26.    int   21h
  27.    xchg  si,di
  28.    dec   si
  29.    std                ; revers
  30. @@:
  31.    lodsb
  32.    int   29h
  33.    loop  @b
  34.  
  35. exit:
  36.    xor   ax, ax
  37.    int   16h
  38.    int   20h

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


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

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

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

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

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

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