我想在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
,依此类推。