1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Как сбросить ОЗУ?

Тема в разделе "WASM.BEGINNERS", создана пользователем petrstarikov, 15 окт 2011.

  1. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    petrstarikov
    При старте или сбросе IDT начинается с нулевых адресов всегда
     
  2. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Да. Но если процессор выполняет уже закэшированный код и у него нет необходимости обращаться к данным или командам за пределами кэшированных адресов, то кэш-промахов не будет.
     
  3. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    А кто запретил менять адрес IDT?
     
  4. Nafanya

    Nafanya New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    570
    petrstarikov
    Как же это из кэша выполняться будет(int 0x13), если Вы код обработчиков прерываний стёрли - память то очищена?
    И как Вы сейчас без прерываний BIOS подгрузите сохранённый образ памяти с жёсткого диска?
     
  5. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Обработчики BIOS, хранятся в ПЗУ и очистка ОЗУ на них не повлияет. И вызвать их можно не через int13, а напрямую, прочитав перед сбросом ОЗУ вектор прерывания
     
  6. Nafanya

    Nafanya New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    570
    petrstarikov
    Или вы хотите, чтобы таблица векторов прерываний и код всех обработчиков тоже закэшировался?:)
     
  7. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Я ответил выше, читайе внимательней.
     
  8. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    ВСЕ обработчики прерываний находтся в 1мб оперативной памяти и не где иначе. реальный режим просто больше не адресует. Ты разве этого не знаешь? В чипе биос они тоже хранятся, но осуществить к нему доступ является большой проблемой, так как чип отображается на память под 4 гб (и это не всегда). так надо будет в самом биос найти адрес где они лежат. А это вопрос распаковки модулей и их дизассемблирования.
     
  9. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Ну что ж, проверь. Попробуй в реальном режиме записать байт по адресам F0000-Fxxxxx.
    Если следовать твоей логике, то эти адреса находятся в ОЗУ и запись не вызовет проблем.
     
  10. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Это закрытый диапазон адресов, что бы в него записать, надо изменить регистры MTRR северного моста. А биос отображен говорб еще раз на 4гб- зазмер чипа - 4 гб. Я так в Eseg писал.
     
  11. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Не утомляйте меня, систематизируйте свои знания. У северного моста нет MTRR регистров, они у процессора.
    Хотя могу и по существу. Как Вы думаете, как процессор считывает первые байты BIOS после сброса? Вы ведь не забыли, что после сброса процессор находится в реальном режиме
    с адресацией только первого мегабайта? И Вы ведь не забыли, что BIOS находится чуть ниже
    4 ГБ? Решение, как Вы возможно знаете, очевидное. И никто его не мешает воспроизвести для сброса ОЗУ и последующего вызова прерываний BIOS'а.
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    acckiitvar
    Не оперативной памяти, а адресного пространства, на верхние 64КБ которого как раз и отмаплен BIOS ROM.
    petrstarikov
    :-) Это такая шутка, или Вы действительно считаете, что здесь есть чем гордиться? Кстати, по секрету скажу, что область знаний, требуемых на олимпиадах, начиная от школьных и закачивая международными, ориентирована по большей части на алгоритмические задачи и имеет ну ооочень посредственное отношение к архитектуре ПК. Так что попытка выпендриться не засчитана. :-)
    Ну во-первых, далеко ещё не все процессоры (которые ещё можно назвать современными) интегрированы с ним. А во-вторых, что по Вашему с точки зрения программного интерфейса изменилось с того, что контроллер памяти на одном чипе с процессором?

    А вообще встречный вопрос. Зачем обнулять RAM?
     
  13. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Интерес был академический. Возможно, что и практический смысл имеется. Может быть чтобы гарантированно избавиться от любых перехватов. Хотя вряд ли, глупо
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    petrstarikov
    В чисто академических целях можно попробовать с помощью DMA занулить. Но. Пусть код обработчиков и в ROM, но Вы ведь помните, что в RAM хранится и BIOS Data Area, а также EBDA, которые инициализируются стартовым кодом и требуются обработчикам? Наиболее вероятно, что int 0x13 с занулёнными инициализированными данными ни к чему хорошему не приведёт.
     
  15. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Ну перепутал где они находятся, слишком редо нужны. Вопрос отображения и переноса описан в Салихане, они туда сначала отображаются, а потом убираются. А вообще сколько занимает биос? я видел по 4 метра, и они как то в 1 метр не влезают, не думаешь? а если еще дос поставить работающий в реальном режиме, то совсем мистика получается
     
  16. acckiitvar

    acckiitvar Member

    Публикаций:
    0
    Регистрация:
    26 сен 2011
    Сообщения:
    71
    Да, ты прав
     
  17. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Согласен, работа при зануленной BDA требует проверки. Насчет DMA возможно вариант, буду смотреть, хотя кажется это чрезмерно долго. Так как операции типа "память-память" DMA не поддерживает, надо внешний источник данных.
     
  18. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    Кэш все равно узнает о том, что произошли изменения ОЗУ, поскольку DMA будет работать через общую шину, она кэшу и просигнализирует о том, что информация в нем стала инвалидной. Соответственно, следущее же обращение к станет кэш-промахом.

    Вот такой вопрос - современная память (DDR2, DDR3), она до сих пор делается по той же самой технологии, требующей рефреша? Если да и если возможен программный доступ к контроллеру рефреша ОЗУ, то можно попробовать перепрограммировать его так, чтоб ОЗУ осталось без нормального рефреша.
     
  19. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Dmitry_Milk
    DDR2, DDR3 являются DRAM им требуется регенерация
     
  20. petrstarikov

    petrstarikov New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2011
    Сообщения:
    69
    Про рефреш я думал, пока не разобрался окончательно. У современных модулей есть режим
    self refresh, как он управляется мне непонятно.