机器依赖“意味着什么”?

时间:2010-08-07 14:14:55

标签: assembly programming-languages

低级语言和装配级语言取决于机器。我的问题是什么意思?我的意思是它取决于处理器或机器的功能,如RAM,时钟等。

高级语言如何克服这个问题?

2 个答案:

答案 0 :(得分:5)

在最深层次,它意味着指令集不同。通过x86处理器放置一个特定的位序列将使您获得完全不同的结果,而不是通过ARM处理器放置相同的位组。

高级语言“克服”了这一点,因为计算机都以不同的方式完成相同的事情。 ARM有办法像x86一样添加两个数字,它有办法将数据从RAM加载到寄存器(反之亦然),就像x86一样,等等。

所有高级构造最终都可以简化为可由所有通用机器执行的基本操作集(尽管某些构造可能在某些CPU上比在其他CPU上更高效。)

这就是编译器所做的。它们解析高级语言,并以某种方式将其缩减为目标系统的机器语言。通常只需要为新CPU编写新的编译器位。一些编译器(GCC是一个很好的例子)是在层中构建的,大大简化了这项工作。熟悉编译器和目标平台的单一高技能开发人员可以很容易地创建一个基本端口。

在简单地将构造简化为本机机器语言的水平之上,当然存在输入/输出,文件系统访问等问题。这些问题通常也是分层处理的,通常只有最低级别 - 驱动程序 - 为新平台重写,保持与上层的一致界面。

甚至驱动程序通常可以跨机器类型全部或部分共享! x86平台并不是唯一拥有PCI总线的平台。即使总线不同,连接到它们的设备通常最终都是相同的。 Linux在多种机器类型上共享许多设备驱动程序,几乎没有变化。编译器处理转换为机器代码的细节,内核的更多内层试图抽象出其他行为差异,驱动程序编写者必须坚持已建立的接口。

在此过程中,您会发现在给定平台内,任何特定系统是否具有特定可选设备(或设备类别)的问题。例如,对于大多数服务器而言,拥有3D加速器是愚蠢的。有些系统可能有硬件随机数生成器,有些可能没有。有些可能没有固定存储空间。然而,不合格的“机器依赖”通常不会解决这种依赖程度。

答案 1 :(得分:0)

机器相关的手段,从根本上说,取决于构成计算机的硬件 - 可以通过CPU + RAM总线访问RAM,因此不一定 部分 - 不过视频卡,外部存储,鼠标/键盘等。

这是通过使用具有通用接口的驱动程序抽象出硬件的复杂性而得到的 - 例如,DirectX通过提供明确定义的接口来抽象与视频卡的交互。