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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU
(Тестовый режим)

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 43
от 24.01.2005, 01:20

Администратор:Калашников О.А. (adm@rusfaq.ru)
В номере:Вопросов: 1, Ответов: 6


Вопрос № 16067
Здрасти!
Я тут начал изучать этот язык ассемблир.
миня вот что интересует.
пишу прогу для доса в формати COM.
память значет выделяю, аон мне пишит - памяти нету.
чё эта?
памяти аж 600 Кб
шо делать-то?
Отправлен: 19.01.2005, 01:19
Вопрос задал: Метос (статус: Читатель)
Всего ответов отправлено: 6

Отвечает: Стас
Здравствуйте, Метос!
Если я правильно понял, что ты хотел спросить:
При запуске в DOS любой программе выделяется вся доступная память, при выходе (ret, Int20, ah=4ch int21...) эта память высвобождается.
Если ты в своей проге хочешь выделять память через ah=48h int 21h, то сначала измени размер выделенной твоей проге памяти через ah=4ah int 21h (es=cs), а затем выделяй память (не забудь освобождать её).
Ответ отправил: Стас (статус: Студент)
Отправлен: 19.01.2005, 02:53

Отвечает: andre
Здравствуйте, Метос!
протгу бы прислал там бы и порешили что почем и в какой системе ты ее запускаешь
Ответ отправил: andre (статус: Практикант)
Отправлен: 19.01.2005, 11:16

Отвечает: Tigran K. Kalaidjian
Здравствуйте, Метос!
Проги в формате СОМ могут использовать лишь один сегмент, т.е. не более 64Кб, на все.
А Вы пришлите программу, а то непонятно, может проблема кроется вовсе не в использовании ресурсов.
Ответ отправил: Tigran K. Kalaidjian (статус: Профессионал)
Отправлен: 19.01.2005, 13:17

Отвечает: Ayl
Здравствуйте, Метос!
Для COM-программ DOS автоматически отдает всю имеющуюся на момент запуска программы память этой программе. Соответственно, ты либо можешь ее непосредственно использовать без обращения к функциям DOS для выделения памяти, либо сначала освободить ненужную память и потом запрашивать ее по мере необходимости.
Если будешь освобождать, то либо оставляй весь сегмент (64К) под программу, либо переопредели стек (т.к. при старте программы стек устанавливается на конец сегмента (SS = CS, SP = FFFE).
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 19.01.2005, 13:57

Отвечает: Undertaker
Здравствуйте, Метос!
Вашей COM-программе ДОС выделяет всю свободную память.
Воспользуйтесь функцией 4Ah (Modify Allocated Memory Block) INT 21h.
На входе:
AH, 4Ah (SetBlock)
BX, размер блока (в параграфах)
ES, сегмент блока (MCB + 1 para)
На выходе:
AX - код ошибки
BX - макс. возможный размер блока (CF=1, AX=8)
Ответ отправил: Undertaker (статус: 3-ий класс)
Отправлен: 19.01.2005, 17:08

Отвечает: AxMAD
Здравствуйте, Метос!
Во-первых как вы выделяете память???
Во-вторых формат COM - 64kb!!!
Читайте документацию по распределению памяти PC
!!!!!!!!!!!!!!!!!!!!!!!
Ответ отправил: AxMAD (статус: 5-ый класс)
Отправлен: 20.01.2005, 18:20


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Россия, Москва. Идея, дизайн, программирование: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное