Переставить символы в строке, поменяв местами первый символ с последним, второй с предпоследним и т.д. - 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