На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Шпаргалка по регистрам x86-64
    Всем привет!

    Решил себе для памяти составить "Шпаргалку по регистрам x86-64". Прошу ознакомится, может чего добавить можно, или указать на ошибки :rolleyes:

    1.1. Регистры общего назначения

    16 регистров, которые могут использоваться для хранения данных и адресов:

    RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15

    1.2. Регистры сегментов

    CS, DS, ES, FS, GS, SS: 16-битные регистры в 64-разрядных системах в основном не используются так, как это было в 16- или 32-разрядных системах, благодаря плоской модели памяти, где вся память доступна как единое пространство. Однако регистры FS и GS все еще имеют значение и могут использоваться для специфических задач, связанных с многопоточностью и управлением памятью.

    1.3. Регистры состояния

    Эти регистры используются для управления состоянием процессора и выполнения инструкций:

    RFLAGS: Регистр состояния, который содержит флаги, указывающие на результат арифметических операций и состояние процессора.

    1.4. Регистры SIMD и операций с плавающей точкой

    Для работы с векторными данными и параллельными вычислениями используются регистры SIMD (Single Instruction, Multiple Data):

    ST0 — ST7: 80-битные регистры FPU, используемые для выполнения операций с плавающей точкой в формате x87. Эти регистры могут хранить числа с плавающей точкой в формате IEEE 754, что позволяет выполнять высокоточные вычисления.

    MM0 — MM7: 64-битные регистры используются для выполнения операций с целыми числами.

    🖐 По поводу ST* и MM* запилил отдельный топик!

    XMM0 — XMM15: 128-битные регистры, используемые для операций с плавающей точкой и целыми числами.

    YMM0 — YMM15: 256-битные регистры, которые расширяют XMM-регистры и используются в инструкциях AVX (Advanced Vector Extensions).

    ZMM0 — ZMM31: 512-битные регистры, которые используются в современных процессорах, поддерживающих AVX-512, для выполнения различных операций, включая арифметические, логические и операции с плавающей точкой.

    1.5. Специальные регистры

    Существуют также специальные регистры, которые используются для управления памятью и выполнения операций:

    CR0 — CR4: 64-битные регистры управления, используемые для управления режимами работы процессора и управления памятью.

    DR0 — DR7: 64-битные регистры отладчика и тестирования играют важную роль в отладке программ и управлении виртуальной памятью.

    TR3 — TR7: 64-битные регистры используются для управления тестированием и отладкой в системах с поддержкой виртуальной памяти.



    ДЛЯ МНОГИХ РЕГИСТРОВ ПРЕДУСМОТРЕН 32-БИТНЫЙ ДОСТУП (К МЛАДШЕЙ ЧАСТИ)
      Цитата Majestio @
      CS, DS, ES, FS, GS, SS: 16-битные регистры в 64-разрядных системах в основном не используются так, как это было в 16- или 32-разрядных системах, благодаря плоской модели памяти, где вся память доступна как единое пространство. Однако регистры FS и GS все еще имеют значение и могут использоваться для специфических задач, связанных с многопоточностью и управлением памятью.

      16-битные регистры указателей сегмента или селекторы в GDT/LDT таблицах c 64-битной или 128-битной теневой частью, содержащей базовый адрес начала сегмента. В 64-битных системах не доступны (там чисто физически значения префиксов сегментов CS/DS/ES/SS в системе команд помечены как недействительные операции), кроме FS и GS, но есть аналоги для CS и DS в MSR регистрах.
      IDRT, GDTR - 64-битные указатели на логические адреса расположения таблиц прерываний и описателей блоков сегментов и шлюзов
      LDTR - 16-битный селектор в GDT для LDT c 64-битной или 128-битной теневой частью (в теневые части подгружается запись из таблицы для подавления лишних обращений к памяти)
      TR - 16-битный селектор текущей TSS c 64-битной или 128-битной теневой частью (Task state segment - аппаратное описание состояния текущей задачи (только регистры общего назначения, но можно до сохранять через FXSAVE и остальное).
      Цитата Majestio @
      RFLAGS: Регистр состояния, который содержит флаги, указывающие на результат арифметических операций и состояние процессора.

      +FSW регистр состояния FPU
      FCW регистр управления FPU (для RFLAGS биты управления и состояния смешаны, а у FPU разнесены на 2 разных)
      Цитата Majestio @
      ST0 — ST7: 80-битные регистры FPU, используемые для выполнения операций с плавающей точкой в формате x87. Эти регистры могут хранить числа с плавающей точкой в формате IEEE 754, что позволяет выполнять высокоточные вычисления.

      MM0 — MM7: 64-битные регистры используются для выполнения операций с целыми числами.

      +MM0 - MM7 занимают тот же блок регистров что и ST0 - ST7 и для использования первых необходима команда FINIT, а для вторых EMMS (это не относится к XMM0-XMM15
      Цитата Majestio @
      CR0 — CR4: 64-битные регистры управления, используемые для управления режимами работы процессора и управления памятью.

      Еще CR7 (CR0-CR4,CR7)
      Сообщение отредактировано: macomics -
        Благодарю!!! :good:
        Я писал "по-верхам". Буду постепенно вычитывать и дополнять/исправлять.
        Сообщение отредактировано: Majestio -
          Цитата macomics @
          Еще CR7 (CR0-CR4,CR7)

          Нашел какую-то противоречивую инфу по этому:

          Цитата
          1) В архитектуре x86/x86-64 регистры управления (Control Registers, CR) используются для управления режимами работы процессора, виртуализацией, защитой памяти и другими системными функциями. Основные регистры управления — это CR0, CR1, CR2, CR3, CR4, CR8 (в 64-битном режиме). Однако не все из них доступны или используются в современных процессорах.

          Цитата
          2) В некоторых процессорах (например, Intel) могут быть дополнительные регистры управления, такие как CR5–CR7, но они зарезервированы и не используются. В документации Intel и AMD указано, что попытка доступа к этим регистрам вызовет исключение #UD (Invalid Opcode).

          Где бы официальные доки почитать?
            https://disk.yandex.ru/d/rFcZy963E67vAg
            На англ. Но официальнее некуда. Я по памяти писал. Там и правда CR8
            Еще у меня очепятка в IDRT. Должно быть IDTR
            Сообщение отредактировано: macomics -
              Цитата macomics @
              https://disk.yandex.ru/d/rFcZy963E67vAg
              На англ. Но официальнее некуда. Я по памяти писал. Там и правда CR8
              Еще у меня очепятка в IDRT. Должно быть IDTR

              Еще раз - благодарочка! :lol:

              ЗЫ: Далеко не убегай - ты ещё тут нужен мало-мало :rolleyes:

              Добавлено
              Цитата macomics @
              +MM0 - MM7 занимают тот же блок регистров что и ST0 - ST7 и для использования первых необходима команда FINIT, а для вторых EMMS (это не относится к XMM0-XMM15

              По этому вопросу запилил отдельный топик - также просьба почекать ;)
                Список регистров можно найти вот тут: https://en.wikipedia.org/wiki/X86#32-bit
                Картинка: https://upload.wikimedia.org/wikipedia/comm...gisters_svg.svg

                Но тут отсутствуют как минимум:
                • Расширение AVX-512: K0-K7
                XCR0 (Extended Control Register не имеет ничего общего с CR0)
                • Расширение MPX: BND0-BND3, BNDCFGU, BNDSTATUS
                • Расширение AMX: TMM0-TMM7 (они же TILEDATA), TILECFG
                PKRU (Protection Key Rights for User Pages)
                MSR-регистры (их сотни, часть из них доступны через инструкции типа RDPID и пр.)

                Вот тут я ещё составлял список когда-то: https://www.cyberforum.ru/showthread.php?p=12316722 (регистра MXCSR_MASK на самом деле нет).

                Хороший способ найти все регистры — открыть раздел 13 тома 1 Intel SDM.

                P.S. Кстати, возможно, у AMD тоже есть какие-то свои специфичные регистры.

                Добавлено
                Цитата Majestio @
                ДЛЯ МНОГИХ РЕГИСТРОВ ПРЕДУСМОТРЕН 32-БИТНЫЙ ДОСТУП (К МЛАДШЕЙ ЧАСТИ)
                А ещё к 16-битной и 8-битной (причём, к 2-м 8-битным: младший байт и старший байт младшего слова).
                ExpandedWrap disabled
                  [             RAX              ]
                  [      EAX     ]
                  [  AX  ]
                  [AL][AH]


                Добавлено
                Для статей, кстати, у нас есть раздел Assembler FAQ
                  Цитата Jin X @
                  Для статей, кстати, у нас есть раздел Assembler FAQ

                  Пасибище!!! Будем изучять :lol: А до статьи еще дорасти нужно ... ;)

                  Цитата Jin X @
                  А ещё к 16-битной и 8-битной

                  Да-да, я это еще с TASM помню, исправлю)
                    Цитата Jin X @

                    Jin X, судя по картинке ZMM, YMM, XMM от 0 до 15 тоже используют разделяемые регистры?
                      Цитата Majestio @
                      ZMM, YMM, XMM от 0 до 15 тоже используют разделяемые регистры?
                      Да, XMM – это младшие 128 бит от YMM / ZMM.
                      Более того, например, AVX / AVX-512 инструкция vmulss (произведение скалярных значений в векторах) работает только с регистрами xmm, потому что делать версию с регистрами большего размера просто нет смысла, т.к. используется только младшие 32 бита.
                      В 32-битном коде доступны только 8 XMM/YMM/ZMM-регистров, а в 64-битном — 16 XMM/YMM при работе с SSE/AVX и 32 XMM/YMM/ZMM при работе с AVX-512.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,1578 ]   [ 15 queries used ]   [ Generated: 19.04.25, 05:42 GMT ]