pogo
18-11-2010, 15:18
Люди добрые и знающие помогите пожалуйста
есть задача:
Программа просит ввести строку. Строка - слова разделённые одним или несколькими пробелами.
Удалить лишние пробелы (вначале строки, в конце строки, 1 пробел между словами).
Результат вывести на экран и записать в файл (файл создаётся в процессе)
Я тут написал часть программы:
.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
mov dh,0Dh ;подготовка - суём в регистр символ,
;которого не может быть во введённой строке
tmp:
mov dl,[si]
cmp dl,' '
jne Cycle1
inc si
dec cx
jmp tmp
Cycle:
mov dl,[si] ;считать символ
Cycle1:
cmp dl,' ' ;сравнить с пробелом
jne Print ;если не пробел - вывести
cmp dx,' ' ;а если пробел - то предыдущий был пробел или нет?
je NextChar ;если два пробела подряд - не печатаем
jne Print
Print:
mov ah,02h ;выбор функции 2
int 21h ;вызов DOS
NextChar:
mov dh,dl ;сохранить текущий символ для теста на следующем витке
inc si ;перейти к следующему символу
loop Cycle
Exit:
mov AX,4C00h ;выход
int 21h ;из программы
main ENDP
END main
Программа удаляет пробелы вначале строки и делает 1 пробел между словами.
Помогите пожалуйста удалить последние пробелы, а главное записать всё это дело
в файл...
В ассемблере не силён, погуглив в принципе нашёл как работать с файлами...
Но у меня ничего не получилось, по сюда даже не писал мои попытки работать с файлами,
ибо сам посидел, посмотрел и понял, что это бред.
Заранее спасибо!!
есть задача:
Программа просит ввести строку. Строка - слова разделённые одним или несколькими пробелами.
Удалить лишние пробелы (вначале строки, в конце строки, 1 пробел между словами).
Результат вывести на экран и записать в файл (файл создаётся в процессе)
Я тут написал часть программы:
.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
mov dh,0Dh ;подготовка - суём в регистр символ,
;которого не может быть во введённой строке
tmp:
mov dl,[si]
cmp dl,' '
jne Cycle1
inc si
dec cx
jmp tmp
Cycle:
mov dl,[si] ;считать символ
Cycle1:
cmp dl,' ' ;сравнить с пробелом
jne Print ;если не пробел - вывести
cmp dx,' ' ;а если пробел - то предыдущий был пробел или нет?
je NextChar ;если два пробела подряд - не печатаем
jne Print
Print:
mov ah,02h ;выбор функции 2
int 21h ;вызов DOS
NextChar:
mov dh,dl ;сохранить текущий символ для теста на следующем витке
inc si ;перейти к следующему символу
loop Cycle
Exit:
mov AX,4C00h ;выход
int 21h ;из программы
main ENDP
END main
Программа удаляет пробелы вначале строки и делает 1 пробел между словами.
Помогите пожалуйста удалить последние пробелы, а главное записать всё это дело
в файл...
В ассемблере не силён, погуглив в принципе нашёл как работать с файлами...
Но у меня ничего не получилось, по сюда даже не писал мои попытки работать с файлами,
ибо сам посидел, посмотрел и понял, что это бред.
Заранее спасибо!!