X86和ARM函数调用中参数传递和返回值
arm属于RISC指令集,而x86则是CISC指令集的代表,编译器生成的结果比较有代表性。其中,参数传递和返回值是汇编/C混合编程比较关注的部分,尤其是在bootloader中编程中非常重要。总的来说,RISC倾向于寄存器穿参数,而x86则是通过堆栈传参数。而返回值则都通过效率最高的寄存器完成,arm中是r0,x86是eax。 以下的示例是通过写一个简单例子,并且反编译objdump来看生成的汇编来了解这些机制,呵呵,比较实验化,可是也只能这样了,编译技术也不是那么简单就能理解得了的。注意,这样,编译选项影响就可能比较大,我的实验仅局限在加/减-O选项,而其他的比较细节的就无能为力了。不过,这个方法对我理解参数和返回值这点来说,还是比较有效的。
返回值: 1) X86采用eax作为返回值。 return i; 2d: 89 c0 mov
转载请注明原文地址: https://ju.6miu.com/read-600087.html