Здрасти!
Я тут начал изучать этот язык ассемблир.
миня вот что интересует.
пишу прогу для доса в формати 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