You can't, at least not directly.
call takes an address as a parameter. Even though you write "call functionName", the linker replaces functionname with the actual address of the function. You'd need to first map that string to its address. In general, C and C++ don't support any sort of runtime metadata about function name mappings that would allow for this. If the function is exported from a DLL, you can use GetProcAddress to find its address.
If the list of functions is static, you can create the mapping ahead of time yourself.
Something like:
std:map<string, PVOID> functionMappings;
functionMappings["MyFunction"] = MyFunction;
// Later
PVOID function = functionMappings["MyFunction"];
__asm
{
push a;
call [function]
}
Some notes:
I believe the standard says that a function pointer may be larger than a PVOID. This should work on Windows x86/x64 platforms.
You didn't say what calling convention you were using - this code presumes stdcall.
This is a very, very odd thing to want to accomplish - what problem are you trying to solve?