Консультация № 86742
13.05.2007, 19:00
0.00 руб.
0 1 1
Парни, помогите, это надо реализовать на TASM-е: Вывести на экран информацию о всех дисках системы (по функции 36h). Заранее спасибо!!

Обсуждение

давно
Старший Модератор
31795
6196
14.05.2007, 13:09
общий
это ответ
Здравствуйте, Vitaly89!

Из-за особенностей организации работы дискетами
дисководы А: и В: игнорируются.
Удачи!

Приложение:
MODEL smallstack 200.186DATASEGsektor db 13,10,‘sektors in klaster:$‘klaster db 13,10,‘all klasters:$‘byteInSector db 13,10,‘byte in sector:$‘klastersInHdd db 13,10,‘klasters in Hdd:$‘CODESEGstart: mov ax,@DATA mov ds,ax mov es,ax;начинаем mov cx,26loop_find: push cx;выводим имя дисковода mov al,cl add al,40h int 29h mov al,‘:‘ int 29h pop cx push cx;игнорируем дисководы А: и В: cmp cl,3 jl loop_next mov ah,36h mov dl,cl int 21h;проверяем ошибку работы функции jc loop_next cmp ax,-1 jz loop_next;запоминаем полученные данные push dx push cx push bx push ax;вывод кол-ва секторов в кластере mov ah,9 mov dx,offset sektor int 21h pop ax call out_dec;вывод кол-ва доступных кластеров mov ah,09 mov dx,offset klaster int 21h pop ax call out_dec;вывод кол-ва байт в секторе mov ah,9 mov dx,offset byteInSector int 21h pop ax call out_dec;вывод кол-ва кластеров на диске mov ah,09 mov dx,offset klastersInHdd int 21h pop ax call out_decloop_next: mov al,13;первод строки int 29h mov al,10 int 29h mov ah,7;ожидаем символ int 21h pop cx loop loop_find mov ah,4ch;выход в дос int 21h;вывод в 10-ой формеout_dec: xor cx,cx mov bx,10out_dec_div: xor dx,dx div bx or dx,30h;остаток от деления push dx;сохраняем в стеке inc cx;считаем кол-во цифр or ax,ax;пока не 0 делим jnz out_dec_divout_dec_out: pop ax;извлекаем из стека int 29h;и выводим псчитанное кол-во цифр loop out_dec_out ret end start
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа