有意思研究了一下。反汇编
fstpl指令直接在栈中存入了double类型的数据,但问题是printf使用了%f进行解析的这个数据,也就是说实际上printf中根本没有区别%lf与%f,都将其作为double类型来解析的。
算是栈的一个特点,浮点8字节对齐以及类型提升。
酱就说的通了,刚开始栈里面的值是0x3ff999999999999a,按double打印出来是8.0/5.0 = 1.60,之后movl入1或者2只是将后32位改写,成了0x3ff9999900000001或者0x3ff9999900000002(小端存放的原因),这样按double打印出来也是1.6。
如此可解释通。