ホームに戻る
実行時間の測定
;
; アセンブラ
;
segment .code USE32
global _s
_s: resb 8
global _mmx
_mmx:
push ebp
mov ebp, esp
mov edx, [ebp+8]
mov dword [_s], 0x00000000
mov dword [_s + 4], 0x00000000
movq mm0, [_s]
xor eax, eax
@1:
movq [edx + eax*8], mm0
inc eax
cmp eax, 8
jl short @1
emms
leave
ret
__end__mmx
/*
* C言語
*/
#include <stdio.h>
#include <time.h>
extern void mmx(char *p);
int main()
{
int i;
unsigned char p[8 * 8];
clock_t start, end;
start = clock();
for(i = 0; i < 1000000; i++){
mmx(p);
}
end = clock();
printf("\n\n%.2f秒かかりました\n", (double)(end-start)/CLOCKS_PER_SEC);
printf("\n");
for(i = 0; i < 8; i++){
printf("%02d\n", p[i]);
}
return 0;
}
このプログラムについて
mmx 関数は8×8バイトのバッファに 0 を埋める。
一度に8バイトのコピーができるので mmx 関数内のループは8回。
mmx 関数は100万回のループで実行されその時間を表示します。
mov で _s に 0x00000000 を代入する処理は、
最初から入れておけば手間が要らないし効率も良いのですが、
サンプルなのであえてこういうかたちにしてみました。