Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > оперативная память


Автор: iff 25.11.2009, 22:42
Как узнать какой минимальный объём оператианой памяти нужен для выполнения программы под DOS?
Если я включаю её из виндовс, то она бирёт порядка 800 КБ (смотрел так: нажимал контр-альт-дел и в процессах искал NTVDM.exe на против этого процесса была цифра 800КБ), но ведь виндовс запускает программы под дос через симулятор (NTVDM) и скорее всего он как раз и потребляет больше всего памяти. А как узнать сколько минимум должно быть ОЗУ, если запускать непосредственно из-под DOS?

Для справки:
Программа о которой идёт речь имеет тип .COM, написана для TASM 4.1, и вот фрагмент ее кода:
Код

.model tiny
.code
assume cs:@code, ds:@code, ss:@code, es:@code
org 100h
start:
; Основная часть программы
end start


Может быть при вызове из операционной системы DOS программе будет требоваться 256 байт? (шест. 100h)

Автор: 111u3 26.11.2009, 09:28
слушай iff без обид, ты себе подпись про себя писал?
и ответ на вопрос - сколько программа требует, столько и нужно + память на саму дос. 
А org 100h это так 256 байт на стек выделяют smile 

Автор: airyashov 26.11.2009, 10:09
Цитата(iff @ 25.11.2009,  22:42)
Как узнать какой минимальный объём оператианой памяти нужен для выполнения программы под DOS?
Если я включаю её из виндовс, то она бирёт порядка 800 КБ (смотрел так: нажимал контр-альт-дел и в процессах искал NTVDM.exe на против этого процесса была цифра 800КБ), но ведь виндовс запускает программы под дос через симулятор (NTVDM) и скорее всего он как раз и потребляет больше всего памяти. А как узнать сколько минимум должно быть ОЗУ, если запускать непосредственно из-под DOS?

Для справки:
Программа о которой идёт речь имеет тип .COM, написана для TASM 4.1, и вот фрагмент ее кода:
Код

.model tiny
.code
assume cs:@code, ds:@code, ss:@code, es:@code
org 100h
start:
; Основная часть программы
end start


Может быть при вызове из операционной системы DOS программе будет требоваться 256 байт? (шест. 100h)

если не отрезать память, то твоя программа займет 64Кб

Добавлено через 41 секунду
Цитата(111u3 @  26.11.2009,  09:28 Найти цитируемый пост)
А org 100h это так 256 байт на стек выделяют smile
 не под стек под PSP (префикс)

Автор: 111u3 26.11.2009, 19:11
airyashovконечно про стек я ляпнул но, во первых psp в com небыло и нету - он только в exe присутствует. А 100h это последствие костыляндии - так как адресация начинается с конца psp то и вынуждены писать эту конструкцию. Во вторых с какого перепуга программа должна занимать 64 кб памяти . она будет занимать ровно её объем + 100h на сервис(мож быть чуть больше). 64 кб это ограничение объема сегмента выше которого com программа не может себе позволить иметь объем(но определенными действиями это можно преодолеть)

Автор: airyashov 26.11.2009, 23:12
как это psp нету?
по умолчанию указатель стека установится в конец сегмента.

Автор: 111u3 27.11.2009, 09:20
airyashov, так это нету я лично ковырял hex- редактором com и exe, да и по спецификации ms там написанно : так как в com программах отсутсвует psp то необходимо вслед за определением секции указывать org 100h. это префикс нужен только exe там сервисные данные по секциям и т.п.(на сколько я помню) стек же может ставится на конец сегмента(как вы указали), либо если не хватает места то в конец озу(случай когда код и данные занимают весь сегмент)

Автор: airyashov 27.11.2009, 10:03
если он не нужен com программе, то куда должна помещаться строка параметров задаваемая при запуске?

Автор: 111u3 28.11.2009, 09:56
airyashov, вы немного путаете понятия, если судить по вашей логике то: а) почему тогда в exe нету org 100h и б) эта область не модифицируется ни ос ни самим процессом(по крайней мере если это стандартные действия)

Автор: piritus 28.11.2009, 11:13
а) в exe есть org 100h. в PE нету org 100h.
б) по адресу 80h в psp (не уверен, что этот адрес) пишутся параметры запуска приложения.

Автор: 111u3 28.11.2009, 13:20
piritus, a)в exe этого смещения точно нету там механизм загрузки следующий если dos обнаруживает сигнатуру exe то грузит по определенному смещению от начала озу(непомню по какому), а если не обнаруживает то грузит по смещению + 100h. вот собственно и все.
б) параметры передаются отдельно и не в коем случае не пишутся в загруженный код.
+ нашел более подробное объяснение 
Во время загрузки программы в память к ней добавляется префикс программного сегмента (PSP — program segment prefix) размером 256 байт. Сама программа загружается вслед за этим префиксом(в случае exe).Информация из префикса может быть использована для выделения символов из командной строки, определения объема доступной памяти, информации об окружении и т. д.  
И еще раз повторю в самом файле ничего подобного нету и он не вкоем случае не модифицируется.

Автор: Logree 29.11.2009, 00:29
111u3 "Ассемблер в задачах защиты информации" стр. 39-40.  Вопросы?

Автор: 111u3 29.11.2009, 09:42
Logree, не понял правда к чему это. Не смотря что к таким книжкам у меня отношение такое же как и к "творениям" Фленова все же прочитал и там где вы указали тоже. Из-за путаницы в терминологии многие назвывают psp и то что находится в составе exe и ту информацию которую дос присоединяет к загружаемому файлу. + авторы указываемой вами книги напрочь забыли об остальных частях exe типа mz. И еще чтобы не было обидно потом я никогда не говорил что претендую на местно справочника по ассемберу, у меня для этого мало знаний по теории(т.е. чтения тех глупых книжек которыми весь интернет пестрит и заучивания занудных определений от которых толку ноль в квадрате), большинство знаний получено на практике и т.д. и если я никогда это не испытывал то я это не буду советовать.

Автор: airyashov 30.11.2009, 08:36
Цитата(111u3 @ 28.11.2009,  13:20)
piritus, a)в exe этого смещения точно нету там механизм загрузки следующий если dos обнаруживает сигнатуру exe то грузит по определенному смещению от начала озу(непомню по какому), а если не обнаруживает то грузит по смещению + 100h. вот собственно и все.
б) параметры передаются отдельно и не в коем случае не пишутся в загруженный код.
+ нашел более подробное объяснение 
Во время загрузки программы в память к ней добавляется префикс программного сегмента (PSP — program segment prefix) размером 256 байт. Сама программа загружается вслед за этим префиксом(в случае exe).Информация из префикса может быть использована для выделения символов из командной строки, определения объема доступной памяти, информации об окружении и т. д.  
И еще раз повторю в самом файле ничего подобного нету и он не вкоем случае не модифицируется.

psp для dos программы существует всегда, загрузка программы это отдельный разговор.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)