Почему не работает rep imul eax,ebx?

Тема в разделе "WASM.BEGINNERS", создана пользователем Alexey2005, 19 июн 2006.

  1. Alexey2005

    Alexey2005 New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2006
    Сообщения:
    19
    Адрес:
    Russia
    Почему-то не работает следующий алгоритм возведения числа base в степень power:
    Код (Text):
    1. xor    eax,eax
    2.  inc    eax
    3.  mov    ecx,[.power]
    4.  mov    ebx,[.base]
    5.  rep    imul eax,ebx
    После выполнения этого кода в eax всегда оказывается число base. Но ведь rep должен повторить imul ровно ecx раз, так почему же он не работает?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Alexey2005

    Надеюсь у тебя с аглицким все в порядке ;)

    IA-32 Intel® Architecture Software Developer’s Manual, volume 2

    2.2. INSTRUCTION PREFIXES

    "The repeat prefixes cause an instruction to be repeated for each element of a string. They can be

    used only with the string instructions: MOVS, CMPS, SCAS, LODS, STOS, INS, and OUTS.

    Use of the repeat prefixes with other IA-32 instructions is reserved and may cause unpredictable

    behavior (see the note below)"
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Поведение префикса rep не определено для команд, отличных от цепочечных.
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    crypto

    Не совсем понял, что ты имеешь ввиду. Использование префиксов f2h,f3h зарезервировано для будущих расширений. В частности уже сейчас в IA-32 многие инструкции SSE\SSE2 имеют трехбайтные опкоды, начинающиеся с f2h и f3h. Поэтому в принципе возможна ситуация когда поставив rep перед какой-то инструкцией ты получишь трехбайтный опкод какой-то SSE-инструкции - вот тебе и непредсказуемость. А если такой комбинации (еще) нет, то проц просто проигнорирует префикс.
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    leo

    Ну чего человеку мозги забивать, у него конкретный вопрос, ему нужен простой (пока) ответ. Мы оба правы в этом смысле. Ты выразился точнее.
     
  6. Alexey2005

    Alexey2005 New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2006
    Сообщения:
    19
    Адрес:
    Russia
    Большое спасибо за ответы. Жаль, что rep "застолбили" только для строковых инструкций - очень удобный и полезный префикс...
     
  7. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Речь, как я понимаю, идет о фасме, потому что масм подобное не переваривает.

    Можно забацать макрос repi (repeat instruction), который и будет осуществлять задуманное =))
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105


    А чем тебя "постфикс" loop label не устраивает ?!
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Alexey2005

    > "Жаль, что rep "застолбили" только для строковых инструкций"

    Причина очень простая, т.к. в отличие от других префиксов (например переопределения размера операнда), rep кардинально изменяет поведение инструкции и фактически является расширением опкода строковых операций. Например, movsd и rep movsd с точки зрения CPU это две совершенно разные инструкции, которым соответсвуют разные микропрограммы из microcode ROM. Поэтому, сам понимаешь, раздувать память микропрограмм ради чьей-то прихоти - раз в сто лет использовать rep imul - разумные дяди из Intel и AMD не станут, а приберегут байтики f2h,f3h для более полезных вещей типа SSE
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105


    Теперь мне ясно, почему в SSE3 всего 4 команды :)
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    valterg

    Посмотри поиском в IA-32 сколько команд имеют опкод, начинающийся с F2 0F и F3 0F - штук 30 как минимум