Несколько вопросов начинающего

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 6 окт 2010.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Так разве существуют регистры CR8-CR15 и DR8-DR15?
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    s3dworld
    прочитайте документацию и не такое узнаете. например есть команда ud2 для генерации исключения недействительной операции
     
  3. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Подписываюсь под каждым словом. Нелёгкое чтиво, да и детальки торчащие есть, но это — основа. Без неё никак.

    ----8<----
    s3dworld,

    Есть ещё AVX/FMA/XOP, там используются 256-битные YMMx. Картинка кривая, кто-то матрицами увлёкся. DR-ы не все живые (где как). Были ещё TR-ы, но в младенчестве померли. MTRR/MSR — немаловажный аспект. В общем, маны — наше всё. :derisive:
     
  4. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Я подсел на книги серии: Микропроцессор i486 (Книга 1-4). Сейчас читаю про привилегии, так всё понятно: подчинённые сегменты, шлюзы вызова. Кстати, что предпочтительней? Или результат одинаков, только зависит от стиля.

    Мне бы найти такую-же книжку про x64. Может кто знает такую?
     
  5. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Не так уж это и плохо. Для ассемблера разрядность не даст существенного прироста производительности. А эмуляция 32 бит всё равно не помешает. Вы потратите время, которое могли бы писать ядро, а в итоге получите ассемблер сильно уступающий fasm. Или не уступающий, но за это время вам расхочется писать ОС))
    Боюсь, что нет. Только на английском.
    Если вам не нужна загрузка с флоппи, то используйте расширенный дисковый сервис - не нужно будет мучатся с устаревшей CHS адресацией, а писать адрес в LBA формате. Заодно диск сможет быть не 2 ГБ (около того. не помню точно), а до 2 ТБ.
    Самое интересное, то что клава вполне может работать даже в PM. BIOS умеет специальными средствами эмулировать PS/2 клаву так что вы будуте работать с её регистрами, а на самом деле все обращения будут идти к USB. Правда это пока вы не напишите свой драйвер USB.
    Я пробовал - флешка будет видится как обычный жёсткий диск.
    Не рекоменую. Удобнее, когда сегмент 0 - частенько надо обращатся к нижним адресам. К тому же адреса будут соответствовать физическим. А это вам будет полезно поскольку вы будите переключаться в другой режим. Так что настоятельно не рекомендую вам делать базу кода 0.
     
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    s3dworld,

    Русский язык критичен? Иначе — сайты производителей CPU.
     
  7. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    baldr
    Ну так и процессоры развиваются. Не будешь же на каждый чих Интела или АМД править статью (хотя бы потому, что надо с этим чихом разобраться, на что нужно время и т.д.), тем более что сами принципы не меняются.

    Живость DRов особой рояли не играет: то, что регистр умер, не означает, что его нельзя закодировать в команде. Другое дело, к каким последствиям это приведёт -- но это уже не формат кодирования инструкций, а правила их выполнения.
     
  8. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    baldr
    Ой как критичен. Ну имеется в виду что с русским переводом я лучше усваиваю материал))). А так я себе уже накачал этих:

    - AMD64 Architecture Programmer's Manual Volume 1. Application Programming
    - AMD64 Architecture Programmer's Manual Volume 2. System Programming
    - AMD64 Architecture Programmer's Manual Volume 3. General Purpose and System Instructions
    - AMD64 Architecture Programmer's Manual Volume 4. 128-Bit Media Instructions
    - AMD64 Architecture Programmer's Manual Volume 5. 64-Bit Media and x87 Floating-Point Instructions
    - AMD64 Architecture Programmer's Manual Volume 6. 128-Bit and 256-Bit
    - Volume 1. Application Architecture (Revision 2.3)
    - Volume 2. System Architecture (Revision 2.3)
    - Volume 3. Intel® Itanium® Instruction Set (Revision 2.3)
    - Volume 4. IA-32 Instruction Set (Revision 2.3)
    - Intel® 64 and IA-32 Architectures Optimization Reference Manual
    - Intel® 64 and IA-32 Architectures Software Developer's Manual
    - Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1. Basic Architecture
    - Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2A. Instruction Set Reference, A-M
    - Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2B. Instruction Set Reference, N-Z
    - Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A. System Programming Guide
    - Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3B. System Programming Guide
    - Intel® 64 Architecture x2APIC Specification
    - Intel® Advanced Encryption Standard New Instructions (Intel® AES-NI) Set White Paper
    - Intel® Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode White Paper
    - Intel® Virtualization Technology FlexMigration (Intel® VT FlexMigration) Application Note
     
  9. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Да. Не удачный. Но всё равно лучше приучиться делать test вместо cmp и xor вместо mov в таких случаях. Чтобы не думать о размере при выборе команды. Всё равно не неоптимальнее.
     
  10. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    KIV
    поясните
     
  11. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    SII,

    Извини, наехал малёха. Однако как же закодировать mov dr8, eax? :derisive:
     
  12. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    baldr
    С префиксом REX. Другое дело, что отладочных регистров 8-15 вроде как в природе не существует, а значит, инструкция с таким кодом вызовет исключение, но технически возможность кодирования этих номеров присутствует (как, например, в случае с управляющими регистрами: там тоже далеко не полный набор имеется, но указать-то можно любой номер).
     
  13. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    s3dworld
    Я тоже с русским лучше усваиваю. Обычно лучше -- но встречаются такие перлы, что проще на английском, чем пытаться понять, что хотели сказать на русском. Но вообще, без английского в программировании, особенно системном, никуда, так что привыкайте пользоваться оригиналами.
     
  14. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Размер не больше. Что это 2 байта, что то. Только xor reg, reg при больших размерах операнда будет по прежнему 2 байта, а mov 3. или даже 5 (dword в PM) или 9 (qword в LM). Битовые операции процессором выполняются очень быстро.
     
  15. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    SII,

    Извини за ригоризм, но не подразумевает ли REX.R 64-битное счастье? А я про eax. Ну и в мурзилках про этот метод ничего не сказано (хотя DR8…15 в AMD APM упоминаются). :derisive:

    P.S. Ну и оффтопик мы тут развели… :derisive:
     
  16. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    baldr
    Ну так флудерасты ж :) Да, на EAX я внимания не обратил -- подумал, что вопрос о номере несуществующего регистра. А что у АМД упоминается, не в курсе -- не глядел (у самого сплошь интелы, так что нужды не было).
     
  17. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    KIV
    ... тут ключевое слово!
     
  18. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    А можно ли поступить так: для защищённого режима (P-Mode) сделать всего три дескриптора (нулевой, код и данные), каждый из которых описывают всё адресное пространство (от 0 до 4^32), и при этом всю работу организовать только лишь по страничкам (а не по сегментам)? Или обязательно нужно делать ещё один сегмент для стека?

    Я бы с удовольствием сделал всего два сегмента: нулевой и сегмент для всего остального. Но боюсь так нельзя (я не уверен). А была бы воля, я бы вообще без сегментов сделал (только лишь страничками).

    Хотя меня смущает тот момент, что странички должны быть фиксированной длины (4 КБ, либо 4 МБ (или 2 МБ, не помню)). Получается что будет много занятого (но не использованного) места программой. Хотя если посмотреть на это с другой стороны - какая разница: странички выгружаются, странички загружаются.

    Как я понял, всего может быть 256 прерываний (хотя про нулевое я не уверен): от 0x00 до 0xFF. И мне обязательно для всех них писать обработчик? А можно ли для каких-то делать один и тот же обработчик, но скажем по значению одного из регистров определять поведение обработчика?
     
  19. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Люди, разбирающиеся в FASM, подскажите:

    Есть оператор $ и есть оператор $$. Что они обозначают?

    $ - это вроде бы смещение. А $$ - вроде бы базовый адрес, только не понимаю адрес чего (может это значение, указанное в org). Я бы так и подумал, если бы не взглянул на это:

    Код (Text):
    1. rb 510 - ($ - $$)
    2. db 0x55,0xAA
    3. rb (2880 * 512) - ($ - $$) - 1
    4. db 0
    Если в начале я установил:

    Код (Text):
    1. org 0x7C00
    И пускай команда:

    Код (Text):
    1. rb 510 - ($ - $$)
    Выполняется по смещению 0x00FF. То считаю:

    По моему никак не может быть заполнение 31999 значений, до недостающих 510. Скорее всего в данном случае $$ будет равняться 0. Но что она вообще обозначает и в каких случаях она обозначает значение не 0?

    Ещё интересно, почему записано так (это не мой код):

    Код (Text):
    1. rb 510 - ($ - $$)
    2. db 0x55,0xAA
    3. rb (2880 * 512) - ($ - $$) - 1
    4. db 0
    А разве вот это (убраны круглые скобки, объединяющие $ и $$):

    Код (Text):
    1. rb 510 - $ - $$
    2. db 0x55,0xAA
    3. rb (2880 * 512) - $ - $$ - 1
    4. db 0
    Не приведёт к такому же результату?
     
  20. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    s3dworld
    Во всех реально существующих и более-менее распространённых системах защита памяти организовывается исключительно на базе страничного механизма. Более того, основная масса процессорных архитектур не имеет никакого подобия сегментации ИА-32. Интел повыёживалась с ней, но, как видим, попусту: разработчики систем так и не стали ей пользоваться, поэтому в 64-разрядном режиме сегментация умерла. То же касается и аппаратной многозадачности: "гладко было на бумаге, да забыли про овраги"...

    Что же касается ИА-32, то обойтись без дескрипторов сегментов нельзя лишь по исключительно архитектурным причинам (сегментацию вырубить нельзя в принципе). Нулевой -- это пустой дескриптор; по большому счёту, он не нужен (только место занимает, и всё). Остаются два необходимых сегмента, причём невозможность обойтись одним сегментом объясняется опять-таки кривизной архитектуры: один и тот же сегмент не может быть одновременно доступен для чтения, записи и выполнения. Что касается стека, то это, по сути, просто обычный сегмент данных: ему нужен доступ на чтение и запись. Поэтому сегменты данных и стека объединяются вместе (в CS грузится селектор сегмента кода, во все остальные -- селектор сегмента данных).