linux下嵌入汇编问题

k_summer7 2009-04-01 08:20:16
我编了一个小程序,主要是计算qsort的性能,其中嵌入了一点汇编代码,编译不通过,因为我对A&T格式的汇编指令不是很熟悉,请指教,另外,linux下支持intel格式的汇编指令吗?

代码如下:
#include<stdio.h>
#include<stdlib.h>

#define MAX_DATA (1000)
int compare(int *a, int *b)
{
if(*a<*b) return -1;
return 1;
}

int main(int argc, char *argv[])
{
int i=0;
int arr[MAX_DATA];
int s_time,e_time;

for(i=0; i<MAX_DATA; i++)
arr[i] = (int)rand();
__asm(
RTDSC
"mov %eax,s_time"
);
qsort(arr,MAX_DATA,sizeof(int),compare);
__asm(
RTDSC
"sub %eax,s_time"
"mov e_time,%eax"
);
printf("running time is %d\n",e_time);

return 0;
}
这段代码我是手动敲入的,有字符写错了什么的,请谅解,程序的思路就是这样,请问有什么问题没有,主要是汇编这一块儿。
...全文
102 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bestrem_9 2009-04-08
  • 打赏
  • 举报
回复
值得学习了。。。
sdlcgxcqx 2009-04-01
  • 打赏
  • 举报
回复
好不错学习了
独孤过儿 2009-04-01
  • 打赏
  • 举报
回复
PS:再推薦一本書,專門講AT&T彙編的,很不錯!網上能下到電子版的

Wrox.Professional.Assembly.Language.Jan.2005.ISBN0764579010
独孤过儿 2009-04-01
  • 打赏
  • 举报
回复
你的內嵌彙編有幾個問題:

1、內嵌的關鍵字寫的不對,即使不用擴展模式,也得寫成這樣__asm__ ();

2、內嵌的指令格式寫的不對

3、語法規則用的也不對

給你找了一個內嵌彙編的例子,你參考一下吧:

1 #include <stdio.h>
2
3 int main()
4 {
5 char src[30] = {"This is a test message.\n"};
6 char dst[30];
7 int len = 25;
8
9 __asm__ __volatile__(
10 "cld\n\t"
11 "rep movsb"
12 :
13 : "c"(len), "D"(dst), "S"(src)
14 );
15 printf("%s\t%d\n", dst, len);
16 return 0;
17 }

morris88 2009-04-01
  • 打赏
  • 举报
回复
看来LZ还没看过unix assembler?
xhy_851221 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fetag 的回复:]
PS:再推薦一本書,專門講AT&T彙編的,很不錯!網上能下到電子版的

Wrox.Professional.Assembly.Language.Jan.2005.ISBN0764579010
[/Quote]这个是好书
threeleafzerg007 2009-04-01
  • 打赏
  • 举报
回复
__asm(
RTDSC
"mov %eax,s_time"
);
qsort(arr,MAX_DATA,sizeof(int),compare);
__asm(
RTDSC
"sub %eax,s_time"
"mov e_time,%eax"
);

即使没有fetag大大说的那些问题,在我看来,你的程序逻辑还是可能有问题.

qsort(arr,MAX_DATA,sizeof(int),compare);
虽然你把 s_time 放入 %eax 保存起来, 但是别忘了,c/c++语言里 ,函数返回值是放在 %eax里的。
如果qsort有返回值,就可能破坏你先前保存的%eax.

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧