О функции 44H вообще как о таковой я говорил в шаге "Шаг 15 - Что такое IOCTL". Этой функции передается в качестве параметра.
BL= ID диска (0=текущий, 1=A, и т.д.)
На выходе мы получаем статус этого диска.
AX = 00H - съемный носитель (т.е. флоппи-диск) AX = 01H - не съемный (твердый диск или RAM-диск) AX = 0FH - код ошибки если BL содержит неверный диск
Давайте попробуем ее применить. Итак. Пишем код используя все знания полученные в прошлых шагах:
MODEL TINY STACK 100h DATASEG str1 DB 'Removable $' str2 DB 'Not removable $' str3 DB 'Error $' str4 DB ' ??? $' CODESEG start: mov ax,@data mov ds,ax mov cx,10h label1: dec cx push cx mov ah,44h mov al,08h mov bx,cx int 21h cmp ax,0Fh je TypeOF cmp ax,00h je TypeOO cmp ax,01h je TypeOI mov dx,offset str4 mov ah,09h int 21h jmp ExitCmp TypeOI: mov dx,offset str2 mov ah,09h int 21h jmp ExitCmp TypeOO: mov dx,offset str1 mov ah,09h int 21h jmp ExitCmp TypeOF: mov dx,offset str3 mov ah,09h int 21h ExitCmp: pop cx jcxz EndProgs jmp Label1 EndProgs: mov ah,04Ch mov al,1h int 21h end start
Смотрим на результат: