注册符合性 - 是否100%必要?

时间:2012-12-09 16:23:22

标签: assembly cpu-registers

我和朋友昨晚谈的是嵌入式处理器等,我们讨论了ASM和特定指令集的主题 - 尽管我认为这个问题也适用于x86处理器。

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

归结为它时,是否可以使用技术上的任何寄存器来执行指令?它们的大小都相同,它会有什么不同(堆栈指针等)?

2 个答案:

答案 0 :(得分:3)

任何寄存器可用作指令操作数的指令集称为正交。 8086绝对不是正交设计。 8086之后几年发布的竞争对手是摩托罗拉68000,这是一种高度正交的设计,并且受到许多程序员的青睐。

然而,8086的设计并非随机挑选,两个非常重要的原则起到了作用:

  • 与上一代8080的兼容性是一个强有力的目标。允许将旧汇编代码机械转换为新处理器。 8080反过来受到了8008的严重影响。在市场上接受新的架构总是很困难,英特尔很早就认识到,对工具和程序的投资对他们的客户来说是一项重要的资产。这个目标在很长一段时间内都能很好地发挥作用,而且设计已经持续了很长时间。

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

答案 1 :(得分:1)

  显而易见,所有寄存器都具有100%的唯一性和   具体用途

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

  

技术上不能使用任何寄存器来执行指令

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