Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么是机器依赖性';平均值';?_Assembly_Programming Languages - Fatal编程技术网

Assembly 什么是机器依赖性';平均值';?

Assembly 什么是机器依赖性';平均值';?,assembly,programming-languages,Assembly,Programming Languages,低级语言和汇编语言依赖于机器。我的问题是这意味着什么?我的意思是,它是否取决于处理器或机器的特性,如RAM、时钟等 高级语言是如何克服这一问题的?从根本上说,依赖于机器意味着依赖于构成计算机的硬件-RAM可以通过CPU+RAM总线访问,因此不一定是这一问题的一部分-但是视频卡、外部存储、鼠标/键盘等都是 这是通过使用具有公共接口的驱动程序抽象出硬件的复杂性来解决的,例如,DirectX通过提供定义良好的接口抽象出与视频卡的交互。在最深层次上,这意味着指令集不同。通过x86处理器输入特定的位序列将

低级语言和汇编语言依赖于机器。我的问题是这意味着什么?我的意思是,它是否取决于处理器或机器的特性,如RAM、时钟等


高级语言是如何克服这一问题的?

从根本上说,依赖于机器意味着依赖于构成计算机的硬件-RAM可以通过CPU+RAM总线访问,因此不一定是这一问题的一部分-但是视频卡、外部存储、鼠标/键盘等都是


这是通过使用具有公共接口的驱动程序抽象出硬件的复杂性来解决的,例如,DirectX通过提供定义良好的接口抽象出与视频卡的交互。

在最深层次上,这意味着指令集不同。通过x86处理器输入特定的位序列将得到与通过ARM处理器输入相同的位序列完全不同的结果

高级语言“克服”了这一点,因为计算机都做几乎相同的事情,只是方式不同。ARM可以像x86一样将两个数字相加,也可以像x86一样将数据从RAM加载到寄存器(反之亦然),等等

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

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

当然,除了将构造简化为本机语言之外,还有一些问题,如输入/输出、文件系统访问等。。这些通常也是分层处理的,通常只有最低级别(驱动程序)被重写以用于新平台,从而保持与较高级别的一致接口

甚至驱动程序也可以在不同的机器类型之间共享,无论是全部还是部分!x86平台并不是唯一拥有PCI总线的平台。即使在总线不同的地方,连接到总线上的设备通常都是相同的。Linux在几种机器类型上共享许多设备驱动程序,几乎没有或根本没有更改。编译器负责处理转换为机器代码的细节,内核的更多内层试图抽象出它们可能存在的其他行为差异,驱动程序编写者只需遵循已建立的接口即可

在此之后,您会遇到这样的问题:在给定的平台内,任何特定的系统是否具有特定的可选设备(或设备类别)。例如,对于大多数服务器来说,使用3D加速器是愚蠢的。有些系统可能有硬件随机数生成器,有些可能没有。有些可能没有固定的存储空间。然而,“机器依赖性”通常不能解决这种依赖性