Где искать heap в DOS?

Тема в разделе "WASM.BEGINNERS", создана пользователем dlz1000, 10 авг 2006.

  1. dlz1000

    dlz1000 New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    16
    Привет в фасме есть директива heap.
    А где heap расположен?
    Я в паскалевском исходнике RTL нашёл следующее:
    Код (Text):
    1. mov ax,sp
    2. shr  ax,4
    3. mov dx,ss
    4. add  ax,dx ;Я так понял сегмент начала памяти.
    5. .....
    6. ;Дальше es - PSP.
    7. mov  ax,[es:2] ;Конец памяти.
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    в досе (чистом) можно писать куда хочешь. для порядка память разбивается на последовательные блоки: в начале блока там какая-то информация о нем, типа свободен/занят, и указатель на следующий блок. есть функции доса для выделения/освобождения блоков и изменения размера. это и есть по-сути неар в досе: запрашиваешь себе блок и пользуешься им как считаешь нужным. в хлл типа паскаля встроены функции которые блюдут эту память при выделении и освобождении массивов, перменных и тп (не тех, которые в стеке), ну, а в асме - все бразды в твоих руках :)
     
  3. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    это в заголовке мз - когда программа загружается, то ей при этом выделяется блок памяти, который на неар параграфов (16 байт) больше загруженной части. но я честно не знаю, как на нее указатель получить. может, метку в самом конце поставить (?)
     
  4. dlz1000

    dlz1000 New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    16
    Попробовать забить этот участок всяким хламом. Зависнет не зависнет.
    Но ведь раз на раз может не приходиться.
     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    это не метод. в книжке встречал рекомандацию в конце вставить фиктивный сегмент (начинающийся на Z :) ) - это и будет типа хип. в случае фасма это как раз и есть метка в конце программы. главное, со стеком не перемешать :) нужно попробовать написать простую прогу и в отладчике посмотреть - куда показывают указатели.
     
  6. dlz1000

    dlz1000 New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    16
    Вообщем забивал нулями кучу сегментов подряд, ни под виндой, ни в чистом досе, ни под Turbo Debuggerом ничего плохого не случилось.
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    УПС...
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Если забивал от области программы вверх до "почти" A000, то там free memory.
    Если другое, то обратись к ДОС-овым функциям работы с памятью - они тебе скажут что случилось.
    Или mem.exe вызови :)