汇编语言通用性问题

汇编语言通用性问题,第1张

这个问题问的很有深度,你很善于思考。

这里的机器笼统的说就是硬件,我们知道硬件本身也是有程序的,只不过程序固化在硬件上,这些程序不同于我们通常所说的软件中的程序,他们不能被修改,只有该硬件的设计者才清楚这些程序的具体规范和流程。

可是我们也知道,计算机是一个复杂的体系,不是一个硬件就可以解决的,它需要多个硬件协调工作,问题来了,这些硬件是由不同的设计者或公司完成的,它们的程序只有设计者才清楚,那么他们如何协调工作呢?即某个设计者设计的硬件如何调用其他设计者设计的其他硬件,以便协同完成工作呢?同一种硬件可能有很多不同的设计者,设计了不同的固化程序,其他类型的硬件要调用此种硬件不可能一一了解所有这类硬件的设计细节,而且即便能清楚市面上存在的所有这类硬件的细节,也难保以后再出现其他的设计,那么这个问题该如何解决呢?

解决思路实际上很简单,我们只需要定义一个标准的输入输出规范,设计者在硬件中固化的程序如果不满足这个规范,只需要在硬件的外围加一层软件程序来满足这样的规范,这样一来其他硬件并不需要知道这个硬件的内部细节,只需要调用硬件外围的软件程序即可,软件程序再调用硬件内部的程序,该软件程序必须要有清楚硬件内部程序的人来设计,一般来说,硬件的发布者会附带发布一个这样的程序来满足业界的规范,这个程序就是我们通常意思上所说的“驱动程序”。

有了这样的机制,即使两个硬件的设计者设计了不同的固化程序,只要他们采用相同的规范,提供相同的外围访问接口,就可以被认为是相同的硬件。

不幸的是规范实际上是把双刃剑,它的出现统一了业界繁杂的各种体系,也同时阻碍了体系结构的发展,这个问题我就不再详述了。

了解了上面的问题之后,我们再来谈谈你所说的这个汇编语言

汇编语言是面向机器的,这句话过于笼统,或者说不够准确。实际上任何语言都可以针对机器或者某个特定平台开发。只不过汇编语言由于其本身贴近机器语言,所以任何硬件不需要提供专门的软件接口,就可以由汇编语言直接访问该硬件的固化程序,而如果该硬件提供了基于其他语言的编程接口,且提供了该硬件的所有内部特性,那么我们认为使用这种语言也可以访问该硬件。我们知道,很多语言开发的程序,其实也是要编译成机器语言的,理论上说,这样的程序也可以直接用汇编来开发。

上面我们说了,汇编语言同其他语言其实很相似,他们最终也都是要编译为机器语言,汇编语言能够做到的,理论上其他语言也能够做到,其他语言能够做到的,理论上汇编语言也能够做到。

但是现实是,汇编语言能做到的,其他语言不一定能做到,而其他语言能做到的,汇编语言也不一定能做到。这实际上是由于行业布局问题导致的,换句话说,是人为的将它们区别开来了。

由于硬件的发布者没有开发基于其他高级语言的开发接口,导致开发人员只能使用汇编开发这类硬件,而其他高级语言则做不到。主要考量是由于这类底层开发的频度较低,且单个硬件的功能较少,没必要提供高级开发接口,开发人员完全可以通过汇编封装一个应用供高级程序调用,所以也就没有这类行业需求。

由于平台的发布者没有提供基于汇编开发的相关资料,导致开发人员在基于该平台开发程序时,只能使用对应的高级语言,而汇编语言则做不到。这其中的主要考量是,平台往往为某类应用提供开发环境,且需要严格遵循底层规范,大部分开发人员很难在庞大的应用中控制好各种底层规范,所以大部分人并不会考虑使用汇编开发这类繁杂的应用,对于发布者来说,提供基于汇编开发的完整资料也就失去了商业价值,也就导致了这样的局面。其实,我就有用汇编写过Windows程序的,只做了一个简单的类似Windows笔记本的应用,再往下写就很复杂了。

对于你所提到的问题做个简单的总结:

不同的机器是否对应不同的汇编语言?理解错误。汇编语言是包含了该语言的基本规范,它们是实际上是通用的,应该说基于不同的机器需要面向不同的调用,或者面向不同的功能,语言只不过是使用这些功能的工具。

这里的“机器”指什么?机器指的就是硬件,实际上指的是该应用中的独特程序,它可以是固化在硬件上的程序,也可以是随硬件提供的外围驱动程序。

这台能用,其他的可否使用?如果两台电脑使用了同样的硬件,当然可以。如果两台电脑的硬件并不完全相同,只要它们遵循了同样的规范,也可以。而如果两台电脑中的硬件规范不一,如果他们提供了遵循同样规范的驱动程序,且你的程序是基于该驱动程序编写的,那么也是可以的。实际上当前市面上大部分的硬件都遵循中同样的体系规范,并不会有那么大的差别。

首先,简介一下计机原理,假如有一个由磁粉组成的硬盘,那么改变磁粉的排列,并通电,将引发电流大小的变化,这就是计机的数据来源。

那么,查看磁粉是难以看见的,间接的表示就是:用一个如winhex的软件打开,里面的十六进制数就间接说明了磁粉的排列物理状况。同样,手动改磁粉即使生效,也未必“有用”。正如你所想,没错,既然电脑这机器这么麻烦,但它有人买,因为有键盘。一台正常的电脑由“固化”“程序”(bios)硬件去启用主板上的各个元件,再拿个硬盘放 *** 作系统。自然有办法写入数据了。

好了,回归正题,所谓汇编,就是可以从那些有效的十六进制数据得出的东东,比如“b4....”在某一场合表示mov ......,于是乎,对照主板商等给出的文档,想进行编写一个程序,那么就“mov.......”什么的对着“b4........”什么的堆进扇区就行了。编译程序,动词来说的话,是一个动作,不是程序,汇编程序是一个程序,名词来说的话,风马牛不相干,因为根据上述原理,把汇编代码或c代码转成有效的“磁粉”数据,这就是一个编译的过程,结果出来的就是编译程序。

汇编是一种语言,就像c++是一种语言一样,是一个名词

编译是一个动词,指对开发完成的源代码进行编译,就是把你写的一些语句转换为计算机能识别的机器语言

编译需要编译器

汇编程序就是一个程序,是用汇编语言写的程序,可能是已经编译过的,也可能是还没有编译过的(名词)

编译程序是对一个程序进行编译,编译以后程序才能运行(动词)

如果把你的问题改为:asp程序和编译程序有什么区别可能就好理解了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11700092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存