Not so much "Can't" but "Doesn't".
Examples:
Divide capturing both the quotient and the remainder in registers.
Move capturing both the next destination address and the next source address in registers.
Swaping the contents of some memory location with the Accumulator or top of the stack.
You could easily invent syntaxes for each of these, but they would end up looking a great deal like assembly language.
Virtually every processor that has a divide instruction has both the quotient and remainder available at one go, but it is hard to do this efficiently without resorting to assembly language (either directly or indirectly).
most of these could be handled either by functions or by compiler
intrinsics (which in turn look like functions).
the problem here is that often many such intrinsics in turn depend on:
which compiler is in use;
the target architecture;
the operating mode and compiler flags of said architecture;
....
this in turn often makes using compiler intrinsics nearly as dangerous
(portability-wise) as using ASM, although it is often still a little
cleaner than resorting to either raw ASM or inline ASM.
an alternative would be requiring the intrinsics to always be available
(even if they would need to be emulated), but this is much less commonly
done.
a major example of these sorts of intrinsics being the vector/SIMD
extensions for MSVC and GCC, ...
IMO, it is "cleaner" to create a higher-level wrapper interface, which
may in turn either use intrinsics if available, or revert to good old
"normal logic code" otherwise.
for example, a wrapper can be written for doing vector and matrix math,
which may used SIMD, or may just revert to scalar operations, depending
on the availability of SIMD intrinsics.