Помощь - Поиск - Пользователи - Календарь
Полная версия: разделение на слова
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Assembler
samec
Добрый день всем. У меня есть такая задачка: "Ввести с клавиатуры строку, состоящую из нескольких слов. Вывести каждое слово на экран в отдельной строке, т.е. выдать слова в столбик."
Наделал вот чего :
 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
Вот код, если кому интересно, спасибо за него добрым юдям 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



Вопрос исчерпан.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.