Assembly 处理器的内部工作方式

Assembly 处理器的内部工作方式,assembly,hardware,cpu,processor,alu,Assembly,Hardware,Cpu,Processor,Alu,几天前,我有了一个关于处理器体系结构/指令集/编译器/编程语言的想法。(是的。) 我只是想了解一下处理器复杂的内部工作原理 下面是: 在ALU内部(是实际执行指令的位吗?)有工业组件,每个组件都有一个功能(例如一组加法器用于加法,另一个电路用于and运算),或者是它们的多个“通用单元”,可以根据操作码执行任何操作(add、and、or、sub、Mul) 这个想法是创造一套晶体管/电路,可以进行任何操作。将有一个单独的晶体管层来控制通过主要“多用途单元”的信息流 对不起,我真的没有很好的理解,这很

几天前,我有了一个关于处理器体系结构/指令集/编译器/编程语言的想法。(是的。)

我只是想了解一下处理器复杂的内部工作原理

下面是: 在ALU内部(是实际执行指令的位吗?)有工业组件,每个组件都有一个功能(例如一组加法器用于加法,另一个电路用于and运算),或者是它们的多个“通用单元”,可以根据操作码执行任何操作(add、and、or、sub、Mul)

这个想法是创造一套晶体管/电路,可以进行任何操作。将有一个单独的晶体管层来控制通过主要“多用途单元”的信息流

对不起,我真的没有很好的理解,这很难解释。任何有助于我更好理解的资源或书籍都会很棒


提前感谢您的帮助。

您完全可以使用“操作码”编程的4、8、16或更多相同单元构建通用ALU

从全加器开始:

(c_out, sum) = FA(a_in,b_in,c_in) ==
   c_out = true, iff a_in + b_in + c_in >=2 or...
         c_out == (a & b) | (a & c) | (b & c)
   sum = parity of (a_in, b_in, c_in) == xor (a_in, b_in, c_in)
要添加8位寄存器,可以从寄存器组中选择(或多路复用)位,以馈送到向量(a_0、a_1、a_2、…a_N)上,并类似地馈送到向量b_x上的另一个(或相同)寄存器

然后将全加器0的输出c_输出作为第1位c_输入的输入。 但如果没有这种联系呢?(即c_in=c_out_previous和c?,其中c=0

这将在不传播进位的情况下执行按位异或运算。同样,通过使c_in=0,c_out将包含只需要多路复用输出的AND运算的结果

子表达式(a&c)|(b&c)包含(a | b)iff c==1

类似地,可以有条件地反转宏单元中的某些位,添加从左到右的传播(>>1)添加对sub、sub、adc、rol、ror或and的支持。带反馈的全加器称为进位保存加法器,可以执行位串行乘法(阶段)

我非常确信,大多数早期处理器设计都使用了这种“技巧”


历史上有很多设计范例——ALU所有工作的“马克思主义”时代已经被“后现代”所取代在公司模型中,有几层管理者试图让工人保持忙碌——与专用于缓存、分支预测、寄存器重命名、无序执行、超线程等的管芯区域相比,ALU的大小已经小得无影无踪,因此“工人”没有时钟周期然后GPUGP的想法使ALU的内存更近,可以有成千上万的工人与能力越来越差的经理一起做非常简单的事情……

问题:在ALU内[…]是否有各自具有功能的独立组件[…]或者他们的多个“通用单元”可以执行任何操作[…]取决于操作码

这两种方法都是可能的。一些ALU从给定的输入计算所有函数,并让多路复用器根据指令操作码选择正确的输出。也有基于片的ALU。Ken Shirriff在本文中解释了8085的ALU是如何用这种方法实现的。 在文章的结尾,作者指出6502使用了使用多路复用器的并行方法


书籍:有很多。我喜欢莫里斯·马诺:数字设计和轩尼诗·帕特森:计算机组织与设计,硬件/软件界面。

我认为这是离题的;所以不是关于CPU设计。我认为“它是不同的”这是最正确的答案。看,它甚至将这一点与不同的设计进行了比较。我想这有点离题了。试试其他网站;比如说,是的,拥有算术逻辑单元的想法是一个好主意。alu不是实际执行指令的位,在传统意义上,它是执行alu指令的位,但其他指令(分支、加载、存储等)不需要使用alu,而且可能不会。我建议您为简单的指令集编写一个指令集模拟器。我建议使用arm thumb和msp430。我已经编写了一些模拟器,可能会有所帮助(github.com/dwelch67)我还从开放内核中选取了一些处理器,并围绕它们包装了一些示例。这属于verilog/vhdl类别,并不完全是针对堆栈溢出的,请不要关闭。我还可以推荐这两本书。