8086 CPU,是不是无法进行小数计算。
这个问题萦绕我心头许久。 我玩电脑很早。我的第一台电脑是386SX25,也就是主频25M,而现在的电脑主频都是2G左右了。但这不是关键。在这个时期,主板上除了CPU之外,还有一个空余的插槽,叫做“协处理器插槽”,里面可以放一个叫做“80387”的“协处理器”,对于286系统,就是287协处理器。协处理的作用是“大大加快浮点运算速度”。 对此我有所不解。根据我从媒体获得的知识,早期的cpu限于工艺等原因,里面只有整数运算单元,而没有浮点运算单元,而协处理器,就是独立于cpu之外的浮点单元,专职进行浮点运算。 而且,我自学过8086汇编语言,自己甚至写过汇编病毒,可是我也发现,如果我没有记错的话,8086汇编,没有小数运算功能,只有整数运算功能。 我们用高级语言编写程序,这些程序在没有协处理器的cpu上运行的时候,从cpu指令级别上来说,是无法进行小数运算的,但是很明显,我们在编程的时候却没有“只能进行整数运算,不能进行小数运算”的限制,所以我认为。一定是编译器在用某种算法,用整数运算来“模拟”小数运算,用整数运算单元,来得出小数点以后的数字。 综上所述,我的结论是 1:从概念上说,浮点运算=小数运算 2:既然CPU没有浮点运算单元,那么就无法进行小数运算 3:是编译器用算法,通过整数运算来模拟小数运算,从而遮蔽了cpu无法进行小数运算的事实。 4:要充分利用浮点运算单元,需要387浮点指令 5:如果一个程序,在没有浮点单元的cpu上运行正常,而在有浮点单元的cpu上就能获得加速。难道是编译器同时编译出了2个代码,并且会自动判断:有浮点单元,就是用387代码,反之,就运行8086/386代码。
可以,用整数指令模拟浮点运算,只不过性能上大打折扣。 如:51单片机处理浮点数是非常慢的,一般编程时都不用它的浮点运算功能,如果真用到小数或小数运算时,就用整数替代,再进行转化就可以了, 我又认真看完了你的问题,其实你讲的很对,你的问题其实也是答案了,当初我没看完后面的,误会以为你说的整数指令不能进行浮点运算。
我大学学过汇编、C语言、自学过VC,但是不精,在人生十字路我差点去搞IT了,只是家人更加崇拜铁饭碗,最终弃理从文。我以前分析过C语言的汇编代码,确如你所说的:高级语言能够脱离开硬件,让编程的人不用去考虑硬件平台,就因高级语言本身就包含了各种平台适用的代码。
你的第3,5点没完全对,正确的应该是:编译器在编译前已经作出了判断,根据你的硬件平台作出要编译那一部分代码而不是几段代码统统都译出来。第3点说是编译器算法并不准确,应该是高级语言本身就包含了各种可能,编译器只把硬件平台对应部分的代码译出来。
你有汇编的基础,自己去分析一下部分高级语言的汇编代码就明白了。
答:8086 CPU的地址和数据引脚 AD15~AD0:地址/数据复用引脚(输入/输出,三态)。这些低16位地址/数据引脚是多路开关的输出。由于8086只有40条引...详情>>
问:快过年了,盗号的很多大家小心,昨天一女的加我,外地的我给删除了,晚上就显示异地登...
答:如果加一下就能被盗号了也太可怕了啊。详情>>
答:有可能你的系统不是正版的,是正版的才可以下载更新.详情>>