Load Store Architecture如何区分alu操作和内存访问指令

How Load Store Architecture differentiatiate between alu operations and memory access instruction

我正在研究 RiscV 架构。我开始了解到,与其他 RISC 架构一样,它也是一种加载存储架构。我在 google 上搜索并了解了加载存储架构,它告诉我在加载存储架构中执行例如加法运算的操作,两个操作数都必须从内存加载到寄存器,然后执行操作,结果再次出现从寄存器存储在内存中。下一条语句是它可以区分 ALU 操作和内存访问之间的指令。 谁能告诉我它是怎么做到的。

both the operands must be loaded to registers from memory and then operation is performed and result is again stored in the memory from registers.

这有点误导或过于简单化了。

首先,只有当操作数都在内存中时才会发生这种情况,例如在以下表达式中:
a[i] = b[i] + c[i];
您将有两次加载和一次存储。

相比之下,像 i = i + 1; 这样的表达式通常在寄存器中已经有 i,所以这只是一条指令 — 没有加载或存储。

其次,non-load/store 架构可能能够用更少的指令来表达内存加法,但它们仍然必须做同样的工作:从内存中获取操作数,在 CPU 中添加,并将结果存回内存。

The next statement that is it can differentiate between instruction between ALU operations and memory access.

简单的答案是加载和存储以及 ALU 操作都有不同的操作码。操作码告诉 CPU(以及软件反汇编程序和人类)指令格式,并且该格式还可能具有进一步区分操作的辅助操作码。 (在 RISC V 上,操作码的前两位告知指令大小是 32 位还是 16 位,而更多位用于 48 位和更大的指令。)

查看操作码字段和可能的辅助操作码字段的方法并不是 load/store 架构所独有的——所有指令集架构都使用操作码字段,例如了解指令的长度(如果需要的话) implementation) 及其操作数的数量、含义和 position/sizes。另见:https://en.wikipedia.org/wiki/Instruction_set_architecture#Instruction_encoding