Переполнение линейного адреса

Тема в разделе "WASM.ASSEMBLER", создана пользователем sergh, 28 ноя 2005.

  1. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    Привет!



    Переполнение линейного адреса происходит при обращении к памяти, если база сегмента + смещение получается больше 4GB. Можно устроить такое либо в защищённом режиме, либо в реальном, сохранив сегментный регистр из защищённого.



    Что происходит по факту:

    - в реальном - перезагрузка

    - в защищённом - никаких проблем. Наверное, даже работает, т.е. действительно читает/записывает.



    Вопрос, почему такая разница, и что при этом должно происходить с точки зрения теории.
     
  2. Wolfgang

    Wolfgang New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    82
    Адрес:
    Russia
    в теории 4-байтовое значение не может превысить 4-гигбайтный диапазон. То есть все, что левее 32-х битов, порсто отбрасывается
     
  3. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    sergh

    Мне не удавалось задать базу в 4Гб для реального режима. В принципе можно сделать лимит в 4Гб, и попробывать прочитать 0FFFFh:0FFFFFFFF, по идее адрес должен свернуться, и получится обращение к ячейке памяти 0FFFF:0 - 1, или линейный = 0xFFFEF.