同样是 + 2
有两种方法 ...
假设 此时 EAX 已经为 0 了
我这样加
ADD EAX,2
虽然是一条指令 但是机器码 有 3 个字节
如果我这样加
INC EAX
INC EAX
两条指令 但是只有 两个 字节的机器码 ....
INC 寄存器 周期貌似是 1
ADD 立即数 是 2
哪种更快些 呢 ....
------解决方案--------------------
比较指令效率
xor esi,esi
xor edi,edi
@@:
rdtsc
mov ecx,eax
;*********
inc eax
inc eax
;*********
rdtsc
sub eax,ecx
add esi,eax
rdtsc
mov ecx,eax
;*********
mov eax,0x2
;*********
rdtsc
sub eax,ecx
add edi,eax
mov esi,esi
mov edi,edi
jmp @B
------解决方案--------------------
mov eax,2 应该是 5 字节吧。
mov 指令立即数到寄存器,早就被设计到只需要一个操作周期了吧,所以速度上应该一个 mov 指令比两个 inc 指令要好,而且连续两个 inc 指令同样对 eax 这一个寄存器进行操作,会引起指令执行等待,不能充分发挥乱序执行优点的。
------解决方案--------------------
如果“假设 此时 EAX 已经为 0 了”,那你直接mov eax,2岂不是更好。
