Hi Philippe,
Converting the atou_ex function from Masm64 to Poasm64 is very easy. The two versions are almost identical.
The method to convert a string to A number is handling correctly the Base-10 number system. To get the numerical value of a simple ASCII digit, one must extract 48 from this ASCII code. For example, the ASCII code of 5 is 53. 53-48=5
To shift each digit to the left, you multiply it by 10 :
lea r11, [r11+r11*4] ; r11=5*r11
lea r11, [rax+r11*2-48] ; r11=2*r11 + rax - 48
r11+r11*4 means multiplying r11 by 5. In the second line, after multiplying r11 by 2 , r11 becomes 10*r11 compared to the initial value of this register. The rest is easy, rax holds the ASCII digit and subtracting 48 from rax provides the numerical value.
The largest value of an unsigned 64-bit integer is 2^20 = 18446744073709551616. This means that a maxinum of 20 steps is necessary to convert correctly an ASCII string to integer.
Attached is a simple example, you can examine it with x64dbg to see how the algorithm works.