Обсуждение темы "Система команд x64"

Тема в разделе "WASM.X64", создана пользователем Mikl___, 20 сен 2025.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    Здравствуйте! Прошу здесь высказываться о том что Вы думаете о теме "Система команд x64", пожелания, исправления, замеченные ошибки буду переносить в тему
     
    E.D. и M0rg0t нравится это.
  2. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    554
    А зачем такое? Intel SDM разве недостаточно?

    Как вариант - не перечислять все команды, большинство из которых так или иначе очевидны (стандарная арифметико-логика, обычные ветвления по условиям), а рассмотреть всякие специфические, которые "не такие, как у всех".
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    Dmitry_Milk,
    Intel-талмудов достаточно в любом случае, я и постараюсь рассмотреть всякие специфические, которые "не такие, как у всех"
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.350
    LEA ничего никуда не пересылает, она только адресную арифметику делает.
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.111
    rmn,
    LEA EAX,[EBX] = MOV EAX,EBX а также сложение с imm и умножение на 2, 3, 4, 5, 8, 9. Правда, так как первоначальное назначение INC, DEC и LEA работа с адресами, эти команды не влияют на CF
     
    Последнее редактирование: 20 сен 2025
  6. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    554
    Если б мнемоники x86 проектировали Zilog, у них наверное, на все про все была бы одна мнемоника LD

    Код (Text):
    1.  
    2. LD EAX, EBX
    3. LD EAX, some_var ; занести адрес переменной some_var
    4. LD EAX, [some_var]  ; а так - значение из переменной some_var
    5. LD EAX, some_array +EBX + ECX*4  ; адрес
    6. LD EAX, [some_array +EBX + ECX*4] ; значение
    7.  
     
  7. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    366
    Адрес кодируется(modrm) одинаково во всех инструкциях, опкод разный для mov/lea и мнем. соотв.
     
  8. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    554
    Для загрузки непосредственного значения в modrm тоже отдельный опкод, но мнемоника все равно MOV.

    Вот в i8080 на каждый разный чих (регистр-регистр, непосредственное в регистр, аккумулятор по прямому адресу, аккумулятор по адресу в регистровой паре, непосреднсвенное в рег.пару, рег.пара по прямому адресу) действительно была отдельная мнемоника. А Зилоги, когда позаимствовали иструкции из i8080 в z80, все это обозвали одной мнемоникой.
     
  9. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    366
    Dmitry_Milk

    Например ?

    У зилогов регистры кодировались в опкодах.
     
  10. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    554
    8B -> MOV r32,r/m32
    B8+rd -> MOV r32, imm32

    Ну и вообще, если откроешь, например, интеловскую документацию - там куча разных опкодов (то есть, это не r/m и не sib) на мнемонику MOV, как, впрочем, и на многие другие мнемоники.

    То есть, нельзя разносить MOV и LEA в разные категории инструкций только на основании того, что у них разные опкоды.

    Так они и в x86 в некоторых случаях прямо в опкоде 3 бита, вот, выше опкод B8+rd, по сути коды от B8 до BF. А в i8080 так было во всех инструкциях. Зилог вообще ничего не придумали - они прямо один к одному унаследовали в Z80 кодировку из i8080, просто расширив ее префикс-байтами, но при этом полностью перекроили мнемоники ассемблера, заменив все mov/mvi/sta/lda/stax/ldax/lxi/lhld/shld с разными опкодами одной мнемоникой ld.
     
  11. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    366
    В некоторых случаях lea оказывается проблемой. Так для pointer taint те наследовании указателей(pointer flow) необходима сложная обработка инструкции, тк после вычисления может образоваться не указатель