Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание символа с клавиатуры и добавление его в 
:(
    Опции темы
S3nsitive
Дата 26.5.2011, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.3.2011
Где: Уфа

Репутация: нет
Всего: нет



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

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'ом на конце. Почему так? 
Подскажите, пожалуйста, правильно ли я всё делаю или есть способ проще, и в чём у меня ошибка?

Это сообщение отредактировал(а) S3nsitive - 26.5.2011, 08:42
PM WWW ICQ Skype   Вверх
iff
Дата 27.5.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



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


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
S3nsitive
Дата 31.5.2011, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.3.2011
Где: Уфа

Репутация: нет
Всего: нет



Спасибо.
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0899 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.