当前位置:文档之家› C与汇编程序运行时间比较

C与汇编程序运行时间比较

C与汇编程序运行时间比较
1. 程序简介
分别采用C语言和汇编语言多次对大量数据进行冒泡排序,比较并分析在数据量不同时二者所用时间的不同。

2. 流程图
3. 代码实现
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#include"stdafx.h"
//void srand (unsigned int seed);
void bubble(int * d, long num);
void *malloc(unsigned int size);
void free(void *p);
int main()
{
double t=0.00;
int k,i,j,temp;
int* p;
clock_t start=0,end=0;
printf("要求数组的大小:\n");
scanf("%d",&k);
p=(int*)malloc(k*sizeof(int));
srand((int)time(0));
for(i=0;i<k;i++) //生成随机数组
{
p[i]=(int)(k*rand()/RAND_MAX);
}
start=clock(); //开始计时
for(i=0;i<k;i++) //冒泡排序
{
for(j=0;j<k-i;j++)
{
if(p[j]>p[j+1])
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
end=clock();
t=(double)(end-start)*1000.00/CLOCK_PER_SEC;
printf("在C语言中%d个数据冒泡排序共耗时%lf毫秒\n",k,t);
//汇编语言中的冒泡排序
for(i=0;i<k;i++) //重新生成随机数组
{
p[i]=(int)(k*rand()/RAND_MAX);
}
start=clock(); //开始计时
bubble(p,k);
end=clock();
t=(double)(end-start)*1000.00/CLOCK_PER_SEC;
printf("在汇编语言中%d个数据冒泡排序共耗时%lf毫秒\n",k,t);
free(p);
return 0;
}
void bubble(int* d, long num)//冒泡排序
{
long temp; // 定义局部变量,用于返回值
__asm { // 嵌入式汇编代码部分
start: mov ebx,d ; EBX=数组地址
mov ecx,num ; ECX=数据个数
dec ecx
xor edx,edx ; 计数器清零
lp1: MOV eax,[ebx+edx*4] ; 将前一个数放入eax
CMP eax,[ebx+(edx+1)*4] ; 与下一个数据比较
jge lp2 ; 如果前一个数小于或等于后一个数则继续本轮的比较
XCHG eax,[ebx+(edx+1)*4]; 否则交换两个数据
mov [ebx+edx*4]
lp2: inc edx ;将要比较的数组向后移动一位
cmp edx,num
jge lp1 ;如果移动到数组尾则跳出循环
lp3: dec ecx
xor edx,edx
jne lp1
}
}
4. 程序运行结果比较
(1). 一次运行结果截图;
5.心得与体会
由本次实验可以看出汇编语言编写的程序要比C语言编写的程序运行时间短。

因为汇编语言与机器语言是一一对应的,编译成CPU可执行的机器语言只需要一个翻译的动作就好。

而C语言语法是固定的,没办法与机器指令一一对应,所
以需要编译规则。

相关主题