реклама на сайте
подробности

 
 
> Резидент под DOS, Сегменты данных, модульность
InvisibleFed
сообщение Jan 28 2007, 12:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Программеры старой школы, нужна ваша помощь. При написании TSR программы под DOS встал вопрос. Известно, что прерывания INT27 и INT31 могут оставить нужную часть кода программы резидентной (не выгруженной). Правильно ли я понимаю, что если в программе используются некоторые данные (переменная, буфер), они могут быть объявлены только в этом-же сегменте кода? Их нельзя объявить в сегменте данных. А если можно, то как?
Вопрос 2. Я пишу код по модулям в трех *.asm файлах (исходя из функционального назначения процедур и макросов). В отдельном *.ASM файле - точка входа main proc. Как сегмент кода собирает линковщик? В какой последовательности. Ведь, чтобы программа стала TSR мне нужно оставить ЧАСТЬ ее кода по вполне конкретному смещению, а следовательно нужно знать какие процедуры лежат "выше" в сегменте кода, а какие "ниже".
Понимаю, что это уже анархизм и возможно, я не совсем понятно изложил, но может кто помнит детство. smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
InvisibleFed
сообщение Jan 29 2007, 13:27
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Цитата
Почему это нельзя? Линкер слинкует все в один "кусок" указываете размер всего вместе и оставляете в памяти.


И что это будет за сегмент такой? Сегмент0 = Сегмент_даных+Сегмент_кода? Не мог бы разъяснить?

Цитата
По умолчанию - в порядке перечисления линкеру объектных файлов.


Понял, спасибо. smile.gif

Цитата
Главные проблемы у вас будут не в том, как оставить образ TSR в памяти, а ... очень коротко:
- не затирать и не освобождать область PSP (по крайней мере еёначальную часть, не помню точно, 16? 32? байт связи с системой ... в оставшуюся часть можете переместить свой TSR код);
- при динамической активации вашего TSR позже: а). сохранять PSP задачи, которую прерывает ваш TSR + б). восстанавливать исходный PSP своего TSR + в). после отработки TSR восстанавливать сохранённый PSP прерванной задачи.


О мой мозг!!! Пока даже спрашивать не хочу. ohmy.gif Хотя принцип уловил.

Цитата
Фроловых книжка, которую упоминали - лучшее что написано, пожалуй, на русском языке ... но и она "галлопом по европам" и только по поверхности.


Согласен.

Цитата
Была такая книжка (оригинальная англоязычная) "MS-DOS Bible", стр. >1000 - поскольку она теперь никому не нужна, то должна быть залежалая у кого-то или в библиотеке.


Спасибо за наводку. А на русском ее не было? (всяко приятней читать)
Go to the top of the page
 
+Quote Post
Olej
сообщение Jan 29 2007, 14:59
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата
О мой мозг!!! Пока даже спрашивать не хочу. ohmy.gif Хотя принцип уловил.


Да ничего там "военного" нет...
Кроме того - вам очень повезло: тот исходник, который сохранился у zltigo и который он приложил:
Цитата
Присоединённые файлы
ALARM.rar ( 3.8кб ) Кол-во скачиваний: 2

Там:
1. резидент копирует критические поля PSP в своё тело (главное - это вектор завершения)...
2. ... перемещает себя в к началу PSP...
3. ... осекает весь "хвост" и остаётся TSR;
Возьмите текстуально за основу + докраивайте свою функциональность.
P.S. но я бы не стал делать п.1 (это весьма условная экономия), а смещал бы свой код к смешению 20h от начала PSP.

Цитата
Спасибо за наводку. А на русском ее не было? (всяко приятней читать)

Никогда не слышал о её переводе - ищите оригинал (тем более он никому не нужен ; - не жалко))... (хотя стоимость этого оргинала, когда мне его привезли, была >$100).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 29 2007, 15:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Olej @ Jan 29 2007, 13:59) *
P.S. но я бы не стал делать п.1 (это весьма условная экономия), а смещал бы свой код к смешению 20h от начала PSP.

Да это просто был экзерсис smile.gif - не думаю, что вообще PSP трогать надо - путь живет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 16:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016