diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-11-22 02:35:31 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-11-22 02:35:31 +0100 |
| commit | b22183ba021d9ab3418d8f47545708597247e583 (patch) | |
| tree | 079af4d3d360a72908782abead1f4b272155bd18 /ft_strcmp.s | |
| parent | 0931febe3e178b4e484259c9cdc79ef452208ae7 (diff) | |
| download | libasm-b22183ba021d9ab3418d8f47545708597247e583.tar.gz libasm-b22183ba021d9ab3418d8f47545708597247e583.tar.bz2 libasm-b22183ba021d9ab3418d8f47545708597247e583.zip | |
strcpy, strcmp, write, read
Diffstat (limited to 'ft_strcmp.s')
| -rw-r--r-- | ft_strcmp.s | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/ft_strcmp.s b/ft_strcmp.s index 4c5aee7..216b56a 100644 --- a/ft_strcmp.s +++ b/ft_strcmp.s @@ -1,12 +1,35 @@ +.globl _ft_strcmp + _ft_strcmp: - mov eax, sp - mov ebx, sp + 8 + mov rax, rdi # s1 + mov rbx, rsi # s2 + xor rcx, rcx FT_STRCMP_LOOP: - cmp eax, 0 - jneq FT_STRCMP_LOOP - cmp ebx, 0 - jneq FT_STRCMP_LOOP - cmp eax, ebx - jeq FT_STRCMP_LOOP - sub eax, ebx + cmp byte ptr [rax + rcx], 0 + je FT_STRCMP_LOOP_END + cmp byte ptr [rbx + rcx], 0 + je FT_STRCMP_LOOP_END + mov dl, byte ptr [rax + rcx] + cmp dl, byte ptr [rbx + rcx] + jne FT_STRCMP_LOOP_END + inc rcx + jmp FT_STRCMP_LOOP + FT_STRCMP_LOOP_END: + mov dl, byte ptr [rax + rcx] + cmp dl, byte ptr [rbx + rcx] + jl FT_STRCMP_S1_LOWER + # s1 >= s2 + mov rdx, rax + xor rax, rax + mov al, [rdx + rcx] + sub al, [rbx + rcx] + ret + # s1 < s2 + FT_STRCMP_S1_LOWER: + mov rdx, rax + xor rax, rax + mov al, [rbx + rcx] + sub al, [rdx + rcx] + not eax # two's complement + inc eax ret |
