Ответ 1
Вам нужно либо invoke
atoi proc с смещением памяти ascii, либо push
смещение перед call
ing atoi. Прямо сейчас esi
будет содержать только случайные значения, которые уже находятся в inputbuff
.
Я пересмотрел proc так, чтобы он успешно обрабатывал полные строки.
toparse db "12345678",0
;mov toparse,"0" ; Max is 4 bytes so define string above
push offset toparse ; |
call atoi ; - or: invoke atoi,offset toparse
...
atoi proc uses esi inputBuff:DWORD ; Generally only need to preserve esi, edi and ebx
mov esi,inputBuff
xor edx,edx
xor eax,eax ; Clear register
.Repeat
lodsb ; Get one byte
.Break .if !eax
imul edx,edx,10 ; Multiply total by 10
sub eax,"0" ; Subtract 48
add edx,eax ; Add result to the total
.Until 0
mov eax,edx ; Will result in 00BC614E (hex 12345678)
ret
atoi endp