Особенности команд ENTER, RET imm16

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

  1. SUMMONER

    SUMMONER New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    11
    Ещё раз процитирую себя:
    Реально, я же писал уже, что все эти разбирательства были затеяны только с целью понять ограничения в системе команд процессора. И только!
    Что мешало панам из Intel'a ввести ещё один код для команды ret -- я не знаю. Ведь jmp'ы бывают разной длины -- и коды у них различные. А если тебе бы не понадобилась новая инструкция, то пользовался бы старой -- в чём проблема-то?
    И кстати, 5 байт, это куда меньше (больше чем в 2 раза, если компилировать в 16 разрядный код. И почти 2 раза, если компилировать в 32 битный код) куска кода, который ты постил:
    Код (Text):
    1. pop eax
    2. add esp,imm32
    3. jmp eax
    Нигде не агитируешь. Вот поэтому все непонятки и должно разбирать в местах скопления единомышленников ;)
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Я так понимаю то, что она никому не нужна, опкодов мало, и ещё надо делать в процессоре модули, которые эту команду обрабатывать будут(последнее не факт т.к. ламер)
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Видимо это все понимают, в том числе и SUMMONER ;)) И подкол с 64-битным режимом (намек на ret imm64 ?!!) он наверное тоже понял, но сделал вид, что не заметил ;)
    А опкодов действительно катастрофически не хватает, поэтому в x86-64 уже поудаляли часть "ненужных" или легко заменимых инструкций (для тех, кто еще в досе - префиксы REX в 64-битном режиме = "бывшим" однобайтным INC\DEC - хоть и частичное, но "ущемление прав" ;) Если бы в старые времена и была введена ret imm32, то в условиях нынешнего дефицита опкодов она была бы первым кандидатом на замену чем то более полезным ;)
     
  4. SUMMONER

    SUMMONER New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    11
    Интересная тема, можно ещё пару примеров команд, который в IA32 были валидными, а в IA64 перестали существовать?
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    SUMMONER
    Что касается ENTER
    Не знаю как ты читал, т.к. во-первых в описании команды приведен полный псевдокод ее Operation, во-вторых, в volume 1 вообще есть целый раздел с примерами и картинками, иллюстрирующими работу ENTER. А вот фраза Mika0x65
    требует уточнения: не "нужны", а могут быть нужны; не "полезна", а могла бы быть полезна. Например, в Паскале и Дельфи несмотря на использование вложенных процедур, тормозная инструкция ENTER также вообще не используется и заменяется эквивалентными операциями push и т.д. (Желающие могут сравнить латентности push и ENTER, заглянув в А.Фога или мануал по оптимизации AMD)

    Речь о x86-64 = AMD64\EM64T, а не не о IA64 (Itanium). На вскидку не скажу, надо заглнуть в мануальчики ;)
     
  6. NoResponse

    NoResponse New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2005
    Сообщения:
    89
    Invalid Instructions in 64-Bit Mode
    Код (Text):
    1. Mnemonic   Opcode(hex)   Description
    2. AAA             37       ASCII Adjust After Addition
    3. AAD             D5       ASCII Adjust Before Division
    4. AAM             D4       ASCII Adjust After Multiply
    5. AAS             3F       ASCII Adjust After Subtraction
    6. BOUND           62       Check Array Bounds
    7. CALL (far)      9A       Procedure Call Far (far absolute)
    8. DAA             27       Decimal Adjust after Addition
    9. DAS             2F       Decimal Adjust after Subtraction
    10. INTO            CE       Interrupt to Overflow Vector
    11. JMP (far)       EA       Jump Far (absolute)
    12. LDS             C5       Load DS Far Pointer
    13. LES             C4       Load ES Far Pointer
    14. POP DS          1F       Pop Stack into DS Segment
    15. POP ES          07       Pop Stack into ES Segment
    16. POP SS          17       Pop Stack into SS Segment
    17. POPA, POPAD     61       Pop All to GPR Words or Doublewords
    18. PUSH CS         0E       Push CS Segment Selector onto Stack
    19. PUSH DS         1E       Push DS Segment Selector onto Stack
    20. PUSH ES         06       Push ES Segment Selector onto Stack
    21. PUSH SS         16       Push SS Segment Selector onto Stack
    22. PUSHA, PUSHAD   60       Push All to GPR Words or Doublewords
    23. Redundant Grp1  82 /2    Redundant encoding of group1 Eb,Ib opcodes
    24. SALC            D6       Set AL According to CF
    Reassigned Instructions in 64-Bit Mode
    Код (Text):
    1. Mnemonic   Opcode(hex)   Description
    2. ARPL            63       Opcode for MOVSXD instruction in 64-bit mode.
    3.                          In all other modes, this is the Adjust Requestor
    4.                          Privilege Level instruction opcode.
    5.  
    6. DEC and INC     40-4F    REX prefixes in 64-bit mode. In all other modes,
    7.                          decrement by 1 and increment by 1.
    Invalid Instructions in Long Mode
    Код (Text):
    1. Mnemonic   Opcode(hex)   Description
    2. SYSENTER        0F 34    System Call
    3. SYSEXIT         0F 35    System Return
     
  7. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    SUMMONER
    Код, который использовался бы раз в 100 лет и который всё равно можно реализовать 3мя стандартными инструкциями.

    А бранчи и джампы используются всегда и везде, кроме раздела A&O ;)
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Пардон, точность описаний у меня вечно хромает :dntknw:. Но про тормознутость enter я написал! :).
     
  9. SUMMONER

    SUMMONER New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    11
    Что же они предложили взамен команд для оперирования с BCD числами?
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Для упакованных BCD давно существуют FBLD\FBSTP для загрузки\выгрузки упакованных BCD в FPU и обратно. А для неупакованных лучше "ручками" реализовать на GPR\MMX\XMM, т.к. все AAx на современных компах ужасно тормозные, особенно на P4

    PS: 1) В списке "инвалидов" 64-битного режима видимо стоит обратить внимание на PUSHA\POPA, которыми частенько злоупотребляют начинающие писатели ;)
    2) А еще в число полуинвалидов почему-то попали LAHF\SAHF, которые якобы могут не поддерживаться на некоторых (ранних) моделях EM64T. В общем перспективы веселые и многообещающие ;))