Почему-то не работает следующий алгоритм возведения числа base в степень power: Код (Text): xor eax,eax inc eax mov ecx,[.power] mov ebx,[.base] rep imul eax,ebx После выполнения этого кода в eax всегда оказывается число base. Но ведь rep должен повторить imul ровно ecx раз, так почему же он не работает?
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)"
crypto Не совсем понял, что ты имеешь ввиду. Использование префиксов f2h,f3h зарезервировано для будущих расширений. В частности уже сейчас в IA-32 многие инструкции SSE\SSE2 имеют трехбайтные опкоды, начинающиеся с f2h и f3h. Поэтому в принципе возможна ситуация когда поставив rep перед какой-то инструкцией ты получишь трехбайтный опкод какой-то SSE-инструкции - вот тебе и непредсказуемость. А если такой комбинации (еще) нет, то проц просто проигнорирует префикс.
leo Ну чего человеку мозги забивать, у него конкретный вопрос, ему нужен простой (пока) ответ. Мы оба правы в этом смысле. Ты выразился точнее.
Большое спасибо за ответы. Жаль, что rep "застолбили" только для строковых инструкций - очень удобный и полезный префикс...
Речь, как я понимаю, идет о фасме, потому что масм подобное не переваривает. Можно забацать макрос repi (repeat instruction), который и будет осуществлять задуманное =))
Alexey2005 > "Жаль, что rep "застолбили" только для строковых инструкций" Причина очень простая, т.к. в отличие от других префиксов (например переопределения размера операнда), rep кардинально изменяет поведение инструкции и фактически является расширением опкода строковых операций. Например, movsd и rep movsd с точки зрения CPU это две совершенно разные инструкции, которым соответсвуют разные микропрограммы из microcode ROM. Поэтому, сам понимаешь, раздувать память микропрограмм ради чьей-то прихоти - раз в сто лет использовать rep imul - разумные дяди из Intel и AMD не станут, а приберегут байтики f2h,f3h для более полезных вещей типа SSE
valterg Посмотри поиском в IA-32 сколько команд имеют опкод, начинающийся с F2 0F и F3 0F - штук 30 как минимум