我试图写我的第一个汇编函数从C程序中调用。 这是.c部分:
#include <stdio.h> extern int sum(int a,int b); int main() { printf("2+3 = %dn",sum(2,3)); return 0; }
和汇编部分:
.text .global sum sum: push %rbp mov %rsp,%rbp mov 8(%rbp),%rax add 12(%rbp),%rax pop %rbp ret
根据一些教程,参数应该存储在%ebp(32位版本)寄存器中。 但是,当我编译上面的代码,我得到这个结果:
2+3 = 4195607
有人能解释我在做什么错吗?
线程信息块在x64下
x86程序集,没有被遵循的小序列号(或者是?)(linux)
linux 64位上下文切换
x86程序参数的位置
如何在汇编中正确调用64位windows API
哦,这里是Makefile:
test: test.o testc.o gcc -o test test.o testc.o test.o: f1.s gcc -o test.o -c f1.s testc.o: f2.c gcc -c -o test.o f2.c
提前感谢您的任何提示!
问候,菲利普
“assembly炼狱”会发生什么?
ASM调用Printf
如何使用节上的fixups属性?
我如何分解原始的MIPS代码?
调用静态链接函数崩溃每次在windows 8/10而不是7
总结以上是内存溢出为你收集整理的从C传递参数到64位Linux大会全部内容,希望文章能够帮你解决从C传递参数到64位Linux大会所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)