Я в рейтинге (кол-во набранных баллов) не участвую. Но т.к. я отправляю ответы,
то программа автоматически начисляет мне баллы, которые я время от времени
аннулирую. Потом исправлю это дело...
Вопрос
Расскажите пожалуйста каким образом разбить жесткий диск на логические. И сохранится ли при этом информация на нём?
Ответ
У каждой операционной системы (или почти у каждой) есть своя
программа, называемая fdisk, которая занимается тем, что разбивает
жесткий диск на логические и создает файловую систему, которую
использует данная операционная система. Также и в DOSе (Windowsе) есть программа fdisk.exe, которая разбивает диск под FAT16/32.
Чтобы разбить диск, запускаете fdisk.exe и используя первый пункт
меню разбиваете диск как Вам того угодно.
По сути информация не теряется, но зато теряется информация о том
как она расположена на диске, т.е. теряется FAT (File Allocation
Table) - таблица расположения файлов, которую восстановить в принцепе
не возможно, по этому можно считать, что теряется вся информация.
Отправил: BELTSY Эксперт отправил ответов (всего): 3
Экспертная группа: Пользовательская работа c DOS
Вопрос
Написал такую программу, которая удаляет заданный каталог (D:\Winrar\temp), так вот, каталог она удаляет, после этого вылезает сообщение: "Программа выполнила некорретную операцию и будет завершена.... Перезагрузите компьютер...".
Почему это происходит?
Ответ
Программа прекрасная за исключением того, что она корректно не выходит. После выполнения твоего кода она начинает выполнять мусор, который за ним в памяти распологается. Для выхода из программы можно использовать int 20h, но лучше:
mov ah,4ah
int 21h
Отправил: Александр Эксперт отправил ответов (всего): 2
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос
Написал такую программу, которая удаляет заданный каталог (D:\Winrar\temp), так вот, каталог она удаляет, после этого вылезает сообщение: "Программа выполнила некорретную операцию и будет завершена.... Перезагрузите компьютер...".
Почему это происходит?
Ответ
это происходит потому что: 1. Либо используешь функцию не понятную для выня (т.е. очень старую, не поддерживающуюся). 2. Потому что нет завершения программы. это и есть в данном слкчае ошибкой. Закончить нужно либо с помощью Int 20h , ret , etc
Отправил: sasha Эксперт отправил ответов (всего): 5
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос
Здравствуйте, эксперты!
У меня к Вам вопрос по поводу динамического выделения памяти. При использовании ДОСовской функции 48h возникает ошибка 08h (недостаточно памяти). Хотя я пытаюсь выделить всего лишь один параграф.
Может я чего не так делаю?
Зарание спасибо!
Антон.
Ответ
Уважаемый Антон!
Прежде, чем отводить память функцией 48h, необходимо "урезать" память при помощи функции 4Ah.
Зачем? Дело в том, что сразу после загрузки программы (причем, любой), DOS отводит ВСЮ память этой программе. Поэтому нам сперва нужно использовать функцию 4Ah, чтобы "урезать" память до размеров программы, а затем только отводить блоки.
Подробней можно посмотреть как мы делаем в оболочке в рассылке по Ассемблеру (28 выпуск).
Прилагаю кусок кода, который урезает память до размеров загруженной программы.
Удачи!
Приложение:
Отправил: Олег Калашников (http://www.Kalashnikoff.ru - Рассылки по Ассемблеру и Законодательству)
Эксперт отправил ответов (всего): 14
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос
Написал такую программу, которая удаляет заданный каталог (D:\Winrar\temp), так вот, каталог она удаляет, после этого вылезает сообщение: "Программа выполнила некорретную операцию и будет завершена.... Перезагрузите компьютер...".
Почему это происходит?
Ответ
Уважаемый Евгений!
А где же вызов прерывания 20h для выхода в DOS? Или оператор ret?
Не забывайте, пожалуйста, об этом!
И еще. У Вас формат com-файла. Убедитесь также, что в итоге Вы получаете com-файл!
Приложение:
Отправил: Олег Калашников (http://www.Kalashnikoff.ru - Рассылки по Ассемблеру и Законодательству)
Эксперт отправил ответов (всего): 15
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос
Здравствуйте
У меня возник вопрос по отладчику програм.
Т.е я пользуюсь встроенным в MASM611 CV.exe
У него есть три раздела
в верхнем нет ничего
в средем программа
в нижнем
CV1053 Warning: TOOLS.INI not found
CV0101 Warning: no CodeViev information for 'C:\MASM611\BIN\prog.com
>
Подскажите для чего нужжны эти разделы?
Что за предуприждения?
При чём здесь TOOLS.INI ведь я запускаю мою PROG.COM на отладку?
Как нормально отладить программу?
Т.е при отлаке прог. из выпуска 6 строка убегает непонятно куда.
Спасибо
Ответ
Уважаемый Андрей!
Это окно, в котором отображается состояние отладчика CodeView после загрузки.
Честно говоря, я так и не понял, для чего нужен файл TOOLS.INI. Однако, если его вручную создать с нулевой длиной, то сообщение пропадает.
Сообщение "...no CodeViev information for..." означает, что не найдена информация для отладки. Необходимый файл создает MASM, если ассемблировать программу следующим образом:
ML.EXE prog.asm /AT /Zi
Но имейте в виду, что, по моим наблюдениям, этот файл необходим только для exe-файлов.
Отправил: Олег Калашников (http://www.Kalashnikoff.ru - Рассылки по Ассемблеру и Законодательству)
Эксперт отправил ответов (всего): 16
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос
Написал такую программу, которая удаляет заданный каталог (D:\Winrar\temp), так вот, каталог она удаляет, после этого вылезает сообщение: "Программа выполнила некорретную операцию и будет завершена.... Перезагрузите компьютер...".
Почему это происходит?
Ответ
Просто ты забыл вызвать функцию выхода из программы.
Смотри листинг.
Приложение:
Отправил: Dron (http://dronv.chat.ru/ - Хочу свою операционную систему!)
Эксперт отправил ответов (всего): 4
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
Вопрос
Здравствуйте, эксперты!
У меня к Вам вопрос по поводу динамического выделения памяти. При использовании ДОСовской функции 48h возникает ошибка 08h (недостаточно памяти). Хотя я пытаюсь выделить всего лишь один параграф.
Может я чего не так делаю?
Зарание спасибо!
Антон.
Ответ
Вся проблема в том что при запуске программы в досе ей отводится вся доступная память... при этом не важно какая это программа - exe или com. поэтому для выделения памяти необходимо сперва изменить размер памяти, занятой самой программой, тогда остальная память станет доступна для выделения.
При переопределении памяти в com программах надо помнить что указатель стека указывает на конец сегмента, то есть при старте com программа реально занимает 64кб памяти (блок выделенной для нее памяти значительно больше). Для экономии можно переместить указатель стека ближе к началу сегмента, и освободить память после него.
В exe программах нужно учитывать размер всех сегментов программы. и освобождать память после последнего сегмента.
Приложение:
Отправил: Dron (http://dronv.chat.ru/ - Хочу свою операционную систему!)
Эксперт отправил ответов (всего): 5
Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А.
Публичное размещение материала из рассылки, а также его использование
полностью или частично в коммерческих или иных подобных целях без письменного
согласия автора влечет ответственность за нарушение авторских прав.