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

Вывести содержимое корневого каталога логического диска А, используя Handle-ориентирование и 13 прерывание

28.06.2009, 15:16. Показов 2060. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
люди, вот у меня задание: вывести содержимое корневого каталога логического диска А, используя Heandle ориентирование и 13 прерывание:
вот прога и как её подогнать под задание???:



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
.model tiny
.code
.386p
org 100h
start:
mov ax,0003h
int 10h
call ReadRootDir
call ReadFAT
ret
 
; Чтение сектора (DX=номер сектора)
; ES:DI – Адрес для приёма данных
 
ReadSect proc
push di
push es
; Начало расчета сектора/дорожки/головки
push cs
pop ds
mov cx,[gnTrackSect]
mov si,dx
; tmp=(Sector/TrackSectors);
mov ax,si
xor dx,dx
div cx
mov di,ax
; Sec=Sector-(tmp*TrackSectors)+1;
mov ax,di
imul cx
mov dx,si
sub dx,ax
inc dx
mov [AbsSectNum],dx
; Head=tmp & 1;
mov ax,di
and ax,1
mov [AbsHeadNum],ax
; Trk=(Sector-(Head*TrackSectors)-(Sec-1))/(TrackSectors*2);
imul cx
push ax
mov ax,si
pop dx
sub ax,dx
mov dx,[AbsSectNum]
dec dx
sub ax,dx
mov dx,cx
shl dx,1
push ax
push dx
xor dx,dx
pop bx
pop ax
div bx ; AX = AbsTrackNum
; Конец расчетов
mov cx,ax
mov al,cl
shr cx,2
and cl,0C0h
mov ch,al
and cx,0FFC0h
mov ax,[AbsSectNum]
or cl,al
pop es
pop bx ; ES:BX = Куда считывать
mov dx,[AbsHeadNum]
mov dh,dl ; Номер головки
mov dl,0 ; Номер диска 0 = A
mov al,1 ; Количество считываемых секторов
mov ah,2 ; Номер функции
int 13h
ret
ReadSect endp
 
ReadRootDir proc
;Чтение корневого каталога в оперативную память
pusha
mov dx,19 ;Начальный сектор ROOT′a
mov di,offset RootDir
Cont_Read_Root:
push dx
push di
push es
Call ReadSect ;Чтение сектора
pop es
pop di
pop dx
add di,512
inc dx
cmp dx,33
jne Cont_Read_Root
popa
ret
ReadRootDir endp
 
 
ReadFAT proc
;Чтение таблицы размещения файлов в оперативную память
pusha
mov dx,1
mov di,offset Mem_FAT
Cont_Read_Fat:
push dx
push di
push es
Call ReadSect
pop es
pop di
pop dx
add di,512
inc dx
cmp dx,10
jne Cont_Read_Fat
popa
ret
ReadFAT endp
 
AbsSectNum dw 0
AbsHeadNum dw 0
gnTrackSect dw 18 ; Число секторов на дорожку
Mem_FAT db 9*512 dup(?)
RootDir db 15*512 dup (?)
end start
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.06.2009, 15:16
Ответы с готовыми решениями:

Содержимое корневого каталога логического диска А
помогите написать программу, выводящую содержимое корневого каталога логического диска А! ПОЖАЛУЙСТА!!!

Вывести на экран содержимое каталога, размер файлов каталога, и создать новый файл
Ребята помогите создать программу на ассемблере , в которой нужно : вывести на экран содержимое каталога, размер фалов каталога, и создать...

Вывести содержимое каталога
Пытаюсь вывести список всевозможных подкаталогов. <?php function getDirectoryTree($path, $level = 1) { $d =...

9
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
28.06.2009, 16:28
не стал особо разбираться в программе, но вот, что я скажу. Во первых подпрограмму ReadFAT можно полностью убрать она здесь не нужна.
После выполнения программы в буфере RootDir будут структуры элементов каталога. Каждая структура 32 байта. Первый 11 байт это имя файла и расширение ( без точки ). Если первый байт в имени "x" , значит этот элемент удален и его выводить не нужно. Если первый байт в имени 0, значит это конец списка элементов.
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
28.06.2009, 19:58
Поменяйте ReadFat на вот такую ф-цию

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PrintRoot proc
 
lea si,RootDir
prn:
    cmp byte ptr [si],0e5h
    jz nextelem
    mov word ptr [si+11],0d0ah
    xor bx,bx
    mov dx,si
    mov ah,40h
    mov cx,13
    int 21h
 
nextelem:
    add si,32
    
    cmp byte ptr [si],0
    jnz prn
    ret
PrintRoot endp
0
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
30.06.2009, 20:00  [ТС]
А где вобще в прогое Heandle-ориентирование???
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
30.06.2009, 20:18
ф-ция 40h int 21h - handle ориентированная.
0
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
01.07.2009, 18:02  [ТС]
скажи пожалуйста, а как мы вообще пробрались в корневой каталог??
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
01.07.2009, 18:43
Как это ни странно, считали его с дискеты
0
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
02.07.2009, 15:37  [ТС]
Goodwin98,
Мне препод дал прогу и спрашивает каким образом мы добоались до rootDIR?, и как определил с каког сектора начинается мой корневой каталог?? просто всего этого он не нашё у меня в проге!
вот сама прога:
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
;Эти floppy - диски записывают 80 цилиндров и 160 дорожек, 
;соответственно. Каждая дорожка имеет 18 секторов. 
DATA SEGMENT
 DATA_BUFER         DB 512 dup(?) ;
 SIZE_DATA_BUFER    = $ - DATA_BUFER
;reedroot.txt    
 PATH1              db "spisok_FDD_failov.txt",0
 point_fname1       dd PATH1
 Perem              db ?
 HANDLE1            dw ?
 Perem_buf          db 11 dup(?)  ;
 point_per_buf      dw perem_buf
 ;номер сектора чтения
 sectors            db 2            ; количество вvделенное для Rootdir
 ;weeldone
 Good_msg           db "Funkcia int 13 otrabotala.$",0ah,0
 ; пустой файл
 info_msg           db "На дискете больше файлов нет.",,0ah,0dh,24h,0
 info_msg_size      = $ - info_msg
 ;Пастая строка     
 zero_str           db " " ,0ah,24h,0
 zero_str_size      = $ - zero_str
DATA ENDS
 
STT SEGMENT STACK
DW 40 DUP(?)
STT ENDS
 
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STT
BEGIN:
 
 
 
;установка сегментнvх секторов
           MOV AX,DATA
           MOV DS,AX
           MOV ES,AX
           MOV AX,STT
           MOV SS,AX
           ;отладка
           jmp read_sector
 
 
           
          ; mov Cx, 07 
;читать сектор корневого каталога
read_sector:
          LEA BX, ES:DATA_BUFER
          MOV Ah, 02h     ; чтение
          MOV Al, 01h     ; число читеамых секторов
          MOV Dh, 01h     ; номер головки
          MOV Dl, 00h     ; номер диска
          mov Ch, 00h     ; номер дорожки 0
          mov Cl, sectors ; номер сектора 
          INT 13H
          
          mov DX, offset Good_msg
          MOV Ah, 09h
          INT 21H
;
; Открvть фал
;    
     xor    cx,cx           ; обvчнvй файл
     mov    bx, 2           ; для чтения-записи в режиме бvферизации в dos
     mov    dx, 12h         ; если файл суествует, то открvть его без сохранения содержимого
     lds    si, point_fname1    ; формируем указатель на имя файла
     mov    ah, 6ch         ; номер функции 
     int    21h         ; открvваем, создаїм файл
          
     MOV HANDLE1, AX
     ;JC ERROR
     ;
     ; курсор на начало файла 
     ;
     mov   ah, 42h
     xor   al, al
     xor   cx, cx
     xor   dx, dx
     mov   bx, handle1
     int   21h          
         
         
          ;
          ;
          ;
     
          
          ; число читаемых файлов
          mov cx, 10
          ;начальное смещение
          mov di, 0
          mov dx, offset DATA_BUFER ;ds:dx<= offset DATA_bufer
      next_name:
          ;заносим в стек текущую позицию цикла
          push cx
          ;mov bx, dx
          
          ;
          ;     
          ;
          LEA BX, ES:DATA_BUFER
          MOV Ah, 02h     ; чтение
          MOV Al, 01h     ; число читеамых секторов
          MOV Dh, 01h     ; номер головки
          MOV Dl, 00h     ; номер диска
          mov Ch, 00h     ; номер дорожки 0
          mov Cl, sectors ; номер сектора 
          INT 13H
                         
          ;проверка на наличае файлов
          cmp byte ptr ds:[bx], 0e5h
          je info
         
         ;запись найденных результатов
 
           mov cx, 11        ; количество символов на вывод
           mov bx, handle1   ; 1 - monitor
           mov Ah, 40h       ;
           mov dx, offset DATA_BUFER  ; ds:dx<= offset DATA_bufer
           add dx, di
           int 21h
           
          push dx
           
            mov cx, zero_str_size        ; количество символов на вывод
            mov bx, handle1   ; 1 - monitor
            mov Ah, 40h       ;
            mov dx, offset zero_str  ; ds:dx<= offset zero_str
            int 21h
           
           pop dx
  
 
          ;переход на следущий файл +32
           add di, 32
           ;Забираем из стека предыдущую позицию цикла  
           pop cx
       ;читать следующее имя файла
       loop next_name
     
     ;выводит сообщение о отсутствии фалов
     info: 
        mov cx, info_msg_size
        mov bx, handle1
        mov Ah, 40h
        mov dx, offset info_msg
        int 21h
         
        
        
     ;
     ; Закрытие файла
     ;     
     MOV Ah, 3eh         ;функция закрvтия файла
     MOV BX, HANDLE1    ;в T- должен находиться описатель файла
     INT 21H             
     JC ERROR        
   
          
 
           
          jmp find_files
 
find_files:
;          mov Cx, SIZE_DATA_BUFER
;          xor Si, Si
; fnd_loop:
;          ; 1-й символ расширения = C, если нет, то на next файл (+32) 
;          add si, 9
;          cmp DATA_BUFER[Si], 'c'
;          jne Next_file
;          inc si
;          cmp DATA_BUFER[Si], 'o'
;          jne Next_file
;          inc si
;          cmp DATA_BUFER[Si], 'm'
;          jne Next_file
          
          
;  Next_file:
;           add Si, 32
;           jmp fnd_loop
 
;
; Отладка
;
;mov DX, offset DATA_BUFER
;ADD DX, 03h
;MOV Ah, 09h
;INT 21H
 
 
;
; Открvть фал
;    
     xor    cx,cx           ; обvчнvй файл
     mov    bx, 2           ; для чтения-записи в режиме бvферизации в dos
     mov    dx, 12h         ; если файл суествует, то открvть его без сохранения содержимого
     lds    si, point_fname     ; формируем указатель на имя файла
     mov    ah, 6ch         ; номер функции 
     int    21h         ; открvваем, создаїм файл
          
     MOV HANDLE, AX
     JC ERROR
    ;
    ; курсор на начало файла 
    ;
    mov   ah, 42h
    xor   al, al
    xor   cx, cx
    xor   dx, dx
    mov   bx, handle
    int   21h
 
 
;
; Записать в файл
;
     
 
      mov     ah, 40h
      mov     bx, HANDLE
      mov     cx, SIZE_DATA_BUFER
      mov     dx, offset DATA_BUFER
      int     21h     ;DATA_BUFER   ; указатель на область, Bufer откуда будем вvводить даннvе      
      JC ERROR
 
; Закрvть файл
 
     MOV Ah, 3eh         ;функция закрvтия файла
     MOV BX, HANDLE      ;в T- должен находиться описатель файла
     INT 21H             
     JC ERROR            ;если флаг взведен, то ошибка
;
; Обработка ошибок
;
ERROR:
  jmp KON
 
 
 
KON:
MOV AH,4CH
INT 21H
CODE ENDS
 END BEGIN;//ітот файл создан с помоьі ASM Tool v0.85
 
 
 
 
   ;cmp byte ptr ES:[BX], 0e5h ; сравнение на пустой элемент
   ;определяем положение загрузочного сектора
   ;первого раздела жесткого диска
   ;MOV Dh, ES:DATA_BUFER [ 1bfh ]         ;1T+=+1
   ;MOV Cx,WORD PTR ES:DATA_BUFER[1c0h]  ;1T+=+2
   
   ;MOV DH,ES:BUFER [1]
   ;MOV CX,WORD PTR ES:BUFER[1] 
   
   ;читаем загрузочнvй сектор
   ;MOV AX,0201H
   ;INT 13H
   
   ;MOV byte PTR ES:DATA_BUFER [3+8],'$' ;отмечаем конец строки
   ;вvводим создателя загрузочного сектора
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
02.07.2009, 18:50
Я вот тоже не смог увидеть этого в последней проге
В первой это четко выделено коментарием
Assembler
1
mov dx,19 ;Начальный сектор ROOT′a
На дискете он 99% случаев будет начинаться с 19 сектора. Но если надо расчитывать, то делаается это так.
1. Считывается первый(загрузочный) сектор дискеты.
2. Из него берем:
+0Eh 1б- Число секторов в зарезервированной области; ( для дискеты 1 )
+10h 1б- Число копий таблицы FAT; ( обычно 2 )
+16h 2б- Число секторов в таблице FAT;
Т.е. чтобы добраться до корневого каталога на дискете считаем
НомерСектораКаталога = ЧислоFAT * ЧислоСекторовFAT + ЧислоЗарезервировынныхСекторов

PS: Это все только для расчета дискеты, если спросишь, как это делать для жесткого диска я просто обижусь.
0
0 / 0 / 0
Регистрация: 06.06.2009
Сообщений: 14
02.07.2009, 20:14  [ТС]
Будь так добр, ты не мог бы показать как привязать всё это к моей проге?

Добавлено через 12 минут 57 секунд
Цитата Сообщение от Alien9356 Посмотреть сообщение
Будь так добр, ты не мог бы показать как привязать всё это к моей проге?
Я имею в виду поиск корневого каталога...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.07.2009, 20:14
Помогаю со студенческими работами здесь

Загрузка dll не из корневого каталога
Всем привет! Помогите, пожалуйста, решить проблему. Я пишу консольную программку, которая загружает из определённой папки dll-файлы. В...

Вывод на экран корневого каталога
Доброго времени суток, как на С++ написать, чтобы вывело на экран содержимое корневого каталога. Спасибо

Вывести содержимое каталога без папок
Доброго времени суток ув.Форумчане! Помогите плиз разобраться с кодом. $path = &quot;./files&quot;; $dir =...

GParted и увеличение размера корневого каталога
Итак... Вообщем мне захотелось увеличить размер корневого каталога. Загрузился с LiveCD, запустил GParted, откусил кусок от другого диска....

Вывести содержимое каталога-параметра, форматируя его
Всем, доброго времени суток. Нужна помощь. Есть скрипт на такое задание: &quot;параметр shell программы - каталог. Нужно вывести его содержимое....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru