You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Intel x86_64架构64位模式下push r16指令编码正确性咨询

x86_64 64位模式下push指令相关疑问解析

push word register (r16) 编码错误说明

你指出的Intel联合手册(2023年6月版,订单号325462-080US,第2D卷附录B,B-28页表B-15)中将push word register编码为0x55是明显错误的:

  • 0x55是固定对应push rbp的单字节指令,属于x86基础的单字节寄存器push指令(编码规则为0x50 + reg,其中reg=5对应rbp),该编码在任何模式下都不会被解析为push 16位寄存器操作。
  • 在64位模式下,要实现push 16位寄存器的操作,必须使用操作数大小前缀0x66,搭配通用的push r/m16编码。例如:
    • push ax 的编码为 0x66 0x50
    • push bx 的编码为 0x66 0x53
      通用编码格式为 0x66 0x50 + reg,其中reg对应目标16位寄存器的编号。

push imm64 指令的存在性纠正

“不存在push imm64指令”的说法不正确,x86_64的64位模式下原生支持push 64位立即数,有两种编码形式:

  • 完整64位立即数:使用0x48 0x68 + 8字节立即数,其中0x48是REX.W前缀,用于将push imm32指令(0x68)的操作数大小提升为64位,直接压入完整的8字节立即数。
  • 紧凑格式(适用于可8位符号扩展的64位立即数):使用0x48 0x6A + 1字节立即数,REX.W前缀配合push imm8指令(0x6A),将8位立即数符号扩展为64位后压栈。

内容的提问来源于stack exchange,提问作者YutakaAoki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:37:32