手間の割に
3つ目の引数、sizeの指定において0でないという仮定ができるとすれば、for文ではなくdo〜while文を用いることでもう少し削れそうです。
上のintncmp()では
dec eax @2: mov ebx,dword ptr [ecx+4*eax] xor ebx,dword ptr [edx+4*eax] je short @3 mov eax,1 jmp short @4 @3: mov ebx,eax add eax,-1 test ebx,ebx jne short @2 xor eax,eax
こんな感じになります。先ほどは反復子iがEAX、引数sizeがESIだったのですが、今度はsizeがそのままEAXに入り、sizeが0になるまで減算していくことで配列を後ろから比較しています。
わかりにくいのでCのソースを載せます。
先ほどまでのもの
int intncmp(void *buf, void *str, int size){ int *b = (int *)buf; int *s = (int *)str; int i; size >>= 2; for(i=0;i<size;i++){ if(b[i]^s[i]){ return 1; } } return 0; }
今回のもの
int intncmp(void *buf, void *str, int size){ int *b = (int *)buf; int *s = (int *)str; size >>= 2; size--; do{ if(b[size]^s[size]){ return 1; } }while(size--); return 0; }
まあ引数1個用意する手間がどのくらいか、というレベルの話ですが。