从gcc2.9到5.3的不同汇编指令

您所在的位置:网站首页 汇编compare指令 从gcc2.9到5.3的不同汇编指令

从gcc2.9到5.3的不同汇编指令

2023-03-16 08:24| 来源: 网络整理| 查看: 265

我有以下C代码:

#include void function(int a, int b, int c) { int buff_1[5]; int buff_2[10]; buff_1[0] = 6; buff_2[0] = 'A'; buff_2[1] = 'B'; } int main(void) { int i = 1; function(1,2,3); return 0; }

现在我想分析相关的汇编代码:函数调用前的汇编指令,根据我正在阅读的书是:

pushl $3 pushl $2 pushl $1 call function

底层对象文件是使用创建的gcc-5.3 -O0 -c functions.c.但是,如果我使用I创建汇编代码,请objdump获取以下说明:

movl $3, %edx movl $2, %esi movl $1, %edi

据我所知,汇编(我对它很新)第一个对我更有意义.

这本书完全错了吗?或者书籍输出因使用而过时gcc 2.9

1> John Bode..:

这本书已经过时了64位x86.每个维基百科的x86-64调用约定是:

System V AMD64 ABI System V AMD64 ABI

的调用约定遵循Solaris,Linux,FreeBSD,OS X和其他类UNIX或POSIX兼容的操作系统.前六个整数或指针参数在寄存器RDI,RSI,RDX,RCX(Linux内核接口中的R10),R8和R9中传递,而使用XMM0,XMM1,XMM2,XMM3,XMM4,XMM5,XMM6和XMM7对于某些浮点参数.与Microsoft x64调用约定一样,在堆栈上传递其他参数,返回值存储在RAX中.

因为你传递的32位值,GCC使用每个寄存器的下半部分,因此%edi,%esi和%edx.

@MargaretBloom:得了.我通常不会在这个级别工作,所以我不知道所有的细微差别.如果您认为有必要,请随时编辑答案.


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3