I have read the information at the MSDN site on 64-bit software conventions, but
can't figure out what is Microsoft-specific, or VC++-specific, or Windows-
specific, vs. x64 in general. Here is the site link:
http://msdn.microsoft.com/en-us/library/tawsa7cb.aspx
In particular, passages like the following make me nervous:
"Every function that allocates stack space, calls other functions, saves
nonvolatile registers, or uses exception handling must have a prolog whose
address limits are described in the unwind data associated with the respective
function table entry (see Exception Handling (x64)). The prolog saves argument
registers in their home addresses if required, pushes nonvolatile registers on
the stack, allocates the fixed part of the stack for locals and temporaries, and
optionally establishes a frame pointer. The associated unwind data must describe
the action of the prolog and must provide the information necessary to undo the
effect of the prolog code."
I thought one of the things that was lucrative about assembly language is that
you can create your own calling conventions if you wanted to and not be limited
to cdecl, stdcall, and the like.
I was feeling all warm and fuzzy having developed some facility this past year
in using assembly language and then I read that! Argh! Can I still write
assembly language code pretty much like I am able to on x32, on x64? Is all the
crap about unwinding and such only if I am developing a program which includes
SEH or linked with C++ object code which used it? Am I to believe from the above
that ALL x64 code must implement all that unwind machinery and such?
On another site, I found a threaded discussion on table-based vs. frame-based
exception handling, and they seemed to be discussing it like that's the way
assembly language software is now built, rather than being a choice on the
Windows platform.
Finally, I have read some assembler documentation (NASM or YASM, I forgot which)
and they have the ability in that assembler to generate table-based EH data,
etc.
All the above have me worried that I'm becoming locked-out of the x64 platform
or even "just" the important Windows environment. Can someone begin to clear
this all up for me? I'll have more questions for sure.