Ввести в консоль строку, программа должна вывести в консоль слова из этого предложения в столбик - 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
Объяснение кода листинга программы
- Переменная
di
инициализируется значением 1. - В цикле
loop begl
происходит следующее:- В инструкции mov byte ptr[di], ' ' вводится пробел в текущую позицию в памяти.
- В инструкции inc di увеличивается значение переменной
di
на 1. - Если значение переменной
di
больше 1, то происходит переход к следующей итерации цикла. - Если значение переменной
di
равно 1, то происходит выход из цикла. - В инструкции sub di, 1 уменьшается значение переменной
di
на 1. Таким образом, код выводит в консоль слова из предложения в столбик, разделяя их пробелами.