strcmp в Intel x86 с cmpsb - PullRequest
       16

strcmp в Intel x86 с cmpsb

0 голосов
/ 26 декабря 2018

Я хочу закодировать strcmp в nasm x86.Основная проблема, когда он должен вернуть отрицательное значение.Я пробовал следующее, но во многих случаях он просто возвращает неправильное значение.

Я звоню из 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 и т. Д.

...