вот аж в лужу сел, когда прочитал что бывают 4 байтые опкоды:

Тема в разделе "WASM.ASSEMBLER", создана пользователем EvilsInterrupt, 23 июл 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Из второго б тома Интела про инструкции, аппендикс а:

    ЗЫ:
    Перевожу этот аппендикс на русский, очень нужная штука, может кто вычитать этот мой первый перевод на русский не просто технического, но текста вообще на английском?
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Звучит странно: как это 3-х байтовая инструкция может быть 4-х байтов длины?

    "Трёх-байтовые инструкции занимающие 4 байта начинаются с обязательного префикса (66h, F2h или F3h) и двух переключающих байт (0F38h или 0F3Ah). Старшие и младшие 4 бита четвёртого байта служат индексами строки и столбца в Таблице А-4 или Таблице А-5."
     
  3. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    AsmGuru62
    Получается, что данные 3 байта - префикс опкода и далее идёт ещё один байт. Итого: 4.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    AsmGuru62
    Там же ясно сказано 1 префикс два escape байта и 1 основной байт! того 4ре.

    Просто я почему то был уверен, что инструкций с длиной опкода более 3 байт не бывает, а получается что есть, пример тому PALIGNR XMM0,XMM1,8
     
  5. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Нет. Можно и 15 байтную инструкцию сделать напихав в нее кучу незначащих префиксов.
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Bill_Prisoner
    Незначающие префиксы НЕ являются опкодами!!!

    А речь изначально идет про опкоды и именно про их длину!
     
  7. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    ИМХО все гораздо проще - имеется ввиду 3 байта опкода и r/m байт.
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ustus
    А ты почитай ман, у видишь какой там Mod R/M! Предположение не значит истина!
     
  9. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    EvilsInterrupt
    меня больше смутила разница (в опкодах) между командами
    MOVLPS и MOVHLPS чтобы различать это нужно довольно грамотно построить таблицу так же рекомендую обратить внимание на MONITOR и MWAIT.
     
  10. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    BTW. Согласен, что по логике modrm включаться не должен (по аналогии с известными описаниями опкодов у них не включается даже если поле r\code содержит коды). Но IMHO они использовали слова "4 bytes opcode" типа на будущее. По крайней мере, я не помню ни одного такого опкода.
    3х байтных полно, 4х - не встречал ни разу.
    Т.е.
    1.modrm - действительно не включается
    2. IMHO 4х байтные опкоды только намечены в перспективе, в реальности пока отсутсвуют.
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    doctor_Ice
    Все просто, когда поймешь как в таблицы опкод глядеть, я увидел и понял как они это сделали. Щас вот сижу и думаю, какие лучше сво-ва задать в массивах задать, чтобы получилась такая же ссылочность, как и в таблицах опкодах.

    Пока пришел к выводу:
    typedef struct _hopcode {
    BYTE OpcodeOptions; // modrm | o64 | i64 | notprefix etc еще не продумал, но главное сво-во | nexttab
    DWORD AddrTN;
    }hopcode, *popcode;
    если установлен nexttab в OpcodeOptions то надо смотреть другой массив, иначе это текст мнемоники

    Ну и таблиц может много, ибо есть несколько групп, таблица А-4 Аппендикса А, тома 2Б + Ну и таблицы связанные с 0Fxx - ескап-байт
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    The Svin
    Как сказать - SSE4 и Core 2 это перспектива, реальность или реальная перспектива ? ;))
     
  13. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Я вобще не в курсе.
    У меня знания застыли на SSE2.
     
  14. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    "3х-байтные опкоды длиной в 4 байта" -- это нормальное высказывание, с учетом новой роли префиксов 66h, F2h и F3h. Раньше это были чисто префиксы, сейчас же они влияют на декодирование определенных команд (вроде SSEx). Т.е. для этих команд эти префиксы можно считать как бы частью опкода. Но в то же время -- 66h, F2, F3 -- это ведь Префиксы, как ни крути ;) Отсюда и "3х-байтные опкоды длиной в 4 байта". Вот пример:

    2х байтный опкод длиной 2 байта:
    0F 51 FF sqrtps xmm7, xmm7

    2х байтный опкод длиной 3 байта:
    F3 0F 51 FF sqrtss xmm7, xmm7

    Аналогично для "Three-byte opcodes that are 4 bytes in length".
    P.S. Кстати opcode extension не входит в эти "4 байта", т.е. теоретически может существовать команда, в которой опкод будет размазан по 5 (!) байтам.
     
  15. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    EvilsInterrupt
    И какой там r/m ?
    например PSHUFB Pq, Qq - чего в нем необычного-то?

    И какой мануал, Интел чего-то темнит пока...
     
  16. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    ftp.download.intel.com/design/Pentium4/manuals/
    25366620.pdf
    25366720.pdf
     
  17. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Блин, опять заблудился на интеловском сайте... :dntknw:
    EvilsInterrupt
    так чем r/m не нравится-то???

    но кстати я так подумал:
    так что похоже имеется ввиду, что первый байт опкода - префикс. Бред по-моему. А если, например, там между 66 и 0F еще чего-нибудь влезет, REX например? Какой у него номер будет, 1.5 что ли?

    [offtop]
    У меня появляется устойчивое ощущение, что начиная с MMX опкоды выбираются Как Попало.
    [/offtop]
     
  18. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ustus
    Изначально создал тему со смыслом, что есть опкоды длиной в 4 байта (опкод != машинная инструкция)

    Там же ясно приведено, для такого опкода обязательно, должны быть:
    1. один из "префиксов" 66, F2,F3 - уже 1 байта, т.к. ковычки не случайны!
    2. 2 ESC-байта 0F38 или 0F3A - еще 2 байта, того 3 байта

    и только после этих 3х байт разрешается смотреть в таблицу для декодирования 4го байта.

    Вот к примеру - 66 0F 38 0B дадут нам команду: pmulhrsw. Но тут, еще играет роль байт 66.

    Взял я этот пример из Vol 2B, A-16, линки на талмуды выше
     
  19. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    EvilsInterrupt
    Ну так то же самое можно было сказать про двухбайтные опкоды из которых добрая часть точно также зависит от префиксов - напр.
    -- 0F 5A ... - cvtps2pd ...
    F3 0F 5A ... - cvtss2sd ...
    66 0F 5A ... - cvtpd2ps ...
    F2 0F 5A ... - cvtsd2ss ...
    (точнее злая это половина и недобрая, особенно для дизассемблера :) )

    А талмуды-то сыроваты - в таблице эти самые SSE4 прикручены, а в основном-то списке команд их и нет...
     
  20. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    на самом деле ведь и опкоды (команды) отмирают... Как-то был разговор на эту тему в др.форуме. Intel этот понапридумывал ненужного воз и маленькую тележку... сплошное дублирование. AFAIK в 64битном режиме на место оч. старых опкодов пришли новые. Примеров сейчас не приведу, но об этом читал. Да и ещё ведь надо новые команды куда-то впихивать, вот они и удаляют старые никому не нужные