📄 testasm.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 + -