Подскажите чем отличается 16 битный код то 32 битного.

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

  1. geka

    geka New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2006
    Сообщения:
    6
    Подскажите чем фактически отличается 16 битный и 32 битный код ? Выполняет ли 32 битный процессор в реальном режиме 32 битный код ? или только 16 битный ? Можно ли получить доступ к расширенным регистрам х86 (таким как eax). Или доступ к 32 битным регистрам может получит только 32 битный код.

    За раннее спасибо.
    P.S Прошу прошения за ламерские вопросы :dntknw:
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Мне кажется, что Вы путаете понятия real mode vs. protected и 16 bit vs. 32 bit. 32-битный проц выполняет 16-битный код (с сегментной адресацией как в старом добром досе) в режиме V86, но это совсем не реальный режим. Почитайте Art of Assembly (в разделе док).
     
  3. geka

    geka New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2006
    Сообщения:
    6
    Ок, спасибо, Art of Assembly я конечно почитаю, как только до него доберусь, сейчас нет возможности(под руками есть только второе издание Юрова серия учебник для вузов) но все-таки чем отличается 16 битный код от 32 битного и соответственно 32 битный от 64 битного. Кроме того что доступна большая разрядность регистров ? А про отличие реального режима от защищенного и виртуального я прочитал, и насколько я понял, в реальном режиме проц запускается и работает в режиме совместимости с 8086 адресует 1 мб памяти, и выполняет 16 битный код, тут сразу напрашивается вопрос можно ли в реальном режиме подсунуть процессору инструкцию для работы с 32 битным регистром, например eax ? что будет если процу в реальном режиме подсунуть инструкцию введенную например в 286 процессоре или новее, выполнит ли он ее нет ? может ли он выполнять 32 битный код в реальном режиме или только 16 битный. Вот потом проц переводят в защищенный режим , меняется адресация памяти и проц может адресовать все 4гб и тд, проц начинает выполнять только 32 код ? (выполняет ли он 16 битный код прямо в защищенном режиме без переключения в виртуальный режим ? ) Если оси понадобилось в защищенном режиме выполнить старое ДОС приложение (16 битное) то она переключает процессор в виртуальный режим проц сного может адресовать 1мб (весь мегобайт специально выделен для этого приложения и оно не знает что оно не одно)(насколько я понимаю это происходи непосредственно для задачи которой это необходимо как только у нее заканчивается квант времени и проц переходит на другую задачу он выходит из виртуального режима) так ?
    Вот например есть два транслятора например tasm и tasm32 ими можно оттранслировать совершенно одинаковый ассемблерный листинг и получить соответственно 16 битный и 32 битный код, так в чем же будет отличии между этими кодами ?

    Поправте если где не прав. ок ?
    Зараннее спасибо.
     
  4. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Я не отвечу Ваш вопрос(ы) но свое мнение скажу.
    Юров очень хорошая книга, но оочень хочется под нее вздремнуть, если решил учить ассемблер лучше оставить это ретро, а также отказатся от тасма, поскольку он уже (давненько) не поддерживается борландом и ты только тратишь свое время изучяя его (тасм), перейди например на masm32 или fasm и прочитай туториалы Iczliona (если еще не прочитал). И не понимаю зачем нужно писать проги под дос, в 16 битном режиме, на дворе 2006 год, я например могу понять для чего изучать ассемблер для Линукса - хоть и не часто приходится встречатся с линуксом но он все чаще используется - так что ассемблер под линукс это еще и вложение в будущее (поскольку за ним будущее, кто не верит поверит когда майкрософт возьмется всерьез за СНГ), а дос - от него грубо говоря почти такая же польза как от .bat файлов - чтото эфемерное что и толковой программой нельзя назвать но и пустым местом не назовешь, поправьте меня если я не прав.
     
  5. geka

    geka New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2006
    Сообщения:
    6
    xlinuks
    Да я конечно согласен с тем что дос свое уже отжил, это без спорно, просто при изучении практически любого языка нужно начинать именно с языка а не с тонкостей устройства ос, темболее что системные вызовы тогоже линукса весьма похожи на досовские (если не прав поправте). Тасм я не изучаю, пока что ставлю эксперименты на masm 6.12 потом планирую перейти на fasm. но сначало надо разобратся с архитектурой проца, а это сделать намного проше из под того же доса, чем парится с окоными приложениями в винде. Вот а про микрософт и снг, ну-ну пусть сначало возьмется, а потом уже и будем рассуждать.

    Кстати а что за туториалы Iczliona, и самое главное где их взять ? Яндекс чтото молчит :dntknw:
    P.S Кстати кому интересна тема програмирования на ассемблере под linux очень рекомендую почитать Wrox.Professional.Assembly.Language.Jan.2005.ISBN0764579010.pdf
     
  6. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    IczEliona, http://www.wasm.ru/publist.php?list=1
    (пропустил букву в имени автора)
    Желательно прочитать его, здесь с его туториалом знакомы практически все, вероятно потому что лучше пока никто не написал, хотя опечатки так никто и не потрудился исправить :P
     
  7. madhex

    madhex New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2006
    Сообщения:
    12
    чтобы изучать как работает видовс программа юзай
    OllyDbg, и изучиш архитектуру проца,там тебе
    и все регистры и стек покажут,а досовские можно только из под эмулятора(или в реальном досе).
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    избыточное цитирование. следите за этим
    Вообще, вопрос довольно таки объемный. И в PM и в RM можно использовать и 16 и 32 бита. Инструкция 16 бит практически не отличается от инструкции 32 бита (разве что размером непосредственного операнда) -- в зависимости от бита D (он находится в дескрипторе сегмента, а не в самой инструкции). Поэтому одна и та же инструкция м.б. проинтерпретирована по-разному. Изменить интерпретацию (инвертировать значение бита D на время выполнения инструкции) можно с помощью специальных префиксов замены размера операнда и размера адреса. Когда процессор начинает работу (после сигнала RESET) этот бит сброшен в 0, поэтому код интерпретируется как 16 бит. Если ты используешь директиву асемблера, указав, что код 16 бит и используешь в коде регистр/адресацию 32 бита, то асемблер вставит префикс замены размера операнда/адреса и сможешь использовать 32 бита и в RM. Чтобы использовать 16 бит находясь в PM, опять же потребуется префикс замены. Теперь бит D = 1, так что добраться до 16 бит другого способа нет. (Разве что только GDT подправить, добавив свой дескриптор :) ).

    Но в целом тонкостей много (например, код 8 бит можно использовать независимо от значения бита D, + при работе со стеком биты D берется из сегмента стека и влияет только на указатель стека sp/esp), так что лучше почитать Григорьева или мануалы -- там это все весьма доходчиво написано.
     
  9. geka

    geka New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2006
    Сообщения:
    6
    Огромное всем спасибо за разяснения, вроде понял.
    Пойду читать доки и в часности Intel Architecture Software Developer’s Manual, а так еще раз спасибо.