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

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

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

Ребят, нужна ваша помощь. Вот у меня задание Ввести с клавиатуры строку. Переставить в ней символы, поменяв местами первый символ с последним, второй с предпоследним и т.д. Вывести результаты на экран. Программу я написал. Вот программный код. Только при запуске у меня идет зацикливание. Подскажите, что я сделал не так. И можете по возможности исправить. Буду очень благодарен.
data segment
schet dw 1
OLD_CS  dw  ?   
OLD_IP  dw  ?   
data ends
code segment
assume cs:code, ds:data
START: 
mov ax, DATA
        mov ds, ax
        mov ah, 35h
        mov al, 1Ch
        int 21h
        mov OLD_IP, bx
        mov OLD_CS, es
        push    ds
        mov dx, offset NEW_1C
        mov ax, seg NEW_1C
        mov ds, ax
        mov ah, 25h
        mov al, 1Ch
        int 21h
        pop ds
        mov ax, 0B800h
        mov es, ax
     xor bx,bx
     mov di,0
    
lb: 
    mov cx,1000
beg:  
    call OBR  
    loop beg
    
    inc bx
    cmp bx,1000
    jne lb

mov dx, OLD_IP
    mov ax, OLD_CS
    mov ds, ax
    mov ah, 25h
    mov al, 1Ch
    int 21h

    xor dx,dx    
    mov dl,0ah
    mov ah,02h
    int 21h  

mov ax, di
    push    -1  
    mov bx,10
l:  mov dx,0
    div bx
    push    dx
    cmp ax,0
    jne l
l2: pop dx
    cmp dx,-1
    je  exit
    add dl,'0' 
    mov ah,02h
    int 21h
    inc di
    mov [di], dl
    jmp l2  
    
EXIT:
mov ax, 4C00h   
int 21h     

NEW_1C  proc        far
    push    ax      
    push    bx
    push    cx
    push    dx
    push    ds
    push    es
    mov  ax, DATA       
    mov  ds, ax         
    mov ax, 40h     
    mov es, ax
    add di,1
    pop es
    pop ds
    pop dx
    pop cx
    pop bx
    pop ax 
    
    iret
NEW_1C  endp
 
OBR proc rat 
push    bp
mov bp, sp
push ax
push si
push di
 
mov di, si
add di,si
mul si  
  
pop di
pop si
pop ax
 
mov sp,bp               
pop bp
 
ret
OBR endp    
code ends
end START

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

textual
Листинг программы
org  100h
jmp  start
 
mess0  db  13,10,'String: $'
mess1  db  13,10,'Result: $'
 
start:
   mov   ah,9
   mov   dx,mess0
   int   21h
 
   mov   di,500h
   xor   cx,cx
   mov   ah,1
@@:
   int   21h
   cmp   al,13
   je    @print
   stosb
   inc   cx
   jmp   @b
 
@print:
   mov   ah,9
   mov   dx,mess1
   int   21h
   xchg  si,di
   dec   si
   std                ; revers
@@:
   lodsb
   int   29h
   loop  @b
 
exit:
   xor   ax, ax
   int   16h
   int   20h

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


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

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

7   голосов , оценка 4.143 из 5
Похожие ответы