Здравствуйте, hop, Вы писали:
hop>Привет!
hop>Подскажите как можно реализовать слюдующуу ассемблерную вставочку.
hop>for(int i=0; i<=10; i++)
hop> mas[i] = 2 * (pow(2, i));
hop>Запарка в возведении в i-ю степень. Как это можно реализовать то?
А зачем асм? непортируемо, нечитаемо... к тому же можно не хуже и обычными средствами реализовать... например так:
int val = 2;
for(int i=0; i<=10; i++)
{
mas[i] = val;
val *= 2;
}
если памяти жалко, то можно при желании и без переменной val обойтись...
Здравствуйте, hop, Вы писали:
hop>for(int i=0; i<=10; i++)
hop> mas[i] = 2 * (pow(2, i));
mas[i] = 2 << i;
все нужно именно на ассме. (мне он нафик не нужен, просто прошу помощи в решении задачи).
Предложенный Вами вариант не устраивает, т.к. i = 0, 2 в 0 = 1, 2 в 1 = 2.
Здравствуйте, hop, Вы писали:
hop>все нужно именно на ассме. (мне он нафик не нужен, просто прошу помощи в решении задачи).
hop>Предложенный Вами вариант не устраивает, т.к. i = 0, 2 в 0 = 1, 2 в 1 = 2.
а повнимательнее?
mas[i] = 2 * pow(2,i)
для i = 0 дает 2 * 1 = 2, что точно совпадает с 2 << i ну или 1 << (i+1) или 2 * ( 1 << i )
Здравствуйте, hop, Вы писали:
hop>все нужно именно на ассме. (мне он нафик не нужен, просто прошу помощи в решении задачи).
hop>Предложенный Вами вариант не устраивает, т.к. i = 0, 2 в 0 = 1, 2 в 1 = 2.
Все верно у меня. Сдвиг 2 на ноль позиций влево дает 2 и т.д.
На асме как-то так будет:
mov eax, 2
mov ecx, i
shl eax, cl
mov a[i], eax
Или еще в цикл обернуть?
Здравствуйте, hop, Вы писали:
hop>все нужно именно на ассме. (мне он нафик не нужен, просто прошу помощи в решении задачи).
Упади в релизе в точку до или после цикла и всё увидишь