Переставить символы в строке, поменяв местами первый символ с последним, второй с предпоследним и т.д. - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д