Convert string to int. x86 32 bit Assembler using Nasm

Each character is only a single byte, but you probably want to add it to a larger result. Might as well go for 32 bits… (can hobble your routine to 16 bits if you really want to)

mov edx, num3entered ; our string
atoi:
xor eax, eax ; zero a "result so far"
.top:
movzx ecx, byte [edx] ; get a character
inc edx ; ready for next one
cmp ecx, '0' ; valid?
jb .done
cmp ecx, '9'
ja .done
sub ecx, '0' ; "convert" character to number
imul eax, 10 ; multiply "result so far" by ten
add eax, ecx ; add in current digit
jmp .top ; until done
.done:
ret

That’s off the top of my head and may have errors, but “something like that”. It’ll stop at the end of a zero-terminated string, or a linefeed-terminated string… or any invalid character (which you may not want). Modify to suit.

Leave a Comment