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


Автор: Teranko 2.6.2009, 08:52
Доброго времени суток, у меня имеется такое задание

Реализуйте программу, которая с помощью прерываний DOS, выполняет следующий набор действий:
1) Создать на диске С директорию TEMP.
2) Создать в этой директории файл temp.txt.
3) Записать в этот файл атрибуты файла c:\io.sys.
4) Скопировать созданный файл в корневой каталог диска С.
5) Удалить исходный файл и исходную директорию.
6) Записать в скопированный файл версию DOS.
7) Переименовать файл в dos.dat.
8) Завершить программу

Код программы таков:
Код

model small
.data
  iof db 'C:\io.sys',0
  atr dw ?
  db ' ',0
    dir db 'D:\TEMP',0
    adr db 'D:\TEMP\temp.txt',0
    file db 'temp.txt',' ',0
    nadr db 'D:\dos.dat',0
    ver db 3 dup(?)
    db 0
.stack 32h
.code
main proc
    mov ax,@data
    mov ds,ax
    mov es,ax
;Получаем версию ДОСа
    mov ah,30h
    int 21h
    add ax,3030h
    mov ver[2],ah
    mov ver[1],'.'
    mov ver[0],al
;Создаем папку
    mov ah,39h
    lea dx,dir
    int 21h
;Создаем файл
    mov ah,3ch
    lea dx,adr
    int 21h
;Получаем атрибуты файла
    mov bx,ax
    mov ah,43h
    mov al,0
    lea dx,iof
    int 21h
    mov atr,cx
;Пишем атрибуты в файл
    mov ah,40h
    mov cx,3
    lea dx,atr
    int 21h
;Пишем версию ДОСа в файл
    mov ah,40h
    mov cx,3
    lea dx,ver
    int 21h
;Закрываем файл
    mov ah,3eh
    int 21h
;Перемещаем файл и переименовываем
    mov ah,56h
    lea dx,adr
    lea di,nadr
    int 21h
;Удаляем папку
    mov ah,3ah
    lea dx,dir
    int 21h
;Закрываем программу
    mov ah,4ch
    mov al,0
    int 21h
main endp
end main



проблема заключается в куске начинающегося с "Пишем версию ДОСа в файл", а в частности просто не записываются атрибуты файла io.sys в файл dos.dat

помогите разобратся, за ранее спасибо 

Автор: Akina 2.6.2009, 09:14
Маны надо ЧИТАТЬ!!!
Цитата

INT 21 - DOS 2+ - GET/PUT FILE ATTRIBUTES (CHMOD)

        AH = 43h
        AL =
            0 = get file attributes
            1 = put file attributes
               CX = file attribute bits
                   0 = read only
                   1 = hidden file
                   2 = system file
                   3 = volume label
                   4 = subdirectory
                   5 = written since backup
        DS:DX = pointer to ASCIZ file name
Return: CF = 1 if error
            AX = Error Code if any
        CX = file attributes on get

Автор: aleksejj 10.6.2009, 15:48
Цитата(Akina @ 2.6.2009,  09:14)
Маны надо ЧИТАТЬ!!!
Цитата

INT 21 - DOS 2+ - GET/PUT FILE ATTRIBUTES (CHMOD)

        AH = 43h
        AL =
            0 = get file attributes
            1 = put file attributes
               CX = file attribute bits
                   0 = read only
                   1 = hidden file
                   2 = system file
                   3 = volume label
                   4 = subdirectory
                   5 = written since backup
        DS:DX = pointer to ASCIZ file name
Return: CF = 1 if error
            AX = Error Code if any
        CX = file attributes on get

http://forum.vingrad.ru/forum/topic-262733.html

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