model small
.stack 100h
.data
drive db 'A:', 0Dh, 0Ah, '$'
.code
main proc
mov ax, @data
mov ds, ax
mov es, ax
enter 0, 0 ; резервируем место для фрейма стека
mov dl, 'A' ; начинаем с диска A
next_drive:
mov ah, 0Eh ; функция вывода символа в int 10h (BIOS)
int 10h ; выводим букву диска
mov ah, 19h ; функция DOS - получить текущий диск
int 21h
cmp al, dl ; проверяем, существует ли диск
jne skip ; если нет, переходим к следующему
lea dx, drive ; загружаем адрес строки с буквой диска
mov ah, 09h ; функция DOS - вывести строку
int 21h
skip:
inc dl ; переходим к следующему диску
cmp dl, 'Z' ; проверяем, достигли ли мы конца алфавита
jbe next_drive ; если нет, продолжаем
leave ; восстанавливаем фрейм стека
mov ax, 4C00h ; завершение программы
int 21h
main endp
end main