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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2016, 18:22   #1
kieyv
 
Регистрация: 13.12.2015
Сообщений: 3
По умолчанию Определение типа разделов на жестком диске

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

Подскажите пожалуйста как это можно сделать

Код:
.386
dseg  segment use16
    buffer db 446 dup (0)
    part1   db   16 dup(0)
    part2   db   16 dup(0)
    part3   db   16 dup(0)
    part4   db   16 dup(0)
    sign    db   02 dup(0)

    errr   db 'Attention sector read error! $'  
    razdel  db  'Part count: $'

    ;Пакет дискового адреса 
    paket db 16 		;длинна пакета 
	  db 0	
	  db 1 			;кол-во секторов для чтения
	  db 0
	  dw buffer 		;внутрисегментная адресация области буфера 
	  dw dseg		;значение указателя сегмента данных
	  dq 0			;номер сектора в LBA

dseg  ends
cseg  segment use16

assume ds:dseg, cs:cseg

m1:
mov cx, dseg
mov ds, cx

	mov ah,42h	
	mov dl,80h	;номер устройства
	lea si,paket	;смещение пакета диского адреса в сегмент данных
	
	int 13h
	jc  short eerr

        mov   ah,9
	lea   dx,razdel
	int   21h

        lea si,part1+4
        mov   cx,4
        mov   al,'0'
find:   cmp   byte ptr [si],0     ; проверка очередного флага
        jz    next
        inc   al             ; счётчик, если не нуль
next:   add   si,16          ; адрес сл.флага..
        loop  find
        int   29h
      

;завершение исполнения
exit:	mov ah,4ch
	int 21h


eerr:
	mov   ah,9
	lea   dx,errr
	int   21h
	jmp   short exit 


cseg ends
end m1
kieyv вне форума Ответить с цитированием
Старый 27.12.2016, 19:25   #2
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Сообщений: 295
По умолчанию

Ну, так в строке cmp byte ptr [si],0 проверяется типа раздела.
Вот в зависимости от этого значения можно и выводить разные данные.
Как реализовать? Вариантов куча.

1. Записать 255 строк, оканчивающихся нулём (или '$' для удобства вывода) и отыскивать нужную строку в зависимости от кода файловой системы (если строка пуста, выводим "Unknown").

2. Записать строки в формате:
Код:
db Код,'Файловая система',0  ; или $ в конце
и так для каждой файловой системы. И аналогично сканировать коды и пропускать строки, если код не совпал. Если не ничего найдено, выводим "Unknown". (Я бы сделал именно так)

3. Сделать массив из 255 слов (dw), в которые записать адреса строк, содержащих название. И потом берём код*2, читаем это слово-адрес и находит строку.

4. Комбинируем: массив из 255 байтов+слов. Байт харанит код, слово хранит адрес строки.

5. Все названия файловых систем сделать из, например, 16 символов. И расположить 255 таких строк друг за другом (либо код+строка). Дурной, конечно, способ, но вероятно, самый простой.

И т.д....
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru

Последний раз редактировалось 7in; 27.12.2016 в 19:28.
7in вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бэды на жестком диске. Дима я Компьютерное железо 5 16.02.2013 18:56
Восстановление инфы на жестком диске Ecosasha Компьютерное железо 1 29.04.2012 15:12
Свободное пространства на жестком диске optimator Общие вопросы C/C++ 2 08.07.2011 22:44
получение иформации о ЖЕСТКОМ диске ganiebal Общие вопросы Delphi 0 14.05.2010 09:48
Место на жестком диске Gapro Общие вопросы Delphi 3 04.12.2009 20:28