Удивительное рядом

Тема в разделе "WASM.ASSEMBLER", создана пользователем Medstrax, 3 апр 2010.

  1. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Коллеги, трабла, с которой я столкнулся сегодня из разряда необъяснимых.
    Команда push fs(gs) согласно манов "If the source operand is the FS or GS and its size is less than the address size of the stack, the zero-extended value is pushed on the stack"
    Собственно пару недель назад так и было, я тогда как раз заинтересовался нюансами push/pop, поэтому и обратил внимание.
    Однако сегодня на моей машине это не работает. Теперь push fs(gs) апдейтит только младшее слово в стеке,старшее не изменятся(т.е. работает так же,как и push cs(ds,ss,es)). Не имеет значения в какой среде выполняется код - винда,реалмод, чистая протмода без ОС, unreal, ринг0/3 - везде такая же хрень. В общем как ни крути, проц стал выполнять команду push fs по другому, чем 2 недели назад. За полдня мне это просто разорвало мозг. В чудеса как бы верить не хочется. Из объяснений мне пришло на ум только два, оба фантастические
    1) Засбоил проц. Причем именно на этой команде. Других отклонений не наблюдалось. Не верится.
    2) В БИОСе прописался триппер, который при каждой загрузке апдейтит микрокод проца.Этот апдейт меняет логику команды. В это верится еще меньше.
    Других разумных и вероятных объяснений не вижу.
    ЗЫ.
    Пытаюсь щас исключить второй вариант, путем собственного апдейта микрокода на заведомо валидный. Однако нашел только файло для апдейта микрокода под линукс.
    Там какая-то мутная структура, понять под какой проц какой кусок я пока не могу.
    Подскажите плиз
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    medstrax1
    Ну не знаю... у меня тоже старшее слово не обнуляется независимо от сегментного регистра.
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Может это заразно... и передаётся интернетно-форумным путём?
     
  4. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Но блин, обнулялось же... И должно обнуляться - пустите код под варей или борщом, если манам не верите.
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    medstrax1
    Да верю я документации... А ещё верю в баги... Но больше всего верю, что сейчас может прийти кто-нибудь вроде leo и сказать, что в томе 3C на 666-й странице есть сноска, где мелким шрифтом написано, что с такой-то модели поведение push fs/gs изменилось.
    P.S. Проверил под VMWare... аналогично: старшее слово не обнуляется. С чего бы Bochs верить больше, чем документации, не понимаю.
    P.P.S. Процессор — Intel Core 2 Duo P7350.
     
  6. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Да, похоже ситуация усугубляется. На моем П4 варя старшее слово обнуляет.
    ЗЫ. Даже если на какой то странице талмуда появится некая сноска, мой проц об этом не знает. Но раньше обнулял, а теперь не хочет. Поправки на галлюцинации и прочие измененные состояния сознания не принимаются ))))
    ЗЗЫ.
    Какая варя стоит? У меня 7.0.1 build-227600
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    medstrax1
    VMWare Player 2.5.3 build-185404.
     
  8. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    В общем понятно, что дело не в варе. Прошу кому не лень протестите плиз код
    push ds
    pop gs
    mov [esp-4],12345678h
    push gs
    pop eax
    shr eax,16
    cmp ax,1234h
    jnz No_Error ; т.е. согласно манам
    ;здесь значит косяк
     
  9. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Мы в legacy\compatibility на P4 и Core2 встречали лишь отсутствие изменения верхней половины. При этом в подрежиме x64 верняя половина стабильно обнулялась (точнее, обнулялись верхние 3/4). Вот здесь было немного насчёт этого – и ошибки необнуления кажутся незначительными на фоне вывода о сохранении по "push xs" части дескрипторного кеша.
     
  10. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Насколько я понял, вывод о сохранении на стеке части кэша дескриптора как минимум в отдельных случаях ошибочен. Мне воспроизвести не удалось. Собственно речь не об этом.
    Почему у меня щас проц работает иначе, чем две недели назад!? - вот что убивает.
    Я впервые за многие годы сталкиваюсь с тем, чего не понимаю напрочь. Блин аж материться хочеццо. Ну не хочется верить в каких-то суперхакеров, которые взломали интеловскую прошивку микрокода и сейчас налаживают ботнет....
     
  11. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Сохранение сегментных регистров в стек действительно идет без обнуления старшего WORD-а и варь тут непричем.
     
  12. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Sol_Ksacap
    Это вы про что?
    Using the PUSH CS, PUSH DS, PUSH ES, or PUSH SS instructions in 64-bit mode generates an invalid-opcode exception.
     
  13. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    при выделении нового места в том числе и в стеке, это место при выделении обнуляется. а при переюзывании этого не делается. может в этом все дело?
     
  14. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Дык кто бы спорил, но сохранение fs и gs _шло_ с обнулением. Я глазам верю. И талмуды здесь не думаю что врут на 100%, скорей всего какие то нюансы просто обошли стороной
     
  15. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Нет, пару недель назад проверял и эту возм-ть. В любом случае шло обнуление старших 16 бит. Сейчас я это обнуление не могу воспроизвести ну вообще никак. Это называется пи.ц,
    руки опускаются.
     
  16. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    сорец на котором наблюдалось обнуление
     
  17. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    см. выше
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    medstrax1
    Так CrystalIC же написал, что на P4 HT поведение инструкции нестабильно. Как раз может быть Ваш случай.
     
  19. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Кристалег бывает прав, но не думаю что в этом случае. Нестабильное поведение любой из инструкций общего назначения в интеловских процах давно бы вызвало немало шума.
    И на продажах интела тоже бы отразилось неслабо. Этого нет. Вывод - фича не в команде.
    ЗЫ.
    Рыл на интеловском комьюнити тоже ноль эмоций
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    medstrax1
    Да ладно... Там дамп приведен. Попушить немного fs на стек — не та задача, с которой кто-либо мог бы справиться как-то не так (с учётом того, что он подтверждает, что изначально в стеке нули). Может там и не дескрипторный кэш, но явно видно, что поведение нестабильно.
    А шум... да с чего бы его поднимать? Инструкция используется нечасто. А когда используется, то всех почти всегда интересует только младшее слово.