Значение в сегментном регистре

Тема в разделе "WASM.BEGINNERS", создана пользователем Charodey, 13 мар 2006.

  1. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    push cs

    pop eax

    Что появляется в старшем слове eax?
     
  2. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    можно push ds:lol: WORD ptr[eax]

    а push cs не прокатит по моему.
     
  3. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    В смысле не прокатит????

    А опкод 0Е не о чем не говорит?, да и вопрос не про то.

    Сегмент не имеет значение, что в старшем слове?
     
  4. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Все нормально работает, у меня в eax значение 1b. Вот думаю с чего бы это..
     
  5. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    Я и так знаю, что работает. Я терпеливый, повторб еще раз что в старшем слове? И еще вопрос, если значение cs=1Вh, то получается RPL=11b, логично для 3 кольца, но почему TI=0?

    По документации это означает использование GDT, но почему тогда индекс имеет такое маленькое значени?
     
  6. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    помоему чародей, ты несможеш запхнуть туда cx

    поскольку пушить необходимо dword - ecx.

    а если ты сделаеш

    push ecx

    pop cx

    то в старшем слове eax будит тое што и в старшем слове cx
     
  7. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    Где находится то место, где упомянул про cx????????????
     
  8. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Charodey

    Если я не ошибаюсь, то что push sreg запихает в стек, зависит от конкретного проца. Некоторые пихают нулевое слово, а некоторые - мусор (точнее ничего не пихают, а оставляют то, что и было). Точно не помню, домой приду посмотрю у Ровдо, у него точно что-то было на эту тему.
     
  9. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    Всё, спасибо doctor_Ice за подсказку в каком направлении двигаться.

    push cs

    аналогично

    mov ss:[sp+2],cs ;only analog

    Команда ессно не работает, но дает понимание. Ничего проц не расширяет и мусор не добавлят! Там просто значение которое когда-то было ранее, а постоянное из-за постоянства процедуры вызываемой это код!







    Может ли кто пояснить еще по этому поводу?
     
  10. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    А что не нравится-то?

    Система - Windows? Ну так она LDT вовсе не использует, делать ей больше нечего :)

    А чем индекс-то не понравился? Нормальный селектор кодового сегмента, для NT5 он, кажется, всегда такой...
     
  11. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    Тогда подскажите, что почитать про сегментацию в Win, а то кроме Intel документации у меня ни чего нет (вот и ориентируюсь по ней) ?(
     
  12. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Нет в Win, по крайней мере в NT сегментации ВООБЩЕ. flat-модель и всем приятно. Разделение адресных пространств приложений происходит на страничном уровне, то есть при преобразовании линейного адреса в физический. Логический же адрес преобразуется в линейный э... м... линейно :) Каламбур, однако. То есть все сегменты имеют базу 0 и лимит 4Гб.

    Единственное что - это FS. Он используется для обработки исключений.
     
  13. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    Хм, если я правильно понял логический=линейному.

    И под сегмент выделяется все что возможно-достуно, но при этом не происходит переполнеия.

    _______ _______ ______

    |_ds___||_es____|...|_VM___|

    --->------------------/\

    т.е. сколько бы в сегмент не писать он на др.сегмент не залезет, так?
     
  14. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Charodey

    сегменты в protected mode могут перекрываться. :)
     
  15. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Charodey

    1) Выделяет память система, уж сколько получится (затребовано, имеется и т.д.)

    Доступно-то 4Гб, но то для адресации. А если память не выделена/размещена - получишь Page Fault, коим так изобиловала 95-я.

    2) Логический=линейный НО! != физический. А залезет/не залезет - это уж как решит СИСТЕМА 8-0 или как ее попросят. Физически страницы может и вообще не быть в памяти (валяется в свопе, например)
     
  16. Charodey

    Charodey New Member

    Публикаций:
    0
    Регистрация:
    13 мар 2006
    Сообщения:
    13
    Спасибо, это вроде понятно. Но всеже есть ли у мелкомягких какая-нибудь официальная документация по теме?