Delphi XE7 64位汇编

Delphi XE7 在64位使用内嵌汇编时,不再支持内嵌语句方式,只能是过程,同时在寄存器使用上也有变化,如取CPUID的代码变成如下


type
  TCPUIDARRAY = array[1..4] of Longint;

{$IFDEF CPUX64}

function GetCPUID : TCPUIDARRAY; assembler;register;
asm
  PUSH    RBX          {Save affected register}
  PUSH    RDI
  MOV     RDI,RCX      {@Result}
  MOV     EAX,1
  CPUID
  mov    [rdi], eax;
  mov    [rdi+4], ebx;
  mov    [rdi+8], ecx;
  mov    [rdi+12], edx;
  POP     RDI     {Restore registers}
  POP     RBX
end;

{$ELSE}

function GetCPUID : TCPUIDARRAY; assembler;register;
asm
  PUSH    EBX          {Save affected register}
  PUSH    EDI
  MOV     EDI,EAX      {@Result}
  MOV     EAX,1
  DW      $A20F        {CPUID Command}
  STOSD   {CPUID[1]}
  MOV     EAX,EBX
  STOSD                {CPUID[2]}
  MOV     EAX,ECX
  STOSD                {CPUID[3]}
  MOV     EAX,EDX
  STOSD                {CPUID[4]}
  POP     EDI     {Restore registers}
  POP     EBX
end;

{$ENDIF}


另外64位下对象的函数,Self 指针是 RCX 不是 RAX





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值