Вопрос по дескрипторы описывающие STACK

Тема в разделе "WASM.OS.DEVEL", создана пользователем creater, 1 май 2007.

  1. creater

    creater New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    16
    1.Когда задан сегмент данных растущий вниз возник вопрос, если допустим база = 200000h, лимит=0FFFFFh, B=1, то как я понял допустимые линейные адреса лежат в диапазоне от база+лимит=2FFFFFh до 0FFFFFFFFh(B=1), и размер данного сегмента получается равен 0FFFFFFFFh-2FFFFFh. Тогда вообще зачем используется поле лимит? Короче кто-нибудь может описать данный вопрос на пальцах.

    2.Также В IA-32 Intel® Architecture Software Developer’s
    Manual Volume 3: System Programming Guide написаны:
    • Stack segment (data segment pointed to by the SS register). The flag is called the B (big) flag and it specifies the size of the stack pointer used for implicit stack operations (such as pushes, pops, and calls). If the flag is set, a 32-bit stack pointer is used, which is stored in the 32-bit ESP register; if the flag is clear, a 16-bit stack pointer is used, which is stored in the 16-bit SP register. If the stack segment is set up to be an expand-down data segment (described in the next paragraph), the B flag also specifies the upper bound of the stack segment.

    • Expand-down data segment. The flag is called the B flag and it specifies the upper bound of the segment. If the flag is set, the upper bound is FFFFFFFFH (4 GBytes); if the flag is clear, the upper bound is FFFFH (64 KBytes).

    Короче как я понял если в SS загружен селектор на дескриптор описывающий стек , и если B=1 для команд неявно оперирующими стеком используется ESP, иначе SP. Отсюда вопрос если дескриптор кода описывает 16 битный сегмент, а в дескрипторе сегмента стека установле бит В=1, то каким регистром будет оперировать процессор SP или ESP?
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    все зависит от текущей разрядности сегмента кода
    если он 32-ух разрядный и инструкция без префикса (0x66) => ESP
    если он 32-ух разрядный и инструкция с префиксом (0x66) => SP
    если он 16-ти разрядный и инструкция без префикса (0x66) => SP
    если он 16-ти разрядный и инструкция с префиксом (0x66) => ES
    ты же сам ответил: определяет допустимый интервал для SP/ESP