您当前的位置: 首页 > 

[原创]gcc内联汇编语法的一个缺陷

发布时间:2008-06-03 17:19:00 ,浏览量:0

首先要说的是,这个所谓的"缺陷"可能早已有官方的处理办法,可能我还不知 道罢了-_-b,如果哪位知道请告知,感谢! gcc的at&t 中关于间接寻址的语法和intel语法有些不同,比如: intel:        mov [offset str + ebx * 4 + 20],011223344h at&t:         movl $0x11223344,20[str,ebx,4] 注意在这里at&t语法有个例外,即一般的在at&t中立即数前要加字符$,比如上面 的$0x11223344,但在disp和scale中的立即数中一定不能加$! 就是条给了gcc中的嵌入汇编带来点小麻烦。对于(i)(4)类型的输入形变量,会 在生成的asm中加上一个$,即变成$4。这在一般的情形是对的,但在上面 谈到的情况下就会导致错误。 还是采用变通的方法吧:     char str[BUFSIZE]={0};     int index=100,scale=4;         //sim movl $0x11223344,disp(base,index,scale)     __asm__ __volatile__("addl %0,%1;"                         "addl %2,%1;"                         "movl $0x11223344,(%1)"                         ::"i"(11)/*disp*/,"D"(str)/*base*/,"b"(index*scale)/                         /*sim index,scale*/);
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0485s