Size: a a a

Ассемблер

2021 June 16

D

Den in Ассемблер
а куда смотреть то?
источник

s

s54816 in Ассемблер
Подумаешь, неправильно считает. Зато быстро!
источник

АШ

Алексей Шведов... in Ассемблер
В каком месте неправильно?
источник

s

s54816 in Ассемблер
А это кстати, шланг.
unsigned int GetTickCount(void)
{
   return ((unsigned int)(((unsigned long long)pSharedData->TickCountLow * pSharedData->TickCountMultiplier) >> 24));
}
; выхлоп:
mov     eax, dword ptr [2147352576]
mul     dword ptr [2147352580]
shrd    eax, edx, 24
ret
источник

s

s54816 in Ассемблер
В сдвиге.
источник

АШ

Алексей Шведов... in Ассемблер
Поправить константу просто
источник

s

s54816 in Ассемблер
А не заметить и не поправить ещё проще.
источник

АШ

Алексей Шведов... in Ассемблер
Так какая разница, тики то не изменились. GCC - больше, ASM - меньше
Если уточнить, то пересчитал на GCC - 18, ASM - 16
источник

АШ

Алексей Шведов... in Ассемблер
Так ты Microsoft напиши, они тебя возьмут. Перепиши им все kernel32 функции на шланг, а то неоптимизированные все
источник

АШ

Алексей Шведов... in Ассемблер
Честно, с таким синтаксисом лучше уж асм-вставку сделать
источник

d

disba1ancer in Ассемблер
по-моему ты тупо поставил gcc в невыгодное положение
источник

АШ

Алексей Шведов... in Ассемблер
Невыгодное положение это нормально на практике. Выгодное никогда не будет. Хотя иногда он даже  на этапе компиляции если посчитает, то всё равно фигню выдаёт

Нужно было получить неоднозначное значение, и я взял его с GetTickCount, чтоб не мучить пользователя, и дать поработать GCC
источник

d

disba1ancer in Ассемблер
для этого достаточно принять эти значения через аргументы функции
источник

d

disba1ancer in Ассемблер
тебя ведь дизасм интересует, а не как это запускать
источник

АШ

Алексей Шведов... in Ассемблер
Нет, меня интересует средняя скорость, которую может дать GCC при таком коде ((какое_то_значение + 2) / какое_то_значение)
источник

d

disba1ancer in Ассемблер
нормальные прогеры, учитывают все эти моменты и стараютсяписать код так чтобы компилятор мог оптимизировать их, программирование на ЯПВУ порой не легче чем на асме
источник

d

disba1ancer in Ассемблер
ну и дай на вход функции указатель на якобы массив
источник

АШ

Алексей Шведов... in Ассемблер
Ну, пусть оптимизирует. Я же на ассемблере оптимизировал, почему он не может?
источник

d

disba1ancer in Ассемблер
потому что код ты писал, ты точно имел представления о требованиях к коду, у компилятора же только плюсово-сишный стандарт и он не знает точно чего ты хочешь от, может определённая переменная должна на входе иметь сторого определённые значения, и ты это знаешь, а компилятор не знает и не может это как-то для себя доказать, в общем оптимизирующий компилятор штука сложная и нужно уметь для него писать код, чтобы он мог оптимизировать
источник

s

s54816 in Ассемблер
Потому что он не может установить все версии винды, начиная с NT и проверить, что адрес и офсеты не поменялись. Мало того, он даже не может гарантировать, что это именно функция из винды.
источник