RISC против стека CISC

Вот цитата из книги «Введение в язык ассемблера» о RISC (по сравнению с CISC)

В MIPS мы могли писать процедуры без использования стека. Для большинства обычных процедур нам не нужно использовать стек. Наличие большого количества регистров позволяет использовать передачу параметров на основе регистров. Однако когда мы пишем рекурсивные процедуры, нам приходится использовать стек.

Меня очень смущает магия работы без стека. Любая стандартная программа имеет цепочку вызовов: Main()-> Function1() -> Function2() -> ... ->

Даже при большом количестве регистров (128) способ обычный:

  1. решите, какие регистры вы должны взять, и сохраните их контекст (обычно помещая в стек)
  2. обеспечивать операции
  3. возвращать состояния регистров (обычно из стека)

Никто не мешает нам использовать регистровую передачу параметров в CISC, особенно на современных процессорах. Итак, как можно сделать программу с RISC без стека?


person Artru    schedule 29.06.2012    source источник
comment
В приведенной вами цитате упоминаются только процедуры написания процедур без использования стека, а не целые программы. Но если ваша программа достаточно проста, вы пишете на ассемблере и у вас достаточно регистров, вы можете вручную выделить регистр для каждой переменной и параметра. Вы, вероятно, все равно в конечном итоге будете использовать стек для адреса возврата любых jsrs/вызовов/isrs и т.д.   -  person tinman    schedule 29.06.2012


Ответы (3)


Я думаю, что они имеют в виду передачу аргументов. В большинстве машин RISC аргументы передаются в регистрах, и обычно для этой цели зарезервировано около 6-8 регистров (и один для возвращаемого значения). Это не обязательно, это просто соглашение (и называется ABI или бинарный интерфейс приложения). Таким образом, если у функции меньше аргументов, чем регистров, и эти аргументы достаточно просты, чтобы поместиться в регистр, вам не нужно дополнительное пространство стека для передачи этих аргументов. На машинах CISC не так много регистров для аргументов, поэтому ABI указывает, что эти аргументы передаются в стеке.

Кроме того, на RISC-машинах доступно множество временных регистров (в частности, регистры сохранения вызываемого объекта) для хранения локальных переменных. На машинах CISC локальные переменные обычно размещаются в стеке, а регистры обычно зарезервированы для промежуточных значений.

person Nathan Binkert    schedule 13.07.2012

Компьютер с сокращенным набором команд (RISC /произносится как «риск»/) — это компьютер, который использует только простые инструкции, которые можно разделить на несколько инструкций, выполняющих операции низкого уровня в течение одного тактового цикла, как следует из его названия. Возьмем пример умножения двух чисел A = A * B; ‹‹‹======это оператор C. Для этой конкретной задачи процессор CISC должен быть подготовлен со специальной инструкцией (мы назовем ее «MULT»). При выполнении эта инструкция загружает два значения в отдельные регистры, умножает операнды в исполнительном блоке и, наконец, в-третьих, сохраняет произведение в соответствующем регистре. Таким образом, всю задачу умножения двух чисел можно выполнить одной инструкцией: MULT A,B ‹‹‹======это ассемблерный оператор

   MULT is what is known as a “complex instruction.” It operates directly  on the computer’s memory banks and does not require the programmer to  explicitly call any loading or storing functions.

Процессоры RISC используют только простые инструкции, которые могут быть выполнены за один такт. Чтобы выполнить точную последовательность шагов, описанных в подходе CISC, программисту необходимо закодировать четыре строки ассемблера: LOAD R1, A ‹‹‹====== это ассемблерный оператор LOAD R2,B ‹‹‹ ======это оператор сборки PROD A, B ‹‹‹======это оператор сборки STORE R3, A ‹‹‹======это оператор сборки Преимущество:- Каждая инструкция требует всего один тактовый цикл, вся программа будет выполняться примерно за то же время, что и многотактная команда «MULT». Эти «сокращенные инструкции» RISC требуют меньше транзисторов аппаратного пространства, чем сложные инструкции, оставляя больше места для регистров общего назначения. Поскольку все инструкции выполняются за одинаковое время (т. е. за один такт).
**Чтобы узнать больше о RISC и CISC, перейдите по следующей ссылке: - **

http://www.firmcodes.com/difference-risc-sics-architecture/

person Mohit Rohilla    schedule 02.12.2015
comment
Как это связано с использованием меньшего количества транзисторов, чем большего количества GPR? - person darshan; 22.12.2019

РИСК

  1. НЕТ инструкций меньше
  2. Продолжительность обучения фиксированная
  3. Он использует инструкцию загрузки/сохранения.
  4. Пример: ARM7, ARM9.
  5. Количество циклов, необходимых для выполнения программы, больше, например, если мы хотим произвести 2 нет, тогда мы используем следующий код Load a, 12 load b, 14, prod a, b store (место памяти), b

ЦИСК:

  1. НЕТ инструкций больше
  2. Продолжительность обучения варьируется
  3. Он не использует инструкцию загрузки/сохранения для доступа к памяти
  4. Пример: пентиум
  5. Количество циклов, необходимых для выполнения программы, меньше, например, для произведения двух не используется только MULT (ячейка памяти 1), ячейка памяти 2 и сохранение результата в ячейке памяти 1.
person pushpendra    schedule 30.01.2014
comment
-1: не отвечает на вопрос. Кроме того, вы ошибаетесь насчет циклов команд. Многие процессоры могут выполнять несколько инструкций одновременно. - person John Saunders; 30.01.2014