当前位置: 代码迷 >> 汇编语言 >> 有些纠结 .同样是 + 2
  详细解决方案

有些纠结 .同样是 + 2

热度:157   发布时间:2016-05-02 04:32:24.0
有点纠结 ....同样是 + 2
同样是 + 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岂不是更好。
  相关解决方案