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.
关于调用约定,在特定系统上只有一个约定1.
1自MSVC 2013以来,Windows 上还有一个新的扩展约定__vectorcall.
这些是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 次 |
| 最近记录: |