_FSOME$$INTEGER:
push ebp
mov ebp, esp
sub esp, 4
mov eax, dword [ebp + 8]
mov dword [ebp - 4], eax
L1:
mov eax, dword [ebp - 4]
mov esp, ebp
pop ebp
ret 4
_PSOME$$INTEGER$INTEGER:
push ebp
mov ebp, esp
mov eax, dword [ebp + 12]
mov edx, dword [ebp + 8]
mov dword [eax], edx
L2:
mov esp, ebp
pop ebp
ret 8
_main:
mov dword [_A], 5
push dword [_A]
call _FSOME$$INTEGER
mov dword [_B], eax
push offset [_B]
push dword [_A]
call _PSOME$$INTEGER$INTEGER
call exit
Если посчитаете количество команд то увидите что при использовании функции выполняется на 2 команды больше, чем в процедурном варианте. Уверен что на других компиляторах, с различными настройками оптимизации можно увидеть совсем другой результат.
А по делу используйте функции когда вам надо вернуть одно значение, а вариант с процедурой когда нужно вернуть несколько значений.