在x86中,指令后缀必须与所使用的寄存器匹配(更具体地说是寄存器的哪一部分)。从计算机系统的角度来看,程序员的观点是“寄存器的大小必须与指令的最后一个字符(“ b”,“ w”,“ l”或“ q”)指定的大小相匹配”。我知道说明,例如
movl (%eax), %rbx
和
movl $55, %rdx
是错误的,因为后缀与使用的寄存器不匹配(在第一种情况下,“ l”和%rbx不匹配,而在第二种情况下“ l”和%rdx不匹配)。但是,当有两个寄存器(两个操作数都是寄存器)时,您如何推理该要求呢?是否类似于“两个寄存器大小必须匹配”?我知道这听起来可能很愚蠢。
当指定为操作数的寄存器的大小小于后缀指定的大小时,是否也违反规定?因此movq $77, %eax
是错误/非法吗?