注册 登录
编程论坛 汇编论坛

ubuntu的at&t汇编--gas无法使用识别mmx寄存器

xuzejia_love 发布于 2011-04-21 00:03, 1211 次点击
# mmxtest.s - An example of using mmx data types
    .section .data
    values1:
    .int 1,-1
    values2:
    .byte 0x10,0x05,0x32,0x47,0xe4,0x00,0x01
    .section .text
    .globl _start
_start:
    nop
    movq values1,%mmx0
    movq values2,%mmx1
    movl $1,%eax
    movl $0,%ebx
    int $0x80


代码保存为“mmxtest.s“,以上代码用:as -gstabs -o mmxtest.o mmxtest.s后,显示了以下错误:

mmxtest.s: Assembler messages:
mmxtest.s:11: Error: bad register name `%mmx0'
mmxtest.s:12: Error: bad register name `%mmx1'


这跟cpu有关吗?我的cpu是amd 245,应该也是支持mmx指令的吧。
上网百度了一下,都是英文的资料,看不懂啊~_~
赐教,谢。


[ 本帖最后由 xuzejia_love 于 2011-4-23 15:54 编辑 ]
8 回复
#2
zklhp2011-04-21 08:32
masm的话是要加.mmx一类的东西告诉编译器 as就不懂了

话说 这个 as 和 gdb 有嘛关系呢? 到底是gdb不支持mmx还是as不支持?
#3
xuzejia_love2011-04-21 12:39
回复 2楼 zklhp
as就是gas,和gdb是linux中的搭配,一个是编译,一个是调试的。
masm用mmx寄存器要告诉编译器的吗?那要怎么告诉?不知道可不可以类推。
我是按照书上给的代码调试的,它也没有说要告诉gas编译器使用mmx寄存器。
#4
zklhp2011-04-21 13:19
以下是引用xuzejia_love在2011-4-21 12:39:17的发言:

as就是gas,和gdb是linux中的搭配,一个是编译,一个是调试的。
masm用mmx寄存器要告诉编译器的吗?那要怎么告诉?不知道可不可以类推。
我是按照书上给的代码调试的,它也没有说要告诉gas编译器使用mmx寄存器。

对啊 但我看你的表述却理解成了“gdb不支持mmx” 但你的例子给的是没法编译的错误。。。

masm是加.mmx 肯定有文档说这个事 看英文文档也是基本功啊。。
#5
xuzejia_love2011-04-21 23:45
回复 4楼 zklhp
呵呵,确实写错了。
#6
Alar302011-04-22 13:07
Linux下的吧
貌似还没玩过的说
有时间玩一下Linux哈
#7
你们都要疼我哦2011-04-22 13:41
这个是真不会
#8
xuzejia_love2011-04-23 23:53
我查到了,gas引用mmx寄存器是要这个:%xmm0到%xmm7,难怪会出现bad register的现象了。

[ 本帖最后由 xuzejia_love 于 2011-4-23 15:58 编辑 ]
#9
xuzejia_love2011-04-25 22:21
回复 8楼 xuzejia_love
不好意思,纠正一下,使用mmx寄存器应该是这样的:%mm0至%mm7,%xmm0至%xmm7是xmm寄存器,两者不一样的。
1