I want to understand this code , after i understand the above properly
.386
.MODEL flat, stdcall
OPTION casemap :none
INCLUDE \masm32\include\masm32rt.inc
cdMaxSize EQU 11
.DATA? ;This contains uninitialized data
szNumber1 db cdMaxSize dup(?)
szNumber2 db cdMaxSize dup(?)
iNum dd ?
.DATA ;This contains initialized data
szTxtNum1 db "Your first number: ", 0
szTxtNum2 db "Your second number: ", 0
szTxtSum db "Both sum: ", 0
number1 DD 442
number2 dd 22
msg db cdMaxSize dup(0)
.CODE ;This is where your code resides
@num2str proc uses ebx edx esi
; In: eax, number value
; Out: eax, offset of value in string format
mov esi, offset msg + cdMaxSize - 1
mov ebx, 10
@Next:
dec esi
xor edx, edx
div ebx
or edx, 30h
mov byte ptr [esi], dl
or eax, eax
jnz @Next
mov eax, esi
ret
@num2str endp
str2num proc uses ebx ecx edx esi edi
; In: eax, offset to str_num
; out: eax, the number converted
mov edi, eax ; offset
mov eax, 0
mov ecx, cdMaxSize
repne scasb
jne @NoFound
sub edi, 2
sub ecx, cdMaxSize
neg ecx
mov ebx, 1 ; factor
mov esi, 0 ; Acumulative
@Next:
dec ecx
jl @Exit
xor eax, eax ; clear it
mov al, byte ptr [edi]
and al, 15 ; 2num
mul ebx
add esi, eax ; get into accumulative
mov eax, ebx ; increases factor
mov ebx, 10
mul ebx
mov ebx, eax
dec edi ; reset pointer
jmp @Next
@Exit:
mov eax, esi
@NoFound:
ret
str2num endp
start:
; Get the numbers in asciiz
invoke StdOut, offset szTxtNum1
invoke StdIn, offset szNumber1, cdMaxSize
invoke StdOut, offset szTxtNum2
invoke StdIn, offset szNumber2, cdMaxSize
; Convert to numbers and sum
mov eax, offset szNumber1
call str2num
mov ebx, eax
mov eax, offset szNumber2
call str2num
add ebx, eax
; Show the result
invoke StdOut, offset szTxtSum
mov eax, ebx
call @num2str
invoke StdOut, eax
inkey
INVOKE ExitProcess, 0
END start