Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
1

Работа с прерываниями и с функцией MSDOS

02.04.2012, 14:54. Показов 1084. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Было такое задание:
C помощью функции прерывания 21H найти:
a) размер выбранного диска
b) количество свободного места на выбранном диске
с) количество свободного места на выбранном диске в процентах
d) количество байт в одном кластере
e) по размеру файла определить количество секторов и количество кластеров
Реализовал вот таким образом:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Program WorkWithFAT;
Uses Dos,Crt;
var regs :Registers; n :Word;f :integer;
{Функция показывающяя количество имееющихся дисков на компьютере}
function NumberOfDisks(var reg :Registers): Word;
begin
with reg do begin
  AH:=$19;
  MsDos(regs);
  DL:=AL;
  AH:=$0E;
  MsDos(regs);
  NumberOfDisks:=AL;
end;end;
{Функция которая вернет объем диска в MB
параметр num -номер дисковода}
function DiskSize(var reg :Registers;num: byte):integer;
var _al,_cx,_dx : word;f,r :integer;
begin
with reg do begin
DL:=num;
AH:=$36;
Msdos(regs);
_al:=AL;
_cx:=CX;
_dx:=DX;
f:=_dx div 1024;
r:=f*_al*_cx div 1024;
DiskSize:=r;
end;
end;
{Функция которая вернет объем свободного пространства в MB
параметр num -номер дисковода}
function FreeSpaceOnDisk(var reg :Registers;num: byte):integer;
begin
with reg do begin
DL:=num;
AH:=$36;
Msdos(regs);
FreeSpaceOnDisk:=trunc(AX*CX*BX/1024*1024);
end;
end;
{Функция которая вернет объем свободного пространства в процентах
параметр num -номер дисковода}
function FreeSpaceOnDiskPersent(var reg :Registers;num: byte):integer;
begin
with reg do begin
DL:=num;
AH:=$36;
Msdos(regs);
FreeSpaceOnDiskPersent:=trunc(BX/DX*100);
end;
end;
{Функция которая вернет число байтов в одном кластере 
параметр num -номер дисковода}
function NumBytesOnCluster(var reg :Registers;num: byte):integer;
begin
with reg do begin
DL:=num;
AH:=$36;
Msdos(regs);
NumBytesOnCluster:=AX*CX;
end;
end;
{Функция которая вернет число кластеров при заданном размере файла 
параметр num - размер файла}
function NumCluster(var reg :Registers;num: integer):integer;
begin
with reg do begin
DL:=num;
AH:=$36;
Msdos(regs);
NumCluster:=trunc(num/AX*CX);
end;
end;
{Функция которая вернет число секторов при заданном размере файла 
параметр num - размер файла}
function NumSector(var reg :Registers;num: integer):integer;
begin
with reg do begin
DL:=num;
AH:=$36;
Msdos(regs);
NumSector:=trunc(num/CX);
end;
end;
Begin 
ClrScr;
with regs do begin
 
 
{Информация о памяти}
Writeln('Enter the disc number [0..',NumberOfDisks(regs),']:');
read(n);
Writeln('Disk Size :',DiskSize(regs,n));
Writeln('Free space on disk :',FreeSpaceOnDisk(regs,n));
Writeln('Free space on disk :',FreeSpaceOnDiskPersent(regs,n),'%');
Writeln('The number of bytes in a single cluster :',NumBytesOnCluster(regs,n));
Writeln('Enter the number of bytes your file :');
read(f);
Writeln('In your file :',NumCluster(regs,f),' clusters');
Writeln('In your file :',NumSector(regs,f),' sectors');
readln;
end;
end.
Но у меня неправильные значения выдает почему?Подозреваю что гигибайтные диски виноваты...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2012, 14:54
Ответы с готовыми решениями:

Работа с прерываниями, таймерами - почему предпочтительна через DOSBox в Turbo Pascal ?
Допустим нужно заставить компьютер пропищать какую-нибудь мелодию. Почему это нельзя сделать...

Работа с функцией
Проблема в том что мне нужно разложить на простые множители определенный набор чисел а моя функция...

Нужна книга, где рассматриваются работа с прерываниями, указатели, работа с памятью, ассемблерные вставки
Привет всем! Подскажите, пожалуйста, хорошую книгу по C (именно C, не C++). Интересует работа с...

Работа с прерываниями
Привет всем :D Недавно начал сного программировать МК, до этого писал всякую софту на ПК и у меня...

4
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
02.04.2012, 15:45 2
Если количество байт больше чем 2^31-1 то будет считать неправильно.
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
02.04.2012, 16:44  [ТС] 3
У меня жесткие по 100гиг=107 374 182 400 б
МЕня преподша запарила,говорит найди дискету и протестируй на ней,а где я ей дискету найдУ и еще хуже куда ее воткнуть???Даже флешку меньше 1гб нету у меня
Протестируйте плиз у кого какие значения?А может быть как-то с 32-разрядными регистрами приколоться? типа EAX,EDX и т.д.

Добавлено через 1 минуту
И еще вопрос а почему количество дисководов показывает 26?
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
02.04.2012, 16:47 4
Цитата Сообщение от REALIST07 Посмотреть сообщение
а почему количество дисководов показывает 26?
Наверное потому что букв 26...
0
Автор FAQ
Автор FAQ
200 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
02.04.2012, 16:55  [ТС] 5
Ааа блин я сморосил,только сейчас понял что например С-имеет номер(с 0) - 2,D-3 и т.д. спасибо но даже при таком раскладе не ладится,а сама лаба тут
Вложения
Тип файла: doc lab_os_6.doc (69.5 Кб, 19 просмотров)
0
02.04.2012, 16:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2012, 16:55
Помогаю со студенческими работами здесь

Работа с прерываниями
Здравствуйте. Нужно реализовать шифрование AES, используя новые команды aesenc и aesdec, причем...

Работа с прерываниями
Есть программа для работы с прерыванием по таймеру. Не могу до конца разобраться как и что...

Работа с прерываниями
Доброе время суток. Возник вопрос, недавно я начал учиться работать с прерываниями в DOS, но до...

Работа с прерываниями клавиатуры
Нужно очистить буфер клавиатуры и ввести 12 символов с фильтрацией всех символов, кроме русских...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru