roi*_*mon -1 x86 arm cpu-architecture risc
通过一些研究,我意识到 ARM 和 RISC 几乎可以互换使用,x86 和 CISC 也是如此。我理解RISC和CISC是架构。我的理解是,架构(即 RISC 或 CISC)是一种指令集,进程必须能够执行这些指令才能成为这些架构之一。例如,RISC-V 有一个它可以执行的指令列表,CISC 有一个它可以执行的指令列表。要成为 RISC 或 CISC,处理器必须能够执行特定的指令列表之一。但是,我不明白ARM和RISC以及x86和CISC分别有什么区别。ARM和x86不也是架构吗?我经常读到“ARM 架构”或“x86 架构”。感谢您为我澄清这一点。
ARM 和 RISC 几乎可以互换使用- 不,RISC是一个类别,包括 ARM、PowerPC、MIPS、RISC-V、SPARC、8 位 AVR 等 ISA。
ARM 是最少的 RISCy 之一,具有加载多指令和复杂的寻址模式。但它具有 RISC 属性,如固定宽度机器代码格式(Thumb 模式除外)。并且是一个加载/存储机器(ALU 指令不能有内存操作数)。
CISC 也是如此,x86 是其中最突出的当前成员。其他包括 Motorola m68k 和 MSP430 等当前微控制器。Vax 是一个著名的历史机器,众所周知,单条指令可能具有很大的复杂性,例如指令的两个操作数都可以是内存,而不是寄存器,两者都具有复杂的寻址模式,因此最大指令长度很大。
我的理解是,架构(即 RISC 或 CISC)是一种指令集,进程必须能够执行这些指令才能成为这些架构之一。
没有。没有通用 RISC 或通用 CISC 的指令表。
CISC ISA 的一般特征之一是它将包含类似 add reg, [memory]and 通常的指令add [memory], reg,而不仅仅是add reg, reg.
几乎所有架构都包含一条add指令,因此机器拥有具有该名称的指令并不有趣。任一类型的许多 ISA 都具有某种乘法指令,对于 CISC,它通常允许内存源操作数。
可以说,拥有push和pop指令在 CISC 中很常见,而在 RISC 中很少见。(ARM 有,大多数其他没有,尽管在 ARM(不是 Thumb)模式下,它只是 load-multiple / store-multiple 的一种特殊情况,它采用要操作的寄存器的位图。ARM 的入栈/出栈更加 CISCy与典型 CISC 上的单寄存器压入/弹出指令相比)。
RISC ISA 更可能是 3 操作数 ( add dst, src1, src2) 而不是add dst, src2,dst+=src但 AVR 是一个反例:它是具有 2 字节指令字的 8 位 RISC,因此它没有空间容纳每条指令 3 个寄存器号。
CISC 通常使用可变长度机器代码格式,因此某些指令只有 1 个字节,其他指令可能更长(例如 x86 将最大指令长度限制为 15 个字节)。拥有可变长度指令将在很大程度上排除 ISA 成为 RISC 的可能性,除了“压缩”指令格式(例如 RISC-V 的 ARM Thumb 或 RV32C),其中有 16 或 32 字节两种固定大小,而且仍然很容易找到指令边界,因为指令格式的设计目的是为了提高解码效率。(包括并行解码。)
但无论如何,没有一些指令列表可以用来编写可以为任何 RISC ISA 进行汇编的“RISC 程序”。不同的 RISC 架构之间存在太多差异,这样的事情是不可能的。CISC 也一样。
如果您学习一点汇编语言,或者例如查看 x86 与 RISC-V 的编译器输出,这一切都会变得更加明显。(或者如果你想尝试破译助记符的含义而头疼,PowerPC。:P)
如何从 GCC/clang 汇编输出中消除“噪音”?- 尤其是 Matt Godbolt 演讲的链接。
我理解RISC和CISC是架构。
他们不是;RISC和CISC是设计哲学。具体来说; RISC 理念是:更简单的 CPU 可以以更高的频率运行并且速度更快(除了更便宜和更容易设计之外)。
最初这基本上是正确的(特别是如果您愿意被“每秒两倍的指令(完成相同数量的工作需要两倍的指令)”所欺骗)。
然后(20 世纪 90 年代末)芯片达到了由物理/半导体制造引起的频率限制,并且由于其他原因(超标量/乱序、SIMD 支持等)而增加了复杂性;消除 RISC 的任何优势。
对此作出回应;RISC 的倡导者开始重新定义 RISC,试图掩盖 RISC 理念存在根本缺陷的事实。有些人认为 RISC 只是意味着“加载/存储架构”(有些人认为它意味着“无微代码”,另一些人认为它意味着“固定长度指令”,并且...... - 没有达成共识);但在所有情况下,他们都试图暗示现代“RISC”设计在各个方面(包括指令集中的指令数量)都与 CISC 一样复杂,但这并不重要。
发生的另一件事是 80x86 以向后兼容的方式增长;“扩展之上的扩展之上的扩展”会导致各种问题(例如,使用各种不同的前缀来增加操作码空间、减少代码占用空间、降低指令缓存的有效性、增加解码的复杂性等) ; 人们将 80x86 与现代 64 位 ARM 进行比较,并认为这是一个公平的“CISC 与 RISC”比较,而实际上这是“具有 40 多年包袱的旧 CISC 与包袱少得多的新的同样复杂的 ISA”比较。
| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |