Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Переименование файла


Автор: Oxy 21.10.2009, 23:55
TASM
Windows Vista
Не получается переименовать файл, подскажите пожалуйста в чем может быть проблема
Код

.MODEL SMALL
.STACK 100h
.DATA 
oldn  db  "C:\1\myfile.dat",0
newn  db  "C:\2\newfile.dat ",0

.CODE
start:         mov  ax, @data              
               mov  ds, ax                
               mov  dx, offset oldn

               mov  ax, seg newn
               mov  es, ax
               mov  di, offset newn
           
               mov  ah, 56h
               int  21h

               mov  ax, 4C00h              
               int  21h                    
               END  start

Автор: 111u3 22.10.2009, 02:56
А ту же директорию деста указывать не пробовал

Автор: Mikl_ 22.10.2009, 10:33
[delete]

Автор: Mikl_ 22.10.2009, 10:54
Oxy, не внимательно читаешь описание функции 56h smile 
В регистре AH должен находиться номер функции (56h). Регистры DS:DX должны содержать адрес строки с именем существующего файла, строка должна заканчиваться нулем и может содержать путь к файлу. Регистры ES:BX должны содержать адрес строки с новым именем файла, строка должна заканчиваться нулем. В CL атрибуты файла
При выходе, если ошибки не произошло, то флаг CF = 0. Если произошла ошибка, то флаг CF = 1 и в регистре AX находится код ошибки.
02 файл не найден
03 путь не найден
05 доступ запрещен
11h  не то же устройство
Если не анализировать код ошибки то
Код
start:         mov  ax, @data              
               mov  ds, ax  
               mov  es, ax <-- можно за один раз так как сегмент данных один и тот же
               mov  dx, offset oldn               
               mov  bx, offset newn <-- вот здесь ошибка           
               mov  ah, 56h
               int  21h
 smile 

Автор: Oxy 22.10.2009, 11:29
Цитата(Mikl_ @  22.10.2009,  10:54 Найти цитируемый пост)
Oxy, не внимательно читаешь описание функции 56h

http://www.eduhmao.ru/info/1/3661/22917/
я здесь читал

сейчас нет возможности проверить Ваш вариант, но все равно спасибо

Автор: Goodwin98 22.10.2009, 23:22
Mikl_, имя должно передоваться в di все таки. 


Oxy, папка C:\2\ должна существовать, чтобы в нее можно было переместить файл. Да и пробел в конце там врядли к месту.

Автор: Mikl_ 23.10.2009, 03:41
Goodwin98, Oxy
Никому нельзя верить -- я взял свой вариант с ES:BX в книге Р.Брауна, Дж.Кайла "Справочник по прерываниям для IBM PC" Москва, издательство "Мир" 1994, том 1,  глава 8, стр 8 - 64, до сих пор меня Браун и Кайл не обманывали, а здесь наверное либо опечатка, либо сами не проверяли. Проверил должно быть DI иначе файл переименовывается во что-то непотребное  smile  Отсюда мораль "Классики тоже ошибаются" 

Автор: piritus 23.10.2009, 10:25
Рекомендую по прерываниям (и не только) использовать http://asm.shadrinsk.net/tech60.rar

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