Zrzut instrukcji asmowych możesz wykonać chociażby w gdb przez wydanie mu komendy
disassemble nazwa_funkcji
Możliwe, że jest też jakiś sposób na "automagiczne" wylistowanie wszystkich, niestety do tego jeszcze nie doszedłem.
Co do pomiaru czasu, to w C masz funkcję clock(), w Linuksach jest też komenda time. Jeśli chcesz zejść jeszcze niżej to w procesorach x86 od czasów Pentium jest instrukcja rdtsc, która zwraca ilość cykli procesora od czasu jego uruchomienia jako nieznakowaną 64-bitową wartość całkowitoliczbową. Przykładowy kod wykorzystujący tą instrukcję mógłby wyglądać tak (assembler wg. GAS, czyli składnia AT&T) :
.global rdtsc
.type rdtsc,@function
rdtsc:
xorl %eax,%eax
cpuid
rdtsc
ret
cpuid występuje tutaj jako instrukcja serializująca, powodująca zakończenie wszystkich potoków przetwarzania procesora, jako że mogłyby one wpłynąć na dokładność wartości zwracanej przez rdtsc. Zerowanie %eax wykonywane jest w celu poprawnego wykonania cpuid (która ma ustalone działanie tylko gdy w tym rejestrze jest 0, 1, 2 lub 3).
Do tego wywołujący powyższą funkcję kod w C :
unsigned long long rdtsc(void);
#include <stdio.h>
int main(void)
{
unsigned long long bla = rdtsc();
printf("%llu",bla);
return 0;
}
Mam nadzieję że troszkę chociaż pomogłem.