В том коде, который приведён, ничего работать не будет. tmp не объявлена.
Кстати, сдвиг на 12 эквивалентен делению на
4096, а не на 4095...
попробуйте так
Код
unsigned int get_code ( unsigned int num_value, unsigned int k )
{
unsigned long tmp;
tmp = num_value * k;
asm ("nop");
asm ("nop");
asm ("nop");
tmp = tmp >> 12;
return( unsigned int tmp );
}
// или короче
unsigned int get_code ( unsigned int num_value, unsigned int k )
{
return( (unsigned int)( num_value * k / (unsigned long)4095 ));
}