testasm.cpp
来自「利用嵌入式汇编来统计流水工作方式和非流水工作方式的的时间效率C++源码。」· C++ 代码 · 共 82 行
CPP
82 行
#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 + =
减小字号Ctrl + -
显示快捷键?