Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/32: Рейтинг темы: голосов - 32, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 01.06.2008
Сообщений: 8

Переименовать файл

01.06.2008, 11:44. Показов 6272. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста написать программу. Пишу на masm611. Теория такая: в текущей директории есть файл other.dat его нужно переименовать my.dat! Если можно исходный код с комментариями. Заранее большое спасибо!!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2008, 11:44
Ответы с готовыми решениями:

Переименовать файл и выставить атрибут ReadOnly
Формат программы-exe-программа Ввод с клавиатуры - средствами BIOS Вывод-в графическом режиме Динамическое распределение памяти-...

Переименовать файл
переименовать файл NEWFILE.txt в файл OLDFILE.txt и устано-вить у него атрибут «ReadOnly»; Формат программы: ...

Переименовать файл
Добрый день уважаемые программисты. Остался последний шаг и программа будет полностью рабочей. Помогите,я уже 3 день с места не могу...

4
 Аватар для mikityak
617 / 22 / 0
Регистрация: 30.09.2007
Сообщений: 357
02.06.2008, 14:52
7.1. Первая программа
В качестве нашего первого примера посмотрим, насколько проще написать под Windows программу, которая загружает другую программу. В DOS (см. главу 4.10) нам приходилось изменять распределение памяти, заполнять специальный блок данных EPBВ и только затем вызывать DOS. Здесь же не только вся процедура сокращается до одного вызова функции, а еще оказывается, что можно точно так же загружать не только программы, но и документы, графические и текстовые файлы и даже почтовые и WWW-адреса — все, для чего в реестре Windows записано действие, выполняющееся при попытке открытия.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
; winurl.asm
; Пример програмы для win32.
; Запускает установленный по умолчанию броузер на адрес, указанный в строке URL
; аналогично можно запускать любую программу, документ, и любой другой файл,
; для которого определена операция open
;
include shell32.inc
include kernel32.inc
 
        .386
        .model     flat
        .const
URL     db   'http://www.lionking.org/~cubbi/',0
        .code
_start:          ; метка точки входа должна начинаться с подчеркивания
        xor        ebx,ebx
        push       ebx          ; для исполнимых файлов - способ показа
        push       ebx          ; рабочий каталог
        push       ebx          ; командная строка
        push       offset URL   ; имя файла с путем
        push       ebx          ; операция open или print (если NULL - open)
        push       ebx          ; идентификатор окна, которое получит сообщения
        call       ShellExecute ; ShellExecute(NULL,NULL,url,NULL,NULL,NULL)
        push       ebx          ; код выхода
        call       ExitProcess  ; ExitProcess(0)
        end        _start
Итак, в этой программе выполняется вызов двух системных функций Win32 — ShellExecute() (открыть файл) и ExitProcess() (завершить процесс). Чтобы вызвать системную функцию Windows, программа должна поместить в стек все параметры от последнего к первому и передать управление дальней командой CALL. Все эти функции сами освобождают стек (завершаясь командой RET N) и возвращают результат работы в регистре ЕАХ. Такая договоренность о передаче параметров называется STDCALL. С одной стороны, это позволяет вызывать функции с нефиксированным числом параметров, а с другой — вызывающая сторона не должна заботиться об освобождении стека. Кроме того, функции Windows сохраняют значение регистров ЕВР, ESI, EDI и EBX, этим мы пользовались в нащем примере — хранили 0 в регистре EBX и применили 1-байтную команду PUSH EBX вместо 2-байтной PUSH 0.

Прежде чем мы сможем скомпилировать winurl.asm, нужно создать файлы kernel32.inc и shell32.inc, в которые поместим директивы, описывающие вызываемые системные функции:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
; kernel32.inc
; включаемый файл с определениями функций из kernel32.dll
;
ifdef _TASM_
        includelib import32.lib
        ; имена используемых функций
            extrn      ExitProcess:near
else
        includelib kernel32.lib
        ; истинные имена используемых функций
            extrn      __imp__ExitProcess@4:dword
        ; присваивания для облегчения читаемости кода
            ExitProcess  equ  __imp__ExitProcess@4
endif
 
; shell32.inc
; включаемый файл с определениями функций из shell32.dll 
ifdef   _TASM_
        includelib import32.lib 
        ; имена используемых функций
            extrn   ShellExecuteA:near
        ; присваивания для облегчения читаемости кода 
            ShellExecute  equ  ShellExecuteA 
else
        includelib shell32.lib 
        ; истинные имена используемых функции
            extrn   __imp__ShellExecuteA@24:dword 
        ; присваивания для облегчения читаемости кода
            ShellExecute  equ  __imp__ShellExecuteA@24
endif
Имена всех системных функций Win32 модифицируются так, что перед именем функции ставится подчеркивание, а после — знак «@» и число байт, которое занимают параметры, передаваемые ей в стеке, так ExitProcess() превращается в _ExitProcess@4(). Компиляторы с языков высокого уровня часто останавливаются на этом и вызывают функции по имени _ExitProcess@4(), но реально вызывается небольшая процедура-заглушка, которая ничего не делает, а только передает управление на такую же метку, но с добавленным «__imp_» — __imp__ExitProcess@4(). Во всех наших примерах мы будем обращаться напрямую к __imp__ExitProcess@4(). К сожалению, TASM (а точнее TLINK32) использует собственный способ вызова системных функций, который нельзя так обойти, и программы, скомпилированные с его помощью, оказываются намного больше и в некоторых случаях работают медленнее. Мы отделили описания функций для TASM во включаемых файлах при помощи директив условного ассемблирования, которые будут использовать их, если в командной строке ассемблера указать /D_TASM_.

Кроме этого, все функции, работающие со строками (как, например, ShellExecute()), существуют в двух вариантах. Если строка рассматривается в обычном смысле, как набор символов ASCII, к имени функции добавляется «A» (ShellExecuteA()). Другой вариант функции, использующий строки в формате UNICODE (два байта на символ), заканчивается буквой «U». Во всех наших примерах будем использовать обычные ASCII-функции, но, если вам потребуется перекомпилировать программы на UNICODE, достаточно только поменять «А» на «U» во включаемых файлах.

Итак, теперь, когда у нас есть все необходимые файлы, можно скомпилировать первую программу для Windows.

Компиляция MASM:
Windows Batch file
1
2
ml  /coff /Cp winurl.asm
link winurl.obj /subsystem:windows
(здесь и далее используется 32-битная версия link.exe)

Компиляция TASM:
Windows Batch file
1
2
tasm /m /ml /D_TASM_ winurl.asm
tlink32 /Tpe /aa /c /x winurl.obj
Компиляция WASM:
Windows Batch file
1
2
wasm winurl.asm
wlink file winurl.obj form windows nt op с
Также для компиляции потребуются файлы kernel32.lib и shell32.lib в первом и третьем случае и import32.lib — во втором. Ёти файлы входят в дистрибутивы любых средств разработки для Win32 от соответствующих компаний — Microsoft, Watcom (Sybase) и Borland (Inprise), хотя их всегда можно воссоздать из файлов kernel32.dll и shell32.dll, находящихся в каталоге WINDOWS/SYSTEM.

Иногда вместе с дистрибутивами различных средств разработки для Windows идет файл windows.inc, в котором дано макроопределение Invoke или заменена макросом команда call так, что они принимают список аргументов, первым из которых идет имя вызываемой функции, а затем через запятую — все параметры. С использованием этих макроопределений наша программа выглядела бы так:
Assembler
1
2
3
4
5
6
_start:
        xor        ebx,ebx
        Invoke     SnellExecute, ebx, ebx, offset URL, ebx, \
                                 ebx, ebx
        Invoke     ExitProcess, ebx 
        end        _start
И этот текст компилируется в точно такой же код, что и у нас, но выполняется вызов не функции __imp__ExitProcess@4(), а промежуточной функции _ExitProcess@4(). Использование этой формы записи не позволяет применять отдельные эффективные приемы оптимизации, которые мы будем приводить в наших примерах, — помещение параметров в стек заранее и вызов функции командой JMP. И наконец, файла windows.inc у вас может просто не оказаться, так что будем писать push перед каждым параметром вручную.

;-----------------------------------------------------------------------------------

MoveFile

The MoveFile function moves an existing file or a directory, including its children.

To specify how to move the file, use the MoveFileEx function.


BOOL MoveFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName
);

Parameters
lpExistingFileName
[in] Pointer to a null-terminated string that names an existing file or directory.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?" to the path. For more information, see Naming a File.

Windows Me/98/95: This string must not exceed MAX_PATH characters.
lpNewFileName
[in] Pointer to a null-terminated string that specifies the new name of a file or directory. The new name must not already exist. A new file may be on a different file system or drive. A new directory must be on the same drive.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?" to the path. For more information, see Naming a File.

Windows Me/98/95: This string must not exceed MAX_PATH characters.
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks
The MoveFile function will move (rename) either a file or a directory (including its children) either in the same directory or across directories. The one caveat is that the MoveFile function will fail on directory moves when the destination is on a different volume.

If a file is moved across volumes, MoveFile does not move the security descriptor with the file. The file will be assigned the default security descriptor in the destination directory.

The MoveFile function coordinates its operation with the link tracking service, so link sources can be tracked as they are moved.

Requirements
Client Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server.
Header Declared in Winbase.h; include Windows.h.

Library Link to Kernel32.lib.

DLL Requires Kernel32.dll.
Unicode Implemented as MoveFileW (Unicode) and MoveFileA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.

Добавлено через 2 минуты
Стати хватит этот "Дос" мучать юзай MASM32
0
0 / 0 / 0
Регистрация: 01.06.2008
Сообщений: 8
02.06.2008, 16:04  [ТС]
Интересного много!! Но как это связано с моим вопросом я не поняла.
0
 Аватар для mikityak
617 / 22 / 0
Регистрация: 30.09.2007
Сообщений: 357
02.06.2008, 16:18
Здравствуйте! Помогите пожалуйста написать программу. Пишу на masm611. - DOS

файл other.dat его нужно переименовать my.dat - MoveFile
0
7 / 7 / 0
Регистрация: 20.08.2008
Сообщений: 44
20.08.2008, 16:20
хиа ит из
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.code
push cs
push cs
pop ds
pop es ;na vsyak cluchai
mov ah,56h
mov dx,offset fileold
mov di,offset filenew
int 21h
jnc ok
;obrabotka oshibki
 
ok:
int 20h
AH = 56H
DSX = адрес старого ASCIIZ имени (путь/имя существующего файла)
ESI = адрес нового ASCIIZ имени (новые путь/имя)

Выход
AX = код ошибки если CF установлен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.08.2008, 16:20
Помогаю со студенческими работами здесь

Переименовать файл
Прошу помощи в написании батника. Ежедневно в течение дня, файлы поступают в каталог на обработку (download\Вася.rar Вася_1.rar...

WP 8.1 переименовать файл
Как собственно реализовать данную функцию? Использую следующий способ: var file = await...

Переименовать файл
Народ не подскажете, как не особо парясь переименовывать файлы и директории, способ прочитать и записать под другим именем я знаю. ...

Переименовать файл
static string sv = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\GooT\level"; string files2 = {...

Переименовать файл
Здравствуйте, появился такой вопрос: есть скрипт, который загружает excel файл каждый день. Нужно сохранить этот файл с именем "дата...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru