高层原因
当您考虑它时,微处理器的作用惊人:它使您可以拿起一台机器(例如洗衣机或电梯),并用便宜的,批量生产的硅片来替换整块定制设计的机构或电路。芯片。您可以节省大量零件成本,并节省大量设计时间。
但是,坚持使用标准芯片替代无数的定制设计吗?不可能有一个完美的微处理器适合每个应用程序。一些应用程序需要最小化功耗,但并不需要很快。其他的则需要快速但不需要易于编程,其他的则需要低成本等。
因此,我们有许多不同的微处理器“风味”,每种都有其优点和缺点。他们希望所有人都使用兼容的指令集,因为这样可以重复使用代码,并且更容易找到具有适当技能的人员。但是,指令集确实会影响处理器的成本,复杂性,速度,易用性和物理约束,因此我们有一个折衷方案:存在一些“主流”指令集(以及许多次要指令集),以及每个指令集中有许多具有不同特性的处理器。
哦,随着技术的变化,所有这些权衡都会发生变化,因此指令集不断发展,新的指令集出现了,旧的指令集消失了。即使今天有一套“最佳”的指令集,也可能不到20年。
硬件细节
指令集中最大的设计决策可能是字长,即处理器可以“自然地”操纵多少个数字。8位处理器处理从0到255的数字,而32位处理器处理从0到4,294,967,295的数字。为一个设计的代码需要完全为另一个设计。
不仅仅是将指令从一个指令集转换为另一个指令集的问题。在不同的指令集中最好采用完全不同的方法。例如,在8位处理器上,查找表可能是理想的,而在32位处理器上,出于相同的目的,算术运算会更好。
指令集之间还有其他主要区别。大多数说明分为四类:
处理器在执行哪种类型的计算以及如何处理控制流,数据传输和处理器配置方面有所不同。
例如,某些AVR处理器既不能相乘也不能相除。而所有x86处理器都可以。您可能会想到,消除乘法和除法等任务所需的电路可以使处理器更简单,更便宜。如果需要,这些操作仍然可以使用软件例程执行。
x86允许算术指令从内存中加载其操作数和/或将其结果保存到内存中;ARM是一种加载存储体系结构,因此仅具有一些专用的访问内存的指令。同时,x86具有专用的条件分支指令,而ARM几乎允许有条件地执行所有指令。同样,ARM允许将移位作为大多数算术指令的一部分进行。这些差异导致不同的性能特征,芯片内部设计和成本的差异以及汇编语言级别的编程技术的差异。
结论
不可能使用通用汇编语言的原因是,要正确地将汇编代码从一个指令集转换为另一指令集,就必须重新设计代码,这是计算机尚无法完成的。