1 / 1 / 0
Регистрация: 03.02.2016
Сообщений: 10
1
TASM

Программа для перемещения и просмотра содержимого каталогов на диске

14.05.2016, 13:33. Показов 1531. Ответов 1
Метки нет (Все метки)

Добрый день.
Задание следующее: создать программу для перемещения и просмотра содержимого каталогов на диске.
Как просматривать файлы я код сделал, а вот чтобы перемещать их из каталога в каталог не знаю.
Комментарии на укр. языке потому что учусть в Киевском ВУЗе
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
model tiny
.code
.startup
;---------------------------------------------
        lea dx,DTA              ;встановлення адресу зміщення для
                            ;локального буфера
 
  mov ah,1ah
        int 21h
 
        call Find_First             ;пошук першого файла
        jc exit1                    ;якщо нема файлів перейти до exit1  
        call Out_Info               ;виведення даних про файл
 
cukl:   call Find_Next              ;пошук наступного файла      
  jc exit2                  ;якщо нема файлів перейти до exit2 
        call Out_Info               ;виведення даних про файл
        loop cukl                   ;перейти до cukl
 
exit1 : lea dx,info             ;виведення даних info
        mov ah,09h
        int 21h
 
exit2 : mov ah,4ch              ;завершення програми
        int 21h
;----------------------------------------------------------------
Find_First proc                 ;пошук першого файла
        lea dx,Path             ;загрузка в dx адреса строки Path
        mov cx,00                   ;встановлення атрибутів
        mov ah,4eh              ;виклик функції для пошуку
        int 21h
        ret
Find_First endp
 
Find_Next proc                  ;пошук наступного файла      
        lea dx,Path             ;загрузка в dx адреса строки Path
        mov cx,00                   ;встановлення атрибутів
        mov ah,4fh              ;виклик функції для пошуку
        int 21h
        ret
Find_Next endp
 
Out_Info proc                   ;виведення даних про файл
;------------------------------------------------------------------
                                ;вивід імені файла
  lea dx,strk               ;загрузка в dx адреса строки strk
        mov ah,9h                   ;для переведення курсора на 
        int 21h                 ;наступний рядок
 
        mov cx,0dh              ;запис в cx 0dh – кілкість байтів, 
                                ;які буде виводити ф-я 40h
  mov bx,1eh                ; імені
                                ;імені файла відносно DTA 
  lea dx,DTA + bx               ; загрузка в dx адреса зміщення 
                                ;імені файла
  mov bx,1                  ;запис в bx=1, див. використання   
                                ;функції 40h 
  mov ah,40h                ;виклик функції 40h
        int 21h
;-----------------------------------------------------------------
        lea dx,sozdan               ;вивід на екран слова sozdan
        mov ah,09h
        int 21h
 
        mov cx,2                    ;запис в cx 0dh – кілкість байтів,
        mov bx,18h              ;загрузка в bx адреса зміщення
                            ;для визначення дати
        lea bx,DTA + bx             ;загрузка в bx адреса зміщення дати
        mov ax,[bx]                     ;запис в ax значення, що знаходиться                         ;по адресі в bx
        mov di,ax                   ;запис в di значення ax (в di будемо
                        ;зберігати два байта, що зберігають
                        ;дані про дату 
                            ;Vuvid chusla
        mov si,10                       ;запис в si значення 10
        and ax,001fh                ;лог. операція складання числа в ax 
                            ;з маскою 001fh результат в ax
        mov dx,0                    ;запис в  dx значення 0
        div si                  ;AX/10 результат в AX, залишок в DX
        add dx,'0'              ;додавання до залишку 30h
        lea bx,chuslo               ; загрузка в bx адреса зміщення 
                        ;строки chuslo
        mov [bx+1],dl               ;запис в строку із адресом зміщення
                        ; [bx+1] значення, регістра dl
 
        add ax,'0'              ;додавання до ax 30h
        lea bx,chuslo               ; загрузка в bx адреса зміщення
                        ;строки chuslo
        mov [bx],al             ; запис в строку із адресом зміщення
                            ; [bx] значення, регістра al
        lea dx,chuslo               ; загрузка в dx адреса зміщення
                                ; строки chuslo
  mov ah,09h                ;виклик ф-ї виводу на екран строки 
                        ;строки chuslo
        int 21h                 ;вивід на екран строки chuslo
 
;визначеня року
  ;визначення року відбувається аналогічно визначенню числа, тільки 
  ;потрібно додати 1980, так як вказано у теоретичних відомостях
  ;і крім того потрібно ділити рік на 10 3 рази, тому що він складається
  ;з чотирьох цифр (для числа ділити 1 раз, воно склад. з двох цифр), 
  ;а все інше за тим самим принципом, що і для визначення числа
 
  mov ax,di                 
        and ax,0fe00h
        shr ax,9                ;Vuvod roky
        add ax,1980
 
        mov bp,0
        mov di,ax
        lea bx,rik+4
 
cukl2:        mov ax,di
        mov dx,0
        div si
        add dx,'0'
        mov di,ax
 
        mov [bx],dl
        sub bx,1
 
        mov cx,4
        add bp,1
        sub cx,bp
        loop cukl2
 
        mov dx,di
        add dx,'0'
        mov [bx],dl
 
        lea dx,rik
        mov ah,9h
        int 21h
 
        lea dx,OB
        mov ah,09h
        int 21h
        ret
Out_Info endp
;-------------------------------------------------------------------------
 
        ret
DTA db 50 dup(?),'$'                ;локальний буфер інформації про файл
Path db "Z:\*.*",0          ;шлях і маска пошуку файлів 
strk db 0ah,0dh,'$'         ;перев. курсора на поч. наступного рядка   
   rik db 5 dup(?),' roky$'     ;рядок, в який записується рік
Mis db ' Sichen  $ Lyutogo  $ Bereznya $ Kvitnya  $ Travnya  $ Chervnya $ Lupnya   $ Serpnya  $ Veresnya $ Ghovtnya $ Lustopada$ Grudnya  $'
chuslo db '   $'                ;рядок, в який записується число
 
Sozdan db '            sozdan: $'  ;рядок в пам’яті із словом sozdan:
OB db ' y $'                ;рядок в пам’яті із словом y
chas db '  :  :  $'         ;рядок, в який записується час
Info db 'V daniy deruktoriyi fayliv nema!!!$'  
        end
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2016, 13:33
Ответы с готовыми решениями:

Создание программы для перемещения и просмотра содержимого каталогов на диске
Здравствуйте, ребята, не могли бы вы помочь в выполнении задания? Задание такое: создать...

Перемещение и просмотр содержимого каталогов на диске
Написать на языке ассемблера программу для перемещения и просмотра содержимого каталогов на диске

Программа для просмотра содержимого ОЗУ
подскажите пожалуйста прогу для просмотра содержимого оперативы

Просмотр содержимого каталогов, перемещение каталогов
И снова я,но может кто-нибудь, последний раз выручить меня с ассемблером ?:cry: Осталось сделать...

1
1778 / 756 / 153
Регистрация: 03.06.2009
Сообщений: 5,834
15.05.2016, 10:56 2
Есть пример на с++, переписывать на ассемблер придется самостоятельно.

C++
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//Рекурсивное перемещение папки
void moveDir(const WCHAR *strDirname, const WCHAR *strCopyTo) {
    CreateDirectory(strCopyTo, NULL);
 
    WCHAR *strSearchPath = new WCHAR[lstrlen(strDirname) + 5];
    lstrcpy(strSearchPath, strDirname);
    lstrcat(strSearchPath, L"/*.*");
    WIN32_FIND_DATA findData;
    HANDLE hFind = FindFirstFile(strSearchPath, &findData);
    delete [] strSearchPath;
 
    if (hFind != NULL) {
 
        do {
            if ((lstrcmp(findData.cFileName,L".") == 0 ) ||
                    (lstrcmp(findData.cFileName, L"..") == 0)) {
 
                continue;
            }
            // Source file|directory
            WCHAR *strSPath = new WCHAR[lstrlen(strDirname) + 1 + lstrlen(findData.cFileName) + 1];
            lstrcpy(strSPath, strDirname);
            lstrcat(strSPath, L"/");
            lstrcat(strSPath, findData.cFileName);
 
            // Destanation file|directory
            WCHAR *strDPath = new WCHAR[lstrlen(strCopyTo) + 1 + lstrlen(findData.cFileName) + 1];
            lstrcpy(strDPath, strCopyTo);
            lstrcat(strDPath, L"/");
            lstrcat(strDPath, findData.cFileName);
 
            // Directory or file
            if (findData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) {
                moveDir(strSPath, strDPath);
                RemoveDirectory(strSPath); //после перемещения файлов из папки удалить пустую папку
            } else {
                MoveFileEx(strSPath, strDPath,MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED);
            }
 
            delete [] strSPath;
            delete [] strDPath;
        } while (FindNextFile(hFind, &findData));
    FindClose(hFind);
    RemoveDirectory(strDirname);    //удалить пустую начальную папку
    } else {
        MessageBox(0, L"hFind == NULL", L"DEBUG message", 0);
    }
}
FindFirstFile заменяется функцией 4eh
MoveFileEx -> 56h
RemoveDirectory -> 3ah
FindNextFile -> 4fh
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2016, 10:56
Помогаю со студенческими работами здесь

Утилита для просмотра содержимого полей документа
Доброго всем дня. Для своих нужд набросал утилитку позволяющую посмотреть значения полей в...

Компонент для просмотра содержимого папки со всеми ярлыками
Доброго времени суток. У меня такой вопрос, есть ли какойни будь копонент для Делфи, для просмотра...

Написать С++ приложение для просмотра содержимого файлов образов *.iso
Доброго времени суток! Тема моей курсовой: Написать Windows-приложение для просмотра ...

Исходник программы для просмотра содержимого таблицы Oracle 11g
Поделитесь если не жалко =)


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru