Шаг 19 - Функция 44H подфункция 08H INT 21H проверка носителя

О функции 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

Смотрим на результат:

19_1.gif (4980 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.