Адреса памяти в реальном режиме

Тема в разделе "WASM.BEGINNERS", создана пользователем Treant, 9 окт 2009.

  1. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Я никак не могу найти вот что:
    Везде говорится, что два логических адреса могут соответствовать одному физическому, но нигде не упоминается нужно ли следить за этим самому или же процессор все разрулит
    Просто неудобно же очень так, если надо самому учитывать:
    Например чтобы установить стек на определенный сегмент нужно проверять не сойдется ли он с кодом или данными и не попортит ли что там
    Расскажите пожалуйста кто знает
     
  2. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Вот только что проверил
    Мои опасения подтвердились..((
    Вопрос снят.
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    В x86 такое не запроектировано. Были проекты процессоров и реальные процы, где это было заложено.
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Treant
    а как вы иначе получите доступ к памяти другого процесса? это оси решать. в зависимости от надобностей. любая расшареная память использует это
     
  5. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Очевидно, человек недоумевает и пугается, что адреса 0100: 0000 и 0000: 1000 указывают на одну и ту же ячейку. Очевидно, что если с адреса 0:1000 расположен код, а стек установить на 0100:0100, то конечно, попортит.
    Однако, реально такое самовольство делают только в com-файлах, радуясь полной свободе. И при этом прекрасно знают, ГДЕ их код и данные, чтобы их не перекрыть стеком. А создавая экзешник, размер стека указывается, и ОС (даже такая, как MS-DOS), при загрузке этой программы, занесет в SS: SP такие значения, чтобы а) стек был нужного размера, б) чтобы он не перекрывался с кодом и данными, если программист не указал это специально. Проще говоря, при запуске программы стек уже создан. Если ты для каких-то целей меняешь его расположение - ты должен понимать, что ты делаешь.
    Или ты собрался писать программу, в которой сегментные регистры то и дело увеличиваются-уменьшаются на некоторое число, и волнуешься, что в результате что-то затрешь в своем же коде? ОБЯЗАТЕЛЬНО затрешь! :)))) (почему? потому что ты задал этот вопрос)