Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Считывание символа с клавиатуры и добавление его в


Автор: S3nsitive 26.5.2011, 08:40
Привет! Мне нужно открыть файл, имя которого я ввожу с клавиатуры. Как открыть файл с определённым именем я знаю. Получается, что нужно считать вводимые с клавиатуры символы, записать их в какую-нибудь переменную, а дальше уже открывать файл с этим именем. Вот тут-то и возникла проблема. Я не знаю как записать вводимые с клавиатуры символы в какую-то переменную. Пробовал так:
Код

open_file_name      db 8 dup (0) ;Переменная для хранения имени открываемого файла (не больше 8 символов).
                    open_file_name_len = $ - open_file_name  ;Длина переменной
...
        mov bx,ds                       ;-Заносим адрес сегмента данных в es.
        mov es,bx                       ;/
        mov di,open_file_name           ;Заносим адрес начала переменной в di. В этой переменной будет храниться строка, которую введём с клавиатуры.
        mov cx,open_file_name_len       ;Заносим в cx длину переменной. Будет использовано в цикле для поочерёдной записи вводимых символов.
b:
        mov ah,1h                       ;-Функция считывания символа с входного устройства.
        int 21h                         ;/
        cmp al,13                       ;Сравниваем код полученного символа с кодом 'ENTER'.
        je open_file                    ;Если совпадают, то переходим к открытию файла.
        jne @F                          ;Если не совпадают, то продолжаем считывать символы.
@@:
        stosb                           ;Заносим символ по адресу es:di. di увеличивается.
        loop b                          ;Продолжаем пока не встретим 'ENTER'.
...

,но вылазеет вводимая строка с Error'ом на конце. Почему так? 
Подскажите, пожалуйста, правильно ли я всё делаю или есть способ проще, и в чём у меня ошибка?

Автор: iff 27.5.2011, 14:18
Здесь можно применить функцию 0Ah прерывания INT 21h. Обратите внимание на формат данных, с которым работает эта функция. Т.к. функции работы с файлами требуют ASCIIZ-строку, то придется немного преобразовать: вычислить по длине (или найти 0Dh) символ идущей после последнего и заменить его на 00h.

Автор: S3nsitive 31.5.2011, 07:43
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)