有点纠结 ....同样是 + 2

黑色的233 2014-08-12 05:30:03
同样是 + 2

有两种方法 ...

假设 此时 EAX 已经为 0 了

我这样加

ADD EAX,2

虽然是一条指令 但是机器码 有 3 个字节

如果我这样加

INC EAX
INC EAX

两条指令 但是只有 两个 字节的机器码 ....

INC 寄存器 周期貌似是 1

ADD 立即数 是 2

哪种更快些 呢 ....
...全文
155 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2014-08-13
  • 打赏
  • 举报
回复
mov eax,2 应该是 5 字节吧。
mov 指令立即数到寄存器,早就被设计到只需要一个操作周期了吧,所以速度上应该一个 mov 指令比两个 inc 指令要好,而且连续两个 inc 指令同样对 eax 这一个寄存器进行操作,会引起指令执行等待,不能充分发挥乱序执行优点的。
黑色的233 2014-08-13
  • 打赏
  • 举报
回复
引用 2 楼 fhqdx0012 的回复:
首次执行时 inc eax inc eax 比 mov eax,2 快 当指令加入cpu缓存后 后面的指令就比前者快了
谢谢
黑色的233 2014-08-13
  • 打赏
  • 举报
回复
引用 3 楼 zara 的回复:
mov eax,2 应该是 5 字节吧。 mov 指令立即数到寄存器,早就被设计到只需要一个操作周期了吧,所以速度上应该一个 mov 指令比两个 inc 指令要好,而且连续两个 inc 指令同样对 eax 这一个寄存器进行操作,会引起指令执行等待,不能充分发挥乱序执行优点的。
好吧 ...
黑色的233 2014-08-13
  • 打赏
  • 举报
回复
引用 4 楼 DelphiGuy 的回复:
如果“假设 此时 EAX 已经为 0 了”,那你直接mov eax,2岂不是更好。
LPWSTR wxPath(wxString wxStr){

  static wchar_t  Src[0xF0],Des[0xF0];

       __asm CLD
       __asm XOR  EAX,EAX       
       __asm MOV  ECX,120       
	   __asm MOV  EDI,OFFSET Des
       __asm REP  STOSD        

   wcscpy(Src,wxStr.wc_str());

   __asm XOR   ECX,ECX
   __asm XOR   EDX,EDX
   __asm MOV   ESI,OFFSET Src
   __asm MOV   EDI,OFFSET Des

HD:__asm MOVZX EBX,WORD PTR[ESI + ECX*2]
   __asm TEST  EBX,EBX
   __asm JE    END
   __asm MOV   BX,WORD PTR [ESI + ECX*2]
   __asm MOV   WORD PTR[EDI + EDX*2],BX
   __asm INC   ECX
   __asm CMP   EBX,5CH
   __asm JNE   ELSEX

   __asm MOV   WORD PTR[EDI + EDX*2 + 2],BX
   __asm ADD   EDX,2
   __asm JMP   HD

   ELSEX:  	   
		   __asm INC   EDX
		   __asm JMP   HD

   END: return Des ;
}
EAX要寻址用 .. 
  • 打赏
  • 举报
回复
如果“假设 此时 EAX 已经为 0 了”,那你直接mov eax,2岂不是更好。
fhqdx0012 2014-08-12
  • 打赏
  • 举报
回复
首次执行时 inc eax inc eax 比 mov eax,2 快 当指令加入cpu缓存后 后面的指令就比前者快了
fhqdx0012 2014-08-12
  • 打赏
  • 举报
回复
比较指令效率

  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

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧