Оперативная память


Определение размера задачи



Определение размера задачи

Будем предполагать, что стековый сегмент расположен в теле задачи последним. В таком случае нас интересует расстояние от начала PSP до конца стекового сегмента, выраженное в параграфах. Напомним, что код сегмента, содержащего PSP, находится в регистре es, код стекового сегмента — в ss, а если стек еще не использовался, то его размер в байтах содержится в регистре sp.

Размер тела задачи, выраженный в параграфах, вычисляется так:
tasksize = [ss] - [es] + [sp] /16

В этой формуле квадратные скобки указывают на то, что при вычислении используется содержимое регистров ss, es и sp. При. программировании деление [sp] на 16 заменяется сдвигом на 4 разряда вправо. Для того чтобы не потерять один параграф, размер стека должен быть кратен 16-ти, в противном случае его надо округлить в сторону увеличения.

Зная реальный размер задачи, можно запросить у DOS сокращение ее блока. В результате появится свободное пространство памяти, которое можно использовать по запросам задачи.



Содержание раздела