如果我理解这两篇文章,那么最低级别的英特尔架构已经过渡到使用RISC指令,而不是英特尔着名的传统CISC指令集:
http://www.hardwaresecrets.com/article/235/4
http://www.tomshardware.com/reviews/intel,264-6.html
如果是这种情况,那么x86/x64芯片是否仍然采用微程序设计,还是像传统的RISC芯片一样使用硬连线控制?我猜它仍然是微程序设计,但想验证.
我们以Python为例.如果我没有弄错,当你在其中编程时,计算机首先将代码"翻译"为C.然后再从C到汇编.汇编是用机器代码编写的.(这只是一个模糊的想法,我有这个,所以纠正我,如果我错了)但是什么是机器代码写入,或者更确切地说,处理器如何处理其指令,它如何"找出"做什么做?
在计算机科学讲座中,我们被告知有一个特殊的代码(低于汇编程序)来确定CPU内部写入CPU的行为.这意味着确定布尔逻辑中的每个指令究竟是什么意思......这听起来很奇怪 - 我没有找到任何关于它的信息.
可能他的意思不是CPU而是微控制器?但他告诉它确定了像MOV,ADD等这类指令的确切行为.所以,我很困惑.
或者他的意思是什么样的PCB布局语言?
在一般情况下,可以使用内存或寄存器操作数的指令如何使用内存操作数变慢然后 mov + mov -> 指令 -> mov + mov
根据Agner Fog 指令表中的吞吐量和延迟(在我的案例中查看 Skylake,p238),我看到以下btr/bts指令数字:
instruction, operands, uops fused domain, uops unfused domain, latency, throughput
mov r,r 1 1 0-1 .25
mov m,r 1 2 2 1
mov r,m 1 1 2 .5
...
bts/btr r,r 1 1 N/A .5
bts/btr m,r 10 10 N/A 5
Run Code Online (Sandbox Code Playgroud)
我不明白这些数字怎么可能是正确的。即使在没有可用寄存器的最坏情况下,并且您将一个寄存器存储在临时内存位置,这样做也会更快:
## hypothetical worst-case microcode that saves/restores a scratch register
mov m,r // + 1 throughput , save a register
mov …Run Code Online (Sandbox Code Playgroud) 假设我想修改现有指令的实现。例如,假设我想更改在获取和解码后执行“mov”指令时由处理器执行的微代码。我该怎么做呢?
另外,假设我想向 ISA 添加一条新指令。例如,假设有一个当前未使用的操作码,我希望我的处理器能够在获取它后对其进行解码和执行。我该怎么做呢?
说实话,我什至不知道从哪里开始,这就是我询问堆栈溢出的原因。我没有任何编写微代码的经验,我只从计算机架构课上知道这个术语。我知道查找 x86 指令列表非常容易,但我不知道在哪里查找微指令列表。我什至不知道英特尔是否公开了他们的微代码列表。我不知道需要使用什么程序将这些新的微程序加载到 CPU 内的适当内存中。我认为引导加载程序可能参与其中,但我对此可能完全错误。如果我拥有我的 CPU,我认为我可以合法地修改其微代码并对其指令进行逆向工程,但通过现有文档(而不是通过逆向工程)更容易理解我的 CPU 的工作原理以及如何更改其微代码。
我知道有一些较小的硬件供应商生产开源 ISA,所以如果我想尝试一下,从这些供应商之一购买 CPU 可能会更好?但我不知道替代供应商的哪种 CPU 最适合这种情况。但实际上,我认为对于我想做的事情来说没有必要购买新的 CPU,因为如果必须的话,我可以使用现有的 CPU 在虚拟机中运行开源 ISA(我是从软件角度而不是硬件角度对微指令和微程序感兴趣)。
microcoding ×6
assembly ×3
intel ×2
machine-code ×2
x86 ×2
64-bit ×1
cpu ×1
interpreter ×1
performance ×1
processor ×1
x86-64 ×1