按下回车键跳到正文

Win32 C++&汇编学习笔记

Contents
  1. VC++ 6.0中,浮点寄存器未初始化
  2. push指令传入4字节数据
  3. VC++6.0编译器优化机制(伪代码)

VC++ 6.0中,浮点寄存器未初始化

整型数据是将用户数据转为2进制保存在内存中,使用通用寄存器操作。而浮点数则是使用的浮点协处理器的浮点寄存器。
在vc6.0中,程序会检测代码中是否声明过浮点类型的变量,而不是像其他编译器一样默认打开。如果有才会对浮点寄存器进行初始化,否则就会出现错误,无法转换小数部分

int nInt=0;
scanf(“%f”,&nInt);
//input float number, error.


push指令传入4字节数据

浮点数占4字节,但处理时使用Double 8字节,所以应用sub esp,8代替push

fstp qword ptr[esp]

将数据从st(0)移动到esp中

函数尾要记得使用add esp,8补回堆栈

函数返回值存储在eax中,遇到浮点数利用st(0)传值

VC++6.0编译器优化机制(伪代码)

[debug]

n=1+2;  常量折叠  n=3;

n=3; print n; 常量传播 print 3;

[release]

a=n; print a; 复写传播 print n;

From LzSkyline's Blog : https://www.lzskyline.com/archives/109

当前没有任何回复哦,快成为第一个吃螃蟹的人~

发表评论

电子邮件地址不会被公开。 必填项已用*标注