Получение списка внешних накопителей - Assembler
Формулировка задачи:
Здравствуйте. Не могу нигде найти информацию о том, как получить список подключенных внешних накопителей (флешек, дисков). Нужна буква тома, соответствующая устройству. Помогите, пожалуйста.
Решение задачи: «Получение списка внешних накопителей»
textual
Листинг программы
old24 dd 0 ;Старый вектор 24-го прерывания, которое отвечает за серьезные ошибки при обращении к диску, в т.ч когда в дисководе нет дискеты или компакта dsk db 1 ;текущий номер диска disks db 26 dup (0);буквы найденных дисков ... mov ax,3524h ;ф-я получения 24-го вектора прерывания int 21h ;получаем вектор mov word ptr old24,bx ;сохраняем смещение mov ax,es mov word ptr old24+2,ax ;и сегмент push ds ;сохраняем ds push cs pop ds ;ds=cs lea dx,new24 ;смещение нового обработчика 24-го прерывания mov ax,2524h ;ф-я установки 24-го вектора прерывания int 21h ;устанавливаем свой обработчик pop ds ;восстанавливаем ds lea di,disks ;найденные буквы дисков ;ищем доступные диски m1: mov ah,36h ;ф-я определения свободного места на диске mov dl,dsk ;номер диска int 21h ;определяем cmp ax,0ffffh ;если такого диска нет jz m2 ;то пропускаем inc numdsk ;увеличиваем количество найденных дисков mov al,dsk ;номер диска add al,40h ;преобразовываем в букву mov [di],al ;сохраняем inc di ;сделующая буква m2: inc dsk ;следующий диск cmp dsk,26 ;проверили все диски jbe m1 ;если нет - продолжить ..... ;новый обработчик new24: mov al,3 ;возвращаем ответ Fail iret ;конец прерывания
Объяснение кода листинга программы
- Старый вектор 24-го прерывания (old24) - это переменная, которая содержит старый вектор 24-го прерывания, отвечающего за серьезные ошибки при обращении к диску, включая ситуации, когда в дисководе нет дискеты или компакт-диска. Значение этой переменной равно 0.
- Текущий номер диска (dsk) - это переменная, которая содержит текущий номер диска, который проверяется на наличие свободного места. Значение этой переменной равно 1.
- Буквы найденных дисков (disks) - это массив, в котором сохраняются буквы найденных дисков. Каждый элемент массива представляет собой букву, соответствующую определенному диску. Массив имеет размер 26 элементов.
- Функция получения 24-го вектора прерывания (mov ax,3524h int 21h) - эта последовательность команд используется для получения текущего вектора 24-го прерывания. Функция возвращает вектор, который затем сохраняется в переменной old24.
- Функция определения свободного места на диске (mov ah,36h) - эта функция используется для определения свободного места на диске с заданным номером. Если диск свободен, функция возвращает его номер, преобразованный в букву, которую затем можно использовать для обращения к диску.
- Новый обработчик 24-го прерывания (new24) - это функция, которая устанавливается вместо старого вектора 24-го прерывания. Если обнаруживается, что диск, на который пытается обратиться программа, отсутствует или занят, функция возвращает ответ
Fail
. - Количество найденных дисков (numdsk) - это переменная, которая используется для подсчета количества найденных дисков. Начальное значение этой переменной равно 0.
- Буквы дисков в массиве disks - каждая буква в массиве disks соответствует определенному диску. Буквы располагаются в алфавитном порядке, начиная с буквы
A
и заканчивая буквойZ
. Каждая буква соответствует диску с определенным номером. - Проверка всех дисков (m2) - эта часть кода используется для проверки всех дисков, начиная с диска с номером 1 и заканчивая диском с номером 26. Если диск не найден, программа пропускает его и переходит к следующему диску.
- Функция возврата ответа
Fail
(mov al,3 iret) - эта функция используется в новом обработчике 24-го прерывания для возврата ответаFail
в случае, если диск не найден или занят.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д