Car*_*rum 16
是的,这就是他所说的,但它并不准确.堆栈可以被使用,但只有当你的功能有很多的参数(或者你写的强制溢出代码).
如果你查看维基百科的64位英特尔调用约定列表,你会看到寄存器用于传递前几个参数.有两种主要的64位英特尔调用约定.对于Microsoft ABI:
Microsoft x64调用约定使用寄存器RCX,RDX,R8,R9作为前四个整数或指针参数(按从左到右的顺序),XMM0,XMM1,XMM2,XMM3用于浮点参数.其他参数被压入堆栈(从右到左).如果64位或更少,则在RAX中返回整数返回值(类似于x86).浮点返回值在XMM0中返回.小于64位长的参数不是零扩展; 高位包含垃圾.
而System V ABI:
前六个整数或指针参数在寄存器RDI,RSI,RDX,RCX,R8和R9中传递,而XMM0,XMM1,XMM2,XMM3,XMM4,XMM5,XMM6和XMM7用于浮点参数...在Microsoft x64调用约定中,附加参数在堆栈上传递,返回值存储在RAX中.
| 归档时间: |
|
| 查看次数: |
8413 次 |
| 最近记录: |