当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 18:14 

注册: 2012-01-23 17:59
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
小弟使用makefile编译C/C++源文件,有一二个文件中有内联汇编的东西,使用的是_asm__volatile_(...),
比如,_asm__volatile(..."movsd (%%esi),%%xmm1\n\t"),
但使用gcc和g++编译链接时出现“unknown register name '%xmm1' in asm的错误。

另外,我的处理器是INTEL 酷睿双核U7600(好像是支持SSE和SSE2指令集的),操作系统是基于ubuntu的deepin 10.16.

我在网上搜不到这方面的错误,所以向各位大侠请教,是还要安装什么软件吗?

多谢各位了。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 18:28 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
额,我写了个试验了,没报错额。
代码:
int main ()
{
    __asm__ __volatile__ ("movsd (%esi),%xmm1");
    return 0;
}


gcc 4.6.2,64位arch


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 21:36 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
gcc 4.6.2,32bit arch 表示可以编译,运行段错误,代码复制LS


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 21:39 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
引用:
_asm__volatile(..."movsd (%%esi),%%xmm1\n\t"),

我知道了!红色处应该是一个%!
引用:
__asm__ volatile(..."movsd (%esi),%xmm1\n\t"),


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 22:06 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
cjxgm 写道:
引用:
_asm__volatile(..."movsd (%%esi),%%xmm1\n\t"),

我知道了!红色处应该是一个%!
引用:
__asm__ volatile(..."movsd (%esi),%xmm1\n\t"),


扩展格式确实是俩“%”:
代码:
int main ()
{
    __asm__ __volatile__ ("movsd (%%esi),%%xmm1":::"%esi","%xmm1");
    return 0;
}


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 22:48 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
LZ 好像没有用扩展格式?


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 22:51 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
我以为他是省略...


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 关于C/C++内联汇编的xmm寄存器不能识别的问题。
帖子发表于 : 2012-01-23 22:54 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
引用:
If you refer to a particular hardware register from the assembler code, you will probably have to list the register after the third colon to tell the compiler the register's value is modified. In some assemblers, the register names begin with `%'; to produce one `%' in the assembler code, you must write `%%' in the input.

似乎……the input指的是第二个冒号后面的东西?


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 0 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译