<p>Is it possible to call into COM objects via x86 assembly language? If so, how?</p>

<p>Why would I want to do this? Let's say I've got two programs that I don't have source for - all I've got are the binaries. One of them implements a COM interface, the other doesn't. I want to inject code into the first program to call into the second using this COM interface, and this requires me to use x86 assembly.</p>

Of course it's possible - in effect that's what the C/C++ compiler does.
But why in God's name would you want to do this?  If it were for educational value, then surely doing the COM stuff by hand in straight C would do the trick.
Given the updated question, I'd suggest that you write the COM stuff in a DLL and inject that DLL into the program you want to patch, then patch in simple x86 code into the program to call your DLL that does the heavy lifting.  I don't recall the techniques for injecting a DLL into the address space of a process, but there are at least a couple.  The AppInit registry setting (or something like that) is one.
However, I think that most of the avenues for injecting code into a process are considered security flaws (and have often been used by malware), so I suspect that Microsoft may have removed many if not most (or all) from more recent service packs or OS versions.