Консультация № 183407
29.05.2011, 20:43
55.00 руб.
0 3 1
Здравствуйте! У меня возникли сложности с такой задачей:

Ввести произвольную символьную строку.
Записать все ее буквы в прописном формате (маленькими буквами).
Вывести на экран и записать в файл.

TASM DOS

Обсуждение

давно
Посетитель
7438
7205
30.05.2011, 12:09
общий
Буковки русские/английские или и те, и те?
Где берем имя файла? В тексте, вводим?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
30.05.2011, 12:32
общий
>>Буковки русские/английские или и те, и те?
Английские

>>Где берем имя файла? В тексте, вводим?
Вводим

давно
Посетитель
7438
7205
31.05.2011, 15:57
общий
это ответ
Здравствуйте, Посетитель - 375878!
Вот Вам программа:

[code h=207];Ввести произвольную символьную строку.
;Записать все ее буквы в прописном формате (маленькими буквами).
;Вывести на экран и записать в файл.

.model small
.stack 100h
.data
sGetStr db 'Enter string: $'
sResult db 0ah,'Result string:$'
sGetName db 0dh,0ah,'Enter file name: $'
sPress db 0dh,0ah,'Press any key$'

;буфер для ввода строки (для функции 0ah)
bBuf db 80 ;максимальный размер буфера
bCnt db ? ;реальный размер строки
bStr db 80 dup (?) ;сама строка

;буфер для ввода имени файла (для функции 0ah)
bBufN db 80 ;максимальный размер буфера
bCntN db ? ;реальный размер строки
bStrN db 80 dup (?) ;сама строка

.code
main proc
mov ax, @data
mov ds, ax ;настроим сегмент данных

lea dx, sGetStr
mov ah, 9
int 21h ;ждем строку

lea dx, bBuf
mov ah, 0ah
int 21h ;вводим строку
;меняем большие английские на малые
lea si, bStr ;строка
MainLoop:
lodsb ;очередной символ
cmp al, 0dh
je Print ;дошли до конца
cmp al, 41h ;'A'
jb MainLoop
cmp al, 5ah ;'Z'
ja MainLoop ;все остальные оставляем без изменения
or al, 20h ;малые отличаются от больших на 20h :)
mov byte ptr [si-1], al ;запишем на место
jmp MainLoop

Print: ;выводим
mov byte ptr [si-1], '$' ;закроем строку '$' для ф-и 09h

lea dx, sResult
mov ah, 9
int 21h ;результат

lea dx, bStr ;ah по-прежнему = 9
int 21h ;строка строка

lea dx, sGetName
mov ah, 9
int 21h ;ждем имя файла

lea dx, bBufN
mov ah, 0ah
int 21h ;вводим имя файла

xor bx, bx
mov bl, bCntN ;адрес байта за строкой
mov byte ptr bStrN[bx], 0 ;меняем код 0dh на 0

lea dx, bStrN ;имя файла
mov ah, 3ch ;ф-я создания файла
xor cx, cx ;без атрибутов
int 21h
mov bx, ax ;описатель файла
lea dx, bStr ;адрес буфера
mov cl, bCnt ;длина буфера, ch = 0
mov ah, 40h ;ф-я записи
int 21h
mov ah, 3eh ;ф-я закрытия файла
int 21h

lea dx, sPress ;выведем приглашение нажать на любую клавишу
mov ah, 9
int 21h

mov ah, 0 ;ждем
int 16h

mov ax, 4c00h
int 21h ;выход в ДОС
main endp

end main
[/code]

Примерный вывод программы:

Код:
Enter string: ASDFasdfъх12345
Result string:asdfasdfъх12345
Enter file name: test.txt
Press any key
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа