关于汇编指令FADDP ST(0), ST(1)的合理性咨询
关于
FADDP ST(0), ST(1)指令的合理性分析 首先明确:这条指令是不合法、不合理的,x87浮点指令集中的FADDP不支持这种操作数顺序。
正确的FADDP指令语法与行为
FADDP的标准格式是:
FADDP ST(n), ST(0)
或者可省略源操作数ST(0),简写为:
FADDP ST(n)
它的执行逻辑是:
- 将栈顶的
ST(0)与ST(n)相加,结果存入ST(n); - 弹出栈顶的
ST(0)(栈深度减1,原ST(1)及以下寄存器依次上移成为新的ST(0)、ST(1)...)。
你对指令行为的理解有误
你描述的“将ST(0)与ST(1)相加并将结果写入ST(0),随后ST(0)会被删除”不符合FADDP的实际逻辑。合法的FADDP ST(1), ST(0)(或FADDP ST(1))是把结果存在ST(1),再弹出ST(0),最终栈顶是相加后的结果(原ST(1)的位置)。
为什么FADDP ST(0), ST(1)不合法
x87指令对FADDP的操作数有严格限制:目的操作数必须是ST(n)(n≥1),源操作数固定为ST(0)。反过来把ST(0)作为目的、ST(1)作为源的写法,不符合指令集的编码规则,汇编器会直接报错。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

