Assembly疑问:mov支持64位立即数入寄存器为何无法直接写入内存?
64位立即数无法直接写入内存的逻辑澄清
首先需要补全原回答省略的x86-64指令集编码核心规则:
- x86-64架构下,仅
mov reg64, imm64这一条指令支持64位长度的立即数作为操作数,其余所有包含立即数的指令,包括所有目标操作数为内存的mov指令,立即数的最大长度仅为32位。 - 实例验证:你可以正常汇编执行
mov rax, 0x1122334455667788这条指令,但如果直接写mov qword ptr [rsp], 0x1122334455667788,汇编器会直接报错,因为目标为内存的mov指令不支持传入64位立即数,最多只能接受32位立即数做符号/零扩展后写入内存。
原回答的逻辑省略了关键限定条件,完整的因果链应该是:
mov reg64, imm64是唯一支持64位立即数的指令,且该指令的目标操作数只能是寄存器,不能是内存 → 不存在任何目标为内存且支持64位立即数的mov指令 → 无法直接将64位立即数写入内存,必须先写入寄存器再中转到内存。
你觉得表述矛盾,是因为原回答没有明确说明「支持64位立即数的这条mov指令,只能操作寄存器,不能操作内存」这个核心限定,补全后因果关系就成立了。
内容的提问来源于stack exchange,提问作者algo
相关产品推荐
相关产品推荐

