インラインアセンブラの関数

__declspec( naked )
void __fastcall memcpy_test( void* dst, const void* src, size_t nsize )
{
    mov [esp-4], edi
    mov [esp-8], esi
    mov edi, ecx // dst
    mov esi, edx // src
    mov ecx, [esp+4] // nsize
    cld
    rep movsb
    mov esi, [esp-8]
    mov edi, [esp-4]
    ret 4
}

上記簡易memcpy関数は大抵の場合は問題なく動いたが、割り込みが入るプログラムではスタックが書き換わり、保存したedi、esiの内容が不定となった

    push edi
    push esi
    ;
    pop esi
    pop edi

もしくは

    sub esp, 8
    mov [esp], edi
    mov [esp+4], esi
    ;
    mov esi, [esp+4]
    mov edi, [esp]
    add esp, 8

とespをキチンと指定する
MMXやSSEレジスタを使う場合も元の値に復元してやる
フラグレジスタは・・・とりあえず未定