汇编寄存器采用64位架构

时间:2013-12-17 15:04:57

标签: assembly x86-64 32bit-64bit cpu-registers itanium

关注answer about assembly registers' sizes

  • 首先,在64位架构中,eaxaxah及其对应的大小是多少?如何访问单个寄存器的字节以及如何访问所有64位寄存器的8个字节?

    我很想关注 x86-64(x64) Itanium 处理器。

  • 第二,在the new calling convention的函数调用中使用四个寄存器保存前四个参数的正确方法是什么?

1 个答案:

答案 0 :(得分:26)

旧名称所有寄存器的大小保持不变。要访问64位寄存器,请使用带有R-prefix的新名称,例如rax,rbx ......

寄存器名称不会改变,所以你只需要使用字节寄存器(al,bl,cl,dl,ah,bh,ch,dh)作为之前的ax,bx,cx,dx的LSB和MSB。 / p>

还有 8个新寄存器,名为r8-r15。您可以通过添加后缀b(或l if you're using AMD)来访问其LSB。例如r8b,r9b ......您也可以使用名称sil,dil,spl,bpl和新REX prefix的esi,edi,esp,ebp的LSB,但不能同时使用它与啊,bh,ch或dh。

同样,新寄存器的最低字或双字可以通过后缀wd访问。

x86_64 registers

What are the names of the new X86_64 processors registers?


关于调用约定,在特定系统上只有只有一个约定 1

  • On Windows

    • RCX,RDX,R8,R9用于前四个整数或指针参数
    • XMM0,XMM1,XMM2,XMM3表示浮点参数

    1 自MSVC 2013起,Windows上还有一个名为__vectorcall新扩展约定

  • 在Linux和System V AMD64 ABI之后的其他系统上,可以在寄存器上传递更多参数,这可以使函数调用更快。
    • 前六个整数或指针参数在寄存器RDI,RSI,RDX,RCX,R8和R9中传递
    • 浮点参数在XMM0到XMM7
    • 中传递

x86_64 calling conventions

这些是x86_64最基础的。您还应该read this


OTOH Itanium完全不同的架构,与x86_64无关。它是纯64位架构,因此所有普通寄存器都是64位,没有32位或更小的版本。里面有很多寄存器:

  
      
  • 128个通用整数寄存器r0到r127,每个寄存器携带64个值位和一个陷阱位。我们稍后会详细了解陷阱位。
  •   
  • 128个浮点寄存器f0到f127。
  •   
  • 64个谓词寄存器p0到p63。
  •   
  • 8个分支寄存器b0到b7。
  •   
  • 一个指令指针,由于某种原因Windows调试引擎调用iip。 (额外的“我”是为了“疯狂”?)
  •   
  • 128个专用寄存器,并非所有寄存器都有意义。由于某些原因,这些被称为“应用程序寄存器”(ar)。我将在讨论期间介绍选定的注册表。
  •   
  • 我们将不会在本系列中介绍其他杂项寄存器。
  •   
     

https://blogs.msdn.microsoft.com/oldnewthing/20150727-00/?p=90821

详细了解What is the difference between x64 and IA-64?