带有cmpsb的Intel x86中的strcmp

时间:2018-12-26 16:43:45

标签: assembly x86 strcmp

我想在nasm x86中编写一个strcmp。主要问题是何时必须返回负值。我尝试了以下操作,但是在许多情况下,它只会返回错误的值。

我正在从C中调用它,例如:strcmp("abc", "abd"),我希望返回int

strcmp:
push ebp
mov ebp, esp

cld

xor eax, eax
mov esi, [ebp+0x8]
mov edi, [ebp+0xc]
mov ecx, -1

strcmp_loop:
cmp byte [esi], 0
jz strcmp_end

repe cmpsb
dec esi
dec edi

strcmp_end:
mov al, byte [esi]
sub al, byte [edi]
jns strcmp_ret
neg al
neg eax
strcmp_ret:
pop ebp
ret

双精度neg将处理负值,否则将返回255而不是-1,依此类推。

0 个答案:

没有答案