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

64位x86汇编jg指令内存间接跳转报操作数类型不匹配问题咨询

问题原因

这是x86指令集本身的设计限制,和你使用的汇编器无关:

  • 无条件跳转指令jmp、调用指令call支持间接寻址操作数,你写的jmp [rsi + rdi * 8]是合法的,CPU会从对应内存地址读取8字节的目标地址完成跳转。
  • 包括jg在内的所有条件跳转指令(je/jne/jl/jge等),仅支持相对偏移立即数作为操作数,也就是只能直接写跳转标签,不能接寄存器,也不能接内存地址,所以你的jg [rsi + 0x20]写法不符合指令规范,编译报错。
修复方案

你可以把条件间接跳转拆成分支实现,示例代码如下:

cmp rdi, 4
jle .normal_jump    ; 不满足大于4的条件就走正常跳转分支
jmp [rsi + 0x20]    ; 满足条件时走间接跳转
.normal_jump:
jmp [rsi + rdi * 8]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:24:01