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

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

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

 
 Ответить  Открыть новую тему 
> разделение на слова, реализация
samec
сообщение 20.05.2008 3:00
Сообщение #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 - 20.05.2008 13:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 20.05.2008 22:30
Сообщение #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

 

- Текстовая версия 26.08.2025 1:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"