当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于内联汇编的问题
帖子发表于 : 2007-09-07 23:35 

注册: 2007-09-07 3:08
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
我刚上手Linux 请问 在 gcc或 g++中怎么用intel汇编而不是AT&T
我还是比较喜欢intel汇编,AT&T看起来就麻烦,请问gcc或g++能用
intel汇编吗?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-09-07 23:47 

注册: 2007-03-25 1:18
帖子: 101
送出感谢: 0 次
接收感谢: 0 次
貌似不可以吧,__asm__内嵌的最后是由gcc传给gas处理。而gas功能不是很强,只能接受at&t语法。
不过你可以尝试用用nasm,和intel汇编格式很像

ps:linux下还是熟悉at&t语法的比较好,毕竟gdb之类的调试器也是at&t语法


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-09-08 0:21 

注册: 2007-09-07 3:08
帖子: 38
送出感谢: 0 次
接收感谢: 0 次
可以 我刚才搜到了些资料.
写了个入门的程序.

代码:
#include <iostream>
#include <string>

const char *hllx = "hello linux!\n";

char *   inttostr(int , char*);
void   add(int *a, const int b);

int   main()
{
   printf(hllx);
   char s[128];
   std::cin>>s;
   strcat(s, "\r\n");
   printf(s, "\r\n");
   int i = 5;
   add(&i, 3);
   strcpy(s, "5 + 3 = ");
   inttostr(i, &s[strlen(s)]);
   //sprintf(s, "5 + 3 = %d\r\n", i);
   strcat(s, "\r\n");
   printf(s);
   return 0;
}

char *   inttostr(int , char*)
{
   asm
   (
      ".intel_syntax noprefix\n" //此句说明使用intel汇编
      "push   ebx\n"
      "push   edi\n"
      "mov   eax, dword ptr [ebp + 0x08]\n"
      "mov   ebx, 0x0A\n"
      "xor   edi, edi\n"
      "cmp   eax, 0\n"
      "jge   pushup\n"
      "neg   eax\n"
   "pushup:\n"
      "cdq\n"
      "idiv   ebx\n"
      "add   edx, 0x30\n"
      "push   edx\n"
      "inc   edi\n"
      "test   eax, eax\n"
      "jnz   pushup\n"
      "mov   eax, dword ptr [ebp + 0x08]\n"
      "mov   ebx, dword ptr [ebp + 0x0C]\n"
      "cmp   eax, 0\n"
      "jge   popback\n"
      "mov   byte ptr [ebx], '-'\n"
      "inc   ebx\n"
   "popback:\n"
      "pop   eax\n"
      "mov   byte ptr [ebx], al\n"
      "inc   ebx\n"
      "dec   edi\n"
      "jnz   popback\n"
      "mov   byte ptr [ebx], 0\n"
      "pop   edi\n"
      "pop   ebx\n"
      "mov   eax, dword ptr [ebp + 0x0C]\n"
   );
   asm (".att_syntax noprefix");//最后还要把汇编方式调会去 要不以后的代码就全按照intel汇编来了,编译不过去
}

void   add(int *a, const int b)
{
   *a += b;
}


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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