IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> разделение на слова, реализация
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Юра

Репутация: -  1  +


Добрый день всем. У меня есть такая задачка: "Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке, т.е. выдать слова в столбик."
Наделал вот чего :
 TITLE Program5 ;название программы
.MODEL small ;отводим под стек и под данные по 64Кб
.STACK 100h ;отмечаем начало сегмента стека
.DATA ;отмечаем начало сегмента данных
Char DB 0
Buf DB 255, 0, 256 DUP (0) ;

.CODE ;отмечаем начало сегмента кодов
main PROC
mov AX, @data ;копируем адрес
mov DS, AX ;сегмента данных
mov DX, offset Buf ;считываем строку с клавиатуры
mov AH, 0ah
int 21h
mov al, Buf+1 ;если считано 0 байт, то выход из
or al, al ;программы
jz Exit1
xor DX, DX
mov CX, DX
mov CL, Buf+1 ;задаем количество повторений (длина строки)
mov SI, offset Buf+2
CLD ;
Cycle:
LODS Buf
mov AH, 9h ;Выбор функции 9
mov DX,AX ;Адрес строки
int 21h ;Вызов DOS
Next:
loop Cycle
Exit1:
mov AX,4C00h ;выход
int 21h ;из программы
main ENDP
END main



Всё прекрасно компилируется даже, но работать не хочет На экране мерцает что то непонятное, и всё.
Подскажите, кто в этом шарит, где подправить и как???
Заранее благоарен!

Сообщение отредактировано: samec -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской
Реальное имя: Юра

Репутация: -  1  +


Вот код, если кому интересно, спасибо за него добрым юдям smile.gif
 TITLE Program5                 ;название программы
.MODEL small ;отводим под стек и под данные по 64Кб
.STACK 100h ;отмечаем начало сегмента стека
.DATA ;отмечаем начало сегмента данных
NL db 0Ah, 0Dh, '$'
Buf DB 255, 0, 256 DUP (0) ;

.CODE ;отмечаем начало сегмента кодов
main PROC
mov ax,@data ;копируем адрес
mov ds,ax ;сегмента данных
mov dx,offset Buf ;считываем строку с клавиатуры
mov ah,0Ah
int 21h
xor cx,cx
mov al,[Buf+1] ;если считано 0 байт, то выход из
mov cl,al ;задаем количество повторений (длина строки)
test al,al ;программы
jz Exit
mov ah,09h
mov dx,offset NL ; перейти на следующую строку
int 21h
mov si,offset Buf+2
Cycle:
mov dl,[si] ;считать символ
cmp dl,' ' ;сравнить с пробелом
jne Print ;если не пробел - вывести
mov ah,09h ;если пробел - перевод каретки
mov dx,offset NL ;адрес строки с переводом каретки
int 21h ;вызов DOS
jmp Space ;пропустить код вывода - пробел не выводим
Print:
mov ah,02h ;выбор функции 2
int 21h ;вызов DOS
Space:
inc si ;перейти к следующему символу
loop Cycle
Exit:
mov AX,4C00h ;выход
int 21h ;из программы
main ENDP

END main



Вопрос исчерпан.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.01.2021 7:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name