PROWAREtech
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
![](/img/wait2.gif)
x64 Assembly: atoi Procedure
ASCII string to int - Convert strings to numbers using x86-64 (64-bit) assembly.
This code has been compiled and tested on Visual Studio 2022.
Use the atoi_asm_x64
procedure to convert a C-string to a 64-bit long long (ASCII to int).
TITLE 'extern "C" long long atoi_asm_x64(const char *sz);'
PUBLIC atoi_asm_x64
_TEXT SEGMENT
atoi_asm_x64 PROC
label1:
; skip white space
mov al, BYTE PTR [rcx]
cmp al, 32 ; ' '
je SHORT label2
cmp al, 9 ; '\t'
je SHORT label2
cmp al, 13 ; '\r'
je SHORT label2
cmp al, 10 ; '\n'
jne SHORT label3
label2:
inc rcx
jmp SHORT label1
label3:
xor rdx, rdx
mov dl, BYTE PTR [rcx]
inc rcx
cmp dl, 45 ; '-'
mov r8b, dl
je SHORT label4
cmp dl, 43 ; '+'
jne SHORT label5
label4:
xor rdx, rdx
mov cl, BYTE PTR [rcx]
inc rcx
label5:
xor rax, rax
cmp dl, 48 ; '0'
jl SHORT label7
label6:
cmp dl, 57 ; '9'
jg SHORT label7
lea rax, DWORD PTR [rax+rax*4]
lea rax, DWORD PTR [rdx+rax*2-48]
xor rdx, rdx
mov dl, BYTE PTR [rcx]
inc rcx
cmp dl, 48 ; '0'
jge SHORT label6
label7:
cmp r8b, 45 ; '-'
jne SHORT label8
neg rax
label8:
ret 0
atoi_asm_x64 ENDP
_TEXT ENDS
END
Comment![](/img/comment-white.svg)