所以我一直在玩 perf 和 assembly 我有以下程序:
.intel_syntax noprefix
.global _start
_start:
mov cl, 2
mov ebx, 0b101
shr ebx, cl
and bl, 1
je do_stuff
do_stuff:
mov eax, 1
mov ebx, 0
int 0x80
当我使用它时,perf -e instructions:u ./shift
它显示 9 条指令而不是 8 条,我找不到原因。有什么办法可以找出+1指令是哪个吗?
它是否只是其中一条程序指令,但并行运行然后CPU将其淘汰?如果是这样的话,如何观察它在较低级别上是如何工作的?
编译:as -msyntax=intel -mnaked-reg shift.s -o shift.o && ld shift.o -o shift
/proc/sys/kernel/perf_event_paranoid
设置为-1