Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 009

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-05-30


Новости

Теперь в выпуске присутствует 8 вопросов/ответов.

Я в рейтинге (кол-во набранных баллов) не участвую. Но т.к. я отправляю ответы, то программа автоматически начисляет мне баллы, которые я время от времени аннулирую. Потом исправлю это дело...

Вопрос

Расскажите пожалуйста каким образом разбить жесткий диск на логические. И сохранится ли при этом информация на нём?

Ответ

У каждой операционной системы (или почти у каждой) есть своя
программа, называемая fdisk, которая занимается тем, что разбивает
жесткий диск на логические и создает файловую систему, которую
использует данная операционная система. Также и в DOSе (Windowsе) есть программа fdisk.exe, которая разбивает диск под FAT16/32.
Чтобы разбить диск, запускаете fdisk.exe и используя первый пункт
меню разбиваете диск как Вам того угодно.
По сути информация не теряется, но зато теряется информация о том
как она расположена на диске, т.е. теряется FAT (File Allocation
Table) - таблица расположения файлов, которую восстановить в принцепе
не возможно, по этому можно считать, что теряется вся информация.

С наилучшеми пожеланиями,

Андрей Беженарь aka BELTSY
RTFM_Helpers Moderator http://hi-tech.nsys.by


Отправил: 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

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Задать вопрос экспертам

Регистрация в качестве эксперта


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.

List Banner Exchange lite
Реклама на сайте Kalashnikoff.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Relayed by Corbina
Рейтингуется SpyLog

В избранное