⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testasm.cpp

📁 利用嵌入式汇编来统计流水工作方式和非流水工作方式的的时间效率C++源码。
💻 CPP
字号:
#include <time.h>
#include <stdio.h>
#include <iostream.h>
#include <windows.h>
#include <stdlib.h>

void main(void)
{
	LARGE_INTEGER litmp1,litmp2;
	long  QPart1,QPart2;
	double dfMinus,dfFreq,dfTim1,dfTim2;
	
	QueryPerformanceFrequency(&litmp1);
	dfFreq=litmp1.QuadPart;
	QueryPerformanceCounter(&litmp1);
	QPart1=(double)litmp1.QuadPart;

	_asm{
				mov edi,100000			
			cir:
				mov eax,5
				mov ebx,4   //这里也要最佳匹配,因为这是mul和add精简后的最佳结果 
				xor ecx,ecx
				mov ecx,2500
			next:	
				mul ebx
				add eax,5
				adc edx,0
				loop next
				dec edi
				cmp edi,0
				jnz cir
		}
	//添加需测试的代码 	
    
	QueryPerformanceCounter(&litmp1);
	QPart2=litmp1.QuadPart;
	dfMinus=(double)(QPart2-QPart1);
	dfTim1=dfMinus/dfFreq;
    printf("直接循环所用时间为:%f\n",dfTim1);
	
	_asm{
			xor eax,eax
			xor ebx,ebx
			xor ecx,ecx
			xor edx,edx
			xor edi,edi
		}
/*----------------------流水工作--------------------------*/ 
    QueryPerformanceFrequency(&litmp1);
	dfFreq=litmp1.QuadPart;
	QueryPerformanceCounter(&litmp1);
	QPart1=(double)litmp1.QuadPart;
	
	_asm{
 				mov edi,100000
			cirt:    
				mov eax,5
				xor ecx,ecx
				mov ecx,2500
			last:	
   				add eax,eax	
				add eax,eax	
				add eax,eax	
				add eax,eax	
				add eax,5
				adc edx,0
				loop last
				dec edi
				cmp edi,0
				jnz cirt
		} 
   
    QueryPerformanceCounter(&litmp1);
	QPart2=litmp1.QuadPart;
	dfMinus=(double)(QPart2-QPart1);
	dfTim2=dfMinus/dfFreq;
    printf("流水工作所用时间为:%f\n",dfTim2);
    printf("两次时间之差为:%f\n",dfTim1-dfTim2);
    getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -