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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

{

p[i]=(int)(k*rand()/RAND_MAX);

}

start=clock(); //开始计时

for(i=0;i

{

for(j=0;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

{

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语言语法是固定的,没办法与机器指令一一对应,所

以需要编译规则。

相关文档
最新文档