diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-11-22 05:21:31 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-11-22 05:21:31 +0100 |
| commit | ef74d8b236ba8c62ddb190ce64ea3d8b593ad1eb (patch) | |
| tree | 6bc540d8a1c0dd1b8a086824e00a5332f83e6081 /ft_atoi_base.s | |
| parent | a917ec555ef8419bf638d6b8f87c965dff96e9e1 (diff) | |
| download | libasm-ef74d8b236ba8c62ddb190ce64ea3d8b593ad1eb.tar.gz libasm-ef74d8b236ba8c62ddb190ce64ea3d8b593ad1eb.tar.bz2 libasm-ef74d8b236ba8c62ddb190ce64ea3d8b593ad1eb.zip | |
ft_atoi_base.s without the negative and base part
Diffstat (limited to 'ft_atoi_base.s')
| -rw-r--r-- | ft_atoi_base.s | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/ft_atoi_base.s b/ft_atoi_base.s new file mode 100644 index 0000000..bc675af --- /dev/null +++ b/ft_atoi_base.s @@ -0,0 +1,58 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# ft_atoi_base.s :+: :+: :+: # +# +:+ +:+ +:+ # +# By: cacharle <marvin@42.fr> +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2019/11/22 03:59:15 by cacharle #+# #+# # +# Updated: 2019/11/22 05:20:12 by cacharle ### ########.fr # +# # +# **************************************************************************** # + +.globl _ft_atoi_base + +_ft_atoi_base: + mov rbx, rdi # rbx = str + mov rcx, rsi # rcx = base + + xor rdx, rdx # rdx = 0 + + # remove spaces + FT_ATOI_BASE_SPACE_LOOP: + cmp byte ptr [rbx], 20h # if space jump next + je NEXT + + mov dl, byte ptr [rbx] # if \t\n\r\v\f jump next + sub dl, 9h + cmp dl, 5h + jl NEXT + + jmp FT_ATOI_BASE_SPACE_LOOP_END # if all above false end loop + NEXT: # next iteration + inc rbx + jmp FT_ATOI_BASE_SPACE_LOOP + FT_ATOI_BASE_SPACE_LOOP_END: + + xor rax, rax # rax = 0 + xor rdx, rdx # rdx = 0 + + FT_ATOI_BASE_LOOP: + # while isdigit + cmp byte ptr [rbx], 30h + jl FT_ATOI_BASE_END # if *rbx < '0' jmp end + cmp byte ptr [rbx], 39h + ja FT_ATOI_BASE_END # if *rbx > '9' jmp end + + imul eax, 10 # eax *= 10 + # dl = *str & 0x0F + mov dl, byte ptr [rbx] + and dl, 0x0F + add eax, edx # eax += dl (digit) + inc rbx # next char + jmp FT_ATOI_BASE_LOOP + + FT_ATOI_BASE_END: + ret + + |
