当CPU没有(或有问题)浮点单元时,软件如何执行浮点运算?例如 PIC、AVR 和 8051 微控制器架构。
“效仿”在 PIC、AVR 和 8051 上下文中,“浮点”是错误的术语。仿真是指在具有 FPU 选项但并非所有部件都包含 FPU 的架构上对 FPU 硬件进行仿真。这允许包含浮点指令的二进制文件在没有 FPU 的变体上运行。在使用时,FPU 仿真被实现为无效指令异常处理程序;当遇到FPU指令但不存在FPU时,会发生异常,处理程序读取指令值并在软件中实现操作。
但是,您列出的架构均未定义 FPU 或 FPU 指令,因此无法模拟任何内容。相反,在这些情况下,浮点运算完全在软件中实现,编译器生成代码以根据需要调用浮点例程。例如表达式x = y * z ;将生成相当于函数调用的代码x = _fmul( y, z ) ;。事实上,如果您查看包含浮点运算的构建的链接器映射输出,您可能会看到例程符号名称,例如_fmul, _fdiv等等 - 这些功能是固有的给编译器。
x = y * z ;
x = _fmul( y, z ) ;
_fmul
_fdiv