Ubuntu 12.04 を使用して x86 アセンブリ プログラムをプロファイリングしようとしています。rdtsc 関数を使用したいと思います。問題は、コメントによると、rdx でサイクル数を取得する必要があることですが、次のコードでは数値が高すぎます。
SECTION .bss
SECTION .dat
SECTION .text
global main         
main:           
nop
cpuid
rdtsc
shl rdx, 32
or rdx, rax
mov r8, rdx
xor esi,esi
mov esi,19        ; instructions to be monitored
cpuid
rdtsc
shl rdx, 32
or rdx, rax
sub rdx, r8
デバッガーで実行すると、サブ命令の後のレジスターで次の結果が得られます。
rax     0xd88102bc
rbx     0x0
rcx     0xf0
rdx     0x44f3914a0
rsi     0x13
rdi     0x1
rbp     0x0
rsp     0x7fffffffdf38
r8      0x11828947ee1c
単純な命令に対して rdx のサイクル数が非常に多い理由がわかりません。rcx の数値は正しいですか? それも高くないですか?
前もって感謝します