もう少し引っ張ってみる

先日のintncmp()だのintcmp()だのは何がしたかったかというと、x86+Windowsを前提に考えると現状では32bitレジスタを使うわけで、char(8bit)同士の比較ではせっかくの32bitレジスタも下位8bitのみしか使わないので効率が悪いではないか、ということが言いたかっただけです。
BCCアセンブラ出力したものを以下に載せます。

    xor    eax,eax
    cmp    esi,eax
    jle    short @13
@12:
    mov    bl,byte ptr [ecx+eax]
    xor    bl,byte ptr [edx+eax]
    je     short @14
    mov    eax,1
    jmp    short @15
@14:
    inc    eax
    cmp    esi,eax
    jg     short @12
@13:
    xor    eax,eax

先日のintncmp()を元にchar単位で比較するプログラム(≒strncmp())よりfor文内を抜粋。

    xor    eax,eax
    cmp    edx,eax
    jle    short @6
@5:
    mov    esi,dword ptr [ecx+4*eax]
    xor    esi,dword ptr [ebx+4*eax]
    je     short @7
    mov    eax,1
    jmp    short @8
@7:
    inc    eax
    cmp    edx,eax
    jg     short @5
@6:
    xor    eax,eax

こちらはintncmp()より。
命令自体は同一なのですが、5・6行目の比較の箇所においてBLに格納されるかESIに格納されるかの違いがあります。これはBLが32bitレジスタの下位8bit、ESIは32bitレジスタそのものということになります。レジスタとかについては詳しかったり丁寧だったりするサイトも多いでしょうから適当に調べてください。