【发布时间】:2015-05-08 18:26:07
【问题描述】:
我正在尝试将 c 代码与 asm 接口。 但它无法正常工作,我无法找到问题。
program.c
#include<stdio.h>
int *asm_multi(int *ptr);
int main()
{
int i=10;
int *p=&i;
asm_multi(p);
printf("%d\n",*p);
return 0;
}
code.asm
.section .text
.global asm_multi
.type asm_multi,@function
asm_multi:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
movl %eax,%edx
leal (%edx,%edx,1),%edx
movl %edx,%eax
movl %ebp,%esp
popl %ebp
ret
我正在创建最终的可执行文件
as code.asm -o code.o
gcc program.c code.o -o output
./output
它打印的输出是:10 而我期望的是:20
代码有什么问题?不考虑程序的效率。我刚开始asm编程。
我在阅读了保存在this link 的一个更复杂的示例后创建了上面的代码。这非常有效。
【问题讨论】:
-
无关,如果你刚开始 asm 编程并且了解 C,花时间倾注通过打开 asm 生成 (
-S) 的 C 编译器发送的 simple 函数各种优化(包括没有)可以非常提供信息,我强烈鼓励它。该函数将是该技术的优秀候选者。 -
@WhozCraig:这真的很有帮助:)