如何在8087的ST(0)与ST(i)寄存器间复制值?求ST(i)到ST(0)单指令
将ST(i)复制到ST(0)的x87指令方案
x87浮点指令集里没有单指令能在不改变栈结构、不影响其他ST寄存器的前提下,直接把ST(i)的值复制到ST(0)。
你想到的两步指令组合是完全可行的最优解:
fxch ST(i):交换ST(0)和ST(i)的内容fst ST(i):将交换后的ST(0)(原ST(i)的值)复制回ST(i),让ST(i)恢复原值
执行完这两条指令后,只有ST(0)被替换为原ST(i)的值,其他寄存器和栈的状态完全不受影响。
额外说明:如果不限制栈结构的临时变动,fld ST(i) + fstp ST(i)也能实现目标,但这个过程会先把ST(i)压入栈顶(导致所有原ST寄存器编号后移一位),再将新栈顶的值复制回ST(i)并弹出栈,虽然最终结果正确,但不符合你“不影响其他寄存器或栈”的要求,因此不适用。
内容的提问来源于stack exchange,提问作者pts
相关产品推荐
相关产品推荐

