Автор Тема: Ввод имени файла пользователем  (Прочитано 1430 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн PaperCut

  • Коллежский регистратор
  • *
  • Сообщений: 7
  • Репутация: 0
Ввод имени файла пользователем
« : јРЩ 17, 2009, 12:54:14 pm »
Здраствуйте, позникла проблема нужно сохранить введенный пользователем файл с новым именем.

Делаю так, прошу пользователя  ввести имя файла:
        mov dx, offset file1
        mov ah, 0ah
        int 21h
        xor bx, bx
mov bl, file1[1]
mov file1[bx+2], 0h

Делаю тоже самое для нового имени файла. И затем пытаюсь воспользоваться 56h

    LEA  DX,file1 + 2       
   MOV  AX,SEG file 2 + 1     
   MOV  ES,AX               
   MOV  DI,OFFSET file 2 + 2 
   MOV  AH,56H             
   INT  21H

Но выдает ошибку (что-то типа "файл уже существует")

строки в сегменте данных описаны так:
  file1 db 15,?, 15 dup(' ')
   file2 db 15,?, 15 dup(' ')

Запускаю на emu8086 и TASM

Оффлайн Alexiski

  • Любитель давать советы
  • Надворный советник
  • *****
  • Сообщений: 307
  • Репутация: 15
  • Пол: Мужской
Re: Ввод имени файла пользователем
« Ответ #1 : јРЩ 17, 2009, 08:57:38 pm »
Я думаю, что строчка
MOV  AX,SEG file 2 + 1
делает не совсем то, чего Вы от нее ожидаете.

Оффлайн PaperCut

  • Коллежский регистратор
  • *
  • Сообщений: 7
  • Репутация: 0
Re: Ввод имени файла пользователем
« Ответ #2 : јРЩ 18, 2009, 01:29:45 am »
Немного неправильно представил код.. выглядит так

 LEA  DX,file1 + 2         
   MOV  AX,SEG file2 + 2     
   MOV  ES,AX               
   MOV  DI,OFFSET file2 + 2   
   MOV  AH,56H           
   INT  21H   

А рассчитываю я что помещаю в ES:DI путь по которому надо сохранить файл

Оффлайн Alexiski

  • Любитель давать советы
  • Надворный советник
  • *****
  • Сообщений: 307
  • Репутация: 15
  • Пол: Мужской
Re: Ввод имени файла пользователем
« Ответ #3 : јРЩ 18, 2009, 10:25:36 am »
Сложение в указанной мною команде вообще не нужно.

Сегмент должен быть одинаковым у всех байтов поля file2, разница только в смещениях.
Вы увеличиваете значение в сегментном регистре на лишние 2, что соответствует смещению +20.
Если уж так хочется подчеркнуть разницу полей, поставьте скобки:  MOV  AX, SEG (file2 + 2)
Но будет вполне достаточно простого  MOV  AX, SEG file2

Вам не приходило в голову просто посмотреть в отладчике, что именно происходит?

Оффлайн PaperCut

  • Коллежский регистратор
  • *
  • Сообщений: 7
  • Репутация: 0
Re: Ввод имени файла пользователем
« Ответ #4 : јРЩ 18, 2009, 02:21:21 pm »
Спасибо, посмотрел что показыват AFD, сразу понял ошибку