Ввести в консоль строку, программа должна вывести в консоль слова из этого предложения в столбик - Assembler

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

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

Доброго времени суток! Задание: нужно ввести в консоль строку, а программа должна вывести в консоль слова из этого предложения в столбик Пожалуйста найдите ошибку - у меня выводится не в столбик, а лесенкой Если возможно подправьте код пожалуйста
s_s segment stack "stack"
db 256 dup(?)
s_s ends
data segment
in_str db 80, 0, 82 dup ('$') ; буфер ввода
out_str db 128 dup('$')
test_out db "test", '$'
enter db 0dh,0ah,'$'
data ends
code segment
assume ss:s_s, cs:code, ds:data
START: mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
; Ввод строки
lea dx, in_str
mov ah, 0ah
int 21h;
 
xor cx,cx
mov ax,1
mov cl, byte ptr[in_str+1]
lea si, in_str+2
lea di, out_str
 
beg: 
push cx
mov dl, byte ptr[si]
cmp dl, ' '
jne _a
 
mov cl,al
inc al
mov word ptr[di], 0a0dh
add di, 2
 
begl: 
mov byte ptr[di], ' '
inc di
 loop begl
 sub di, 1
 
_a:
  mov byte ptr[di] , dl
   inc si
   inc di
   pop cx
   loop beg 
 
   lea dx, enter 
   mov ah, 09h
   int 21h
   
   lea dx, out_str
    mov ah, 09h
    int 21h

    mov ah, 0ah
    int 21h

quit: mov ax, 4C00h ; Код завершения 0
int 21h ; Выход в DOS
code ends
end START

Решение задачи: «Ввести в консоль строку, программа должна вывести в консоль слова из этого предложения в столбик»

textual
Листинг программы
begl: 
mov byte ptr[di], ' '
inc di
 loop begl
 sub di, 1

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

  1. Переменная di инициализируется значением 1.
  2. В цикле loop begl происходит следующее:
    • В инструкции mov byte ptr[di], ' ' вводится пробел в текущую позицию в памяти.
    • В инструкции inc di увеличивается значение переменной di на 1.
    • Если значение переменной di больше 1, то происходит переход к следующей итерации цикла.
    • Если значение переменной di равно 1, то происходит выход из цикла.
    • В инструкции sub di, 1 уменьшается значение переменной di на 1. Таким образом, код выводит в консоль слова из предложения в столбик, разделяя их пробелами.

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

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