Стек в com-файле

Тема в разделе "WASM.ASSEMBLER", создана пользователем kwout, 26 янв 2011.

  1. kwout

    kwout New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2011
    Сообщения:
    4
    Здравствуйте. Подскажите, пожалуйста.
    Мне необходимо узнать структуру памяти, занимаемую модулем .COM в ОП.
    Сложность возникла со стеком. Его начало располагается в SP по адресу FFFE.
    А где его дно и почему? Этот момент поподробней, пожалуйста.
    Я так понимаю, что стек растет от большего адреса к меньшему. Вот до какой степени он может расти? Я подумал, что дно находится по адресу 0000, но это оказалось не верно. Будет ли он залезать в префикс сегмента команд (PSP)?
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Стек растет от больших адресов в меньшие. То есть от FFFE и к 0000, для .com'ов. Расти он будет до предела сегмента, то есть до 0000. И если ты переместишь код в другой сегмент, и будешь что-то убирать и убирать в стек, то конечно же он залезет и в PSP. Как правило, если нужен такой стек, в 64К, то перемещают стек, а не код - благо это проще. Когда sp=0000, и происходит попытка что-то еще туда записать, в зависимости от загруженных (или не загруженных) himem.sys - emm386 или других менеджеров расширенной памяти, или загруженных пользователем таблиц дескрипторов, будет либо ошибка с аварийным завершением программы или DOS целиком, либо ошибка, которая никем не обработается (потому что по умолчанию обработчик указывает на заглушку, кажется), и sp=FFFE, и пойдет затирание старого стека в том же сегменте. Но вообще поведение программы и ОС в данном случае непредсказуемо, и может зависеть не только от менеджеров памяти, но и от производителя и версии BIOS. Для реального 16-битного режима стек не может быть больше чем 64К в принципе.
     
  3. kwout

    kwout New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2011
    Сообщения:
    4
    Спасибо, очень помогли.
     
  4. kwout

    kwout New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2011
    Сообщения:
    4
    Возник ещё один вопрос, касающийся PSP.
    В формате PSP указано, что по смещению 2С указывается сегментный адрес среды, передаваемой программе. Мне надо подробно узнать про среду: когда она создается: перед запуском приложения или в другое время; откуда берётся информация, записываемая в среду; среда передается только моему приложению или всем запущенным. Подскажите, пожалуйста, где можно про среду почитать (на русском)? Не могу найти, т.к. слово среда очень многозначное, и я слабо себе представляю что такое среда.
     
  5. ConstZ

    ConstZ New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2008
    Сообщения:
    42
    Ещё environment переводят как окружение, подразумевая переменные окружения (среды) на момент запуска программы.
     
  6. kwout

    kwout New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2011
    Сообщения:
    4
    О, то что надо. Спасибо за К. Г. Финогенова, в его книжке "Самоучитель по системным функциям MS-DOS" это разбирается в восьмой главе.