C与汇编程序运行时间比较
- 格式:docx
- 大小:229.01 KB
- 文档页数:4
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语言语法是固定的,没办法与机器指令一一对应,所 以需要编译规则。