内嵌汇编出错,求助
调试了一个中午,真的很郁闷,不知道哪里出错了,执行完第一条指令后,就直接退出汇编了....
- int main(void)
- {
- int m,n,sum = 0;
- printf("input two integer:\n");
- scanf("%d%d",&m,&n);
- if ( m != 0 && n != 0 ) {
- /*
- while(m != 0) {
- if ( m & 1 )
- sum += n;
- m = m >> 1;
- n = n << 1;
- }
- */
- __asm__("movl $0,%%eax\n"
- "1:\tcmpl $0,%1\n\t"
- "je 3f\n\t"
- "andl $1,%1\n\t"
- "cmpl $1,%1\n\t"
- "jne 2f\n\t"
- "addl %2,%0\n"
- "2:\t sar $1,%1\n\t"
- "sal $1,%2\n\t"
- "jmp 1b\n"
- "3:"
- :"=a"(sum)
- :"b"(m),"c"(n));
- }
- printf("%d * %d = %d\n",m,n,sum);
- return 0;
- }
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
复制代码
"addl %2, %0\n\t"
两个都是内存操作数。
%2是"g"(n), 是寄存器
You are righit
我开始的时候用一个比较老版本的gcc编译不通过,用新的编译就可以通过了
[ 本帖最后由 cjaizss 于 2007-4-10 17:17 编辑 ]
gcc 的嵌入汇编语法虽然灵活,但有时候让人有点迷糊,呵
谢谢
http://bbs.chinaunix.net/viewthread.php?tid=921511&page=1&extra=page%3D3#pid6666220
在我的 blog 里有一篇讲述 ALU 乘法的文章, 可以看看:
http://blog.chinaunix.net/u/11773/showart.php?id=192721
.