Your input characters are in the form of a string? If so, each character individually has to then be converted to an integer. You did not specify if each integer is an arbitrary individual digit or multiples of base 10. Is "123" just 1, 2, 3 or 123(one hundred twenty three)?
The mul instruction uses the al, ax, or eax registers and stores the result in ax, dx:ax or edx:eax (hi bits : lo bits). But more convenient is imul
: you can use it with an immediate operand and only produce an output of the same width as the input.
lea ecx,[esp+8] ;ecx points to input (647388ABC)
movzx eax, byte [ecx] ;get a single byte from ecx and move it into al
sub eax, 48 ; ASCII digit -> integer. 48 = '0'
imul eax, 5 ; result 5*6 is stored in eax
To handle letters, you'd want to branch on the sub result being <= 9 (unsigned), otherwise subtract another amount.
Extension:
Assuming eax already holds the byte we can do a branch to check if it's a character from "A" - "Z" where "A"==0 && "Z"==25 then perform the necessary operation (subtraction) to get the integer.
cmp eax,65
jl digit
cmp eax,90
jg terminate
sub eax,65
jmp operation
digit:
sub eax,48
operation:
;perform mathematical operation here
terminate:
ret