Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2018, 14:46   #1
Альк*
 
Регистрация: 03.06.2018
Сообщений: 7
По умолчанию Переименовать файл NEWFILE.txt в файл OLDFILE.txt и установить у него атрибут ReadOnly

Помогите пожалуйста понять в чем дело, при запуске ошибок нет, но программа не выполняет свое назначение
-------------------------------------------------------------------
TITLE SETVOLUMELABEL (EXE) A.T var-3
text segment 'code' ; слово "Code" указывает, что это программный класс сегмента
assume cs:text, dsata ; команда assume сопоставляет сегментные регистры и адресуемые ими сегменты
;CS - регистр программного сегмента, DS - регистр сегмента данных
; Определения
stdout=1 ; Дескриптор стандартного вывода
cr=13 ; Код возврата каретки
lf=10 ;Код перевода строки
;------------------------------------------------------------------
myproc proc
mov AX, data ; Инициализируем
mov DS, AX ;сегментный регистр DS
; Тело программы------------------------------------------
; Выведем авотра иназвание программы
mov AH,40h ;функция переключения режима
mov BX,stdout
mov CX,sooblen
mov DX,offset soob
int 21h ;Завершить и остаться
; Запись метки--------------------------------------------------
mov AH, 56H
lea DX, oldname
lea DI, newname
int 21h ; Вызов DOS


MOV AH,43H ;Запрос на установку
MOV AL,01 ; атрибута
MOV CX,01 ; только чтение-01; ;02-скрытый,00-нормальный
LEA DX,oldname ;ASCIIZ-строка
INT 21H
; Завершение программы--------------------------------
mov AX, 4C00h ; Функция завершения программы - выход в MS-DOS
int 21h ; Вызов DOS

myproc endp
text ends
; Поля данных---------------------------------------------
data segment
oldname db 'C:\Documents and Settings\ия\NEWFILE.txt',0
newname db 'C:\Documents and Settings\ия\OLDFILE.txt',0
soob db 'Rabota po SPO: variant 3 - file pereimenovan',cr,lf
sooblen equ $-soob
data ends
;--------------------------------------------------------------
end myproc ; конец программы
Альк* вне форума Ответить с цитированием
Старый 03.06.2018, 17:09   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

1.
Нужно установить es на сегмент данных
mov ax, @data
mov ds, ax
mov es, ax
2.
у вас (скорее всего) перепутаны oldname и newname.
oldname db 'C:\Documents and Settings\ия\NEWFILE.txt',0
newname db 'C:\Documents and Settings\ия\OLDFILE.txt',0

И честно говоря под досом я бы не использовал такие пути:
C:\Documents and Settings\ия
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 03.06.2018, 18:09   #3
Альк*
 
Регистрация: 03.06.2018
Сообщений: 7
По умолчанию

а почему?что не так с путями?
Альк* вне форума Ответить с цитированием
Старый 03.06.2018, 18:22   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Да ничего особенно страшного.
Просто длинные абсолютные пути с пробелами и русскими буквами в наименованиях как то глаз режут.

У вас переименование заработало ?
У меня - да. А вот атрибуты чето не ставятся, может проблема DOS-box-a..

Добавлено:
Ну да, под комманд-лине XP программа работает нормально.
Под чистым досом тоже скорей всего будет норм.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 03.06.2018 в 18:40.
Ulex вне форума Ответить с цитированием
Старый 03.06.2018, 18:44   #5
Альк*
 
Регистрация: 03.06.2018
Сообщений: 7
По умолчанию

Переименование не заработало, а вот установка атрибута на какое-то время заработала,но потом опять перестала работать
Альк* вне форума Ответить с цитированием
Старый 03.06.2018, 18:55   #6
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

В общем два момента, установить es на ds и разобраться с именами файлов. А то сейчас как то странно получается, сначала файл переименовали, а потом у oldname (файла с таким именем уже нет) атрибуты устанавливаете.
Код:
.286
.model small
.stack 100h

.data
oldname db 'OLDFILE.txt',0
newname db 'NEWFILE.txt',0
soob db 'Rabota po SPO: variant 3 - file pereimenovan',cr,lf
sooblen equ $-soob

; Определения
stdout=1 ; Дескриптор стандартного вывода
cr=13 ; Код возврата каретки
lf=10 ;Код перевода строки

.code
start:
mov ax, @data
mov ds, ax
mov es, ax

; Тело программы------------------------------------------
; Выведем авотра иназвание программы
mov AH,40h ;функция переключения режима
mov BX,stdout
mov CX,sooblen
mov DX,offset soob
int 21h ;Завершить и остаться

; Запись метки--------------------------------------------------
mov AH, 56H
lea DX, oldname
lea DI, newname
int 21h ; Вызов DOS

mov ax,4301h
lea dx, newname
mov cx, 00001b
int 21h

mov ax,4C00h          ;завершаем программу
int 21h  

end start
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 03.06.2018, 18:55   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Альк* Посмотреть сообщение
INT 21H
программа для MS DOS, судя по использованию 21 прерывания, так?

Цитата:
Сообщение от Альк* Посмотреть сообщение
а почему?что не так с путями?
Тогда такие пути не допустимы.
насколько я помню, то MS DOS не понимал длинные пути, кириллицу и пробелы.
нужно использовать только имена формата 8.3, исключительно латиницу и без пробелов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.06.2018, 19:08   #8
Альк*
 
Регистрация: 03.06.2018
Сообщений: 7
По умолчанию

Так-то мне нужно было в BIOS, но там же существенной разницы нет? разве что в прерываниях
Альк* вне форума Ответить с цитированием
Старый 03.06.2018, 19:21   #9
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Ууууу..... батенька.

Цитата:
Так-то мне нужно было в BIOS, но там же существенной разницы нет? разве что в прерываниях
Насколько я в курсе (если ошибусь, пусть меня поправят) в биосе нет прерываний для работы с файлами, ибо файлы - это часть файловой системы, а файловая система, как бы часть операционной системы.
Поэтому в ДОС-е есть функции 21-го прерывания для работы именно с файлами на файловой системе FAT-16 и иже с ними. А в биосе есть прерывания для работы с дисковой подсистемой. Т.е чисто теоретически вы сможете прерываниями BIOSA читать сектора с диска. А дальше всю логику разбора этих данных (т.е. в принципе фактически поддержку файловой системы) придётся написать самому...
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 03.06.2018, 19:49   #10
Альк*
 
Регистрация: 03.06.2018
Сообщений: 7
По умолчанию

понятно) атрибут устанавливается :D
Альк* вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделавание кода на считывание из файла в файл output.txt input.txt !!! airesjke Помощь студентам 0 29.05.2013 14:07
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01