Получение списка внешних накопителей - 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        ;конец прерывания

Объяснение кода листинга программы

  1. Старый вектор 24-го прерывания (old24) - это переменная, которая содержит старый вектор 24-го прерывания, отвечающего за серьезные ошибки при обращении к диску, включая ситуации, когда в дисководе нет дискеты или компакт-диска. Значение этой переменной равно 0.
  2. Текущий номер диска (dsk) - это переменная, которая содержит текущий номер диска, который проверяется на наличие свободного места. Значение этой переменной равно 1.
  3. Буквы найденных дисков (disks) - это массив, в котором сохраняются буквы найденных дисков. Каждый элемент массива представляет собой букву, соответствующую определенному диску. Массив имеет размер 26 элементов.
  4. Функция получения 24-го вектора прерывания (mov ax,3524h int 21h) - эта последовательность команд используется для получения текущего вектора 24-го прерывания. Функция возвращает вектор, который затем сохраняется в переменной old24.
  5. Функция определения свободного места на диске (mov ah,36h) - эта функция используется для определения свободного места на диске с заданным номером. Если диск свободен, функция возвращает его номер, преобразованный в букву, которую затем можно использовать для обращения к диску.
  6. Новый обработчик 24-го прерывания (new24) - это функция, которая устанавливается вместо старого вектора 24-го прерывания. Если обнаруживается, что диск, на который пытается обратиться программа, отсутствует или занят, функция возвращает ответ Fail.
  7. Количество найденных дисков (numdsk) - это переменная, которая используется для подсчета количества найденных дисков. Начальное значение этой переменной равно 0.
  8. Буквы дисков в массиве disks - каждая буква в массиве disks соответствует определенному диску. Буквы располагаются в алфавитном порядке, начиная с буквы A и заканчивая буквой Z. Каждая буква соответствует диску с определенным номером.
  9. Проверка всех дисков (m2) - эта часть кода используется для проверки всех дисков, начиная с диска с номером 1 и заканчивая диском с номером 26. Если диск не найден, программа пропускает его и переходит к следующему диску.
  10. Функция возврата ответа Fail (mov al,3 iret) - эта функция используется в новом обработчике 24-го прерывания для возврата ответа Fail в случае, если диск не найден или занят.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы