С Новым годом! Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024

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

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

Студворк — интернет-сервис помощи студентам
Было такое задание:
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2012, 14:54
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 1 минуту
И еще вопрос а почему количество дисководов показывает 26?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
02.04.2012, 16:47
Цитата Сообщение от REALIST07 Посмотреть сообщение
а почему количество дисководов показывает 26?
Наверное потому что букв 26...
0
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
02.04.2012, 16:55  [ТС]
Ааа блин я сморосил,только сейчас понял что например С-имеет номер(с 0) - 2,D-3 и т.д. спасибо но даже при таком раскладе не ладится,а сама лаба тут
Вложения
Тип файла: doc lab_os_6.doc (69.5 Кб, 19 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2012, 16:55
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru