оба операнда должны быть загружены в регистры из памяти, после чего операция выполняется, и результат снова сохраняется в памяти из регистров.
Это немного вводит в заблуждение или упрощено.
Во-первых, это происходит, только если все операнды находятся в памяти, как в следующем выражении: a[i] = b[i] + c[i];
где у вас будет две загрузки и одно хранилище.
Напротив, выражение, подобное i = i + 1;
, обычно уже будет иметь i
в регистре, так что это будет всего одна инструкция - никаких загрузок и сохранений.
Во-вторых, архитектуры без загрузки / сохранения могут express добавить память с меньшим количеством инструкций, но им все равно придется выполнять ту же работу: извлекать операнды из памяти, добавлять в ЦП и сохранять результат возвращается в память.
Следующий оператор, который может различать инструкции между операциями ALU и доступом к памяти.
Простой ответ заключается в том, что загрузка и сохранение и Все операции ALU имеют разные коды операций. Код операции сообщает ЦП (а также программным дизассемблерам и людям) формат инструкции, и этот формат может также иметь дополнительный код операции, который дополнительно различает операции. (В RIS C V первые два бита кода операции информируют о размере инструкции относительно того, 32 или 16 битов, в то время как больше битов используется для 48-битных и больших инструкций.)
Подход просмотр полей кода операции и, возможно, вторичных полей кода операции не является уникальным для архитектур загрузки / хранения - все архитектуры наборов инструкций используют поля кода операции, например, для понимания длины инструкции (если это необходимо для этой реализации) и числа, значения и положение / размеры его операндов. См. Также: https://en.wikipedia.org/wiki/Instruction_set_architecture#Instruction_encoding