A std::array<int, 3>
is 96 bits wide on your implementation. As such the ABI declares that it should be returned in RAX + the low 32 bits of RDX (aka EDX).
4294967296 is 232, in hex it is $1'0000'0000
. So the movabs
stores 0 in the low order 32 bits of RAX, and 1 in the high order bits of RAX. The mov
stores 2 in EDX (which is exactly what you wanted).