2012-12-09 37 views
0

昨天晚上我和一位朋友谈论了嵌入式处理器等问题,并且谈到了ASM和特定指令集的主题 - 尽管我认为这个问题也可以应用于x86处理器。注册符合性 - 是否100%必要?

在了解ASM中的寄存器时,很明显所有寄存器都具有100%独特和特定的用途(至少在x86架构中)。然而,当他讨论他的一些处理器时,他告诉我他正在使用的一些芯片有几个通用寄存器,可以用于任何东西,并且很少有(如果有的话)专用指令使用的寄存器。

当它归结为它时,不能任何注册在技术上被用来执行指令?它们的大小都一样,它会有什么不同(堆栈指针等)?

+0

而作为一个免责声明,只是想扔掉那里,我不想写黑客或不合格的代码。只是一个无辜的问题。 – Qix

+1

我想这个问题最好由具有数字设计知识的人回答。有一条专用路径通往单个寄存器比选择寄存器更有效率,但我真的不知道。你还必须记住,今天的x86指令集是从最早的微处理器发展而来的。 –

回答

3

指令集,其中的任何寄存器可以用作用于指令的操作数称为正交。 8086绝对不是一个正交设计。在8086年后发布的竞争对手是摩托罗拉68000,这是一款高度正交的设计,因其品质而受到众多程序员的青睐。

8086的设计是不但是随机挑选两个非常重要的原则,发挥了作用:

  • 与前代产品,8080的兼容性,是一个强大的目标。允许将旧汇编代码机械转换为新处理器。 8080反过来受到8008的严重影响。在市场中获得新架构总是很困难,英特尔很早就认识到,对工具和程序的投资对他们的客户来说是一项重要资产。长久以来,这一目标已经很好地发挥了作用,当然这也是设计持续的原因。

  • 工艺技术确定了可用于实现处理器的晶体管数量的上限。 8086只需要29,000个有源晶体管,这对于16位处理器来说是相当可观的工程技术。使用非正交设计允许删除大量的胶合逻辑,它也更快。 68000为其预算,正交指令集选择了一种不同的用途,但却是一个相当糟糕的总线接口,例如,当数据在非对齐地址上寻址时,会产生臭名昭着的总线错误处理器故障。

1

它变得清楚,所有的寄存器有100%独特和 具体使用

假。 EAX的唯一用途是什么?

不能任何寄存器在技术上被用来进行说明

你可以使用任何寄存器你喜欢的方式。你只需要知道一些指令需要操作数/返回结果在特定的寄存器中。例如loop递减ECX,直到它变为0,从movsb ESI移动到EDI等

+1

我怀疑他说的是在x86中寄存器不可互换。在像idiv这样的指令中,结果*必须使用EAX和EDX寄存器。其他指令必须使用ECX寄存器等。 –

+0

DS表示数据段,IP表示指令指针,SP堆栈指针等。这些正在被x86架构使用。你可以混淆他们,但你真的不应该知道该怎么办 – SomeWittyUsername

+0

@icepack我认为这是它的要义,是的:-) – cnicutar