汇编寄存器采用64位架构

Ref*_*ion 6 assembly x86-64 itanium cpu-registers 32bit-64bit

关于汇编寄存器的大小答案:

  • 首先,什么尺寸eax,ax,ah和同行,在64位架构?如何访问单个寄存器的字节以及如何访问所有64位寄存器的8个字节?

    我非常喜欢x86-64(x64)Itanium处理器.

  • 第二,在新的调用约定中,使用四个寄存器来保存函数调用中前四个参数的正确方法是什么?

phu*_*clv 29

使用旧名称,所有寄存器保持相同的大小.要访问64位寄存器,请使用带有R前缀的新名称,例如rax,rbx ...

寄存器名称不会改变,因此您只需使用字节寄存器(al,bl,cl,dl,ah,bh,ch,dh)作为之前的ax,bx,cx,dx的LSB和MSB.

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

同样,新寄存器的最低字或双字可以通过后缀w或来访问d.

x86_64寄存器

新的X86_64处理器寄存器的名称是什么?


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

  • 在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调用约定

这些是x86_64最基础的.你也应该读这个


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

了解更多关于x64和IA-64有什么区别?


归档时间:

查看次数:

16553 次

最近记录:

6 年,10 月 前