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 の数値は正しいですか? それも高くないですか?
前もって感謝します