Требуется разъяснение о доступе к памяти (ISA/MIPS)

Я делаю теоретическое задание, где я создаю свой собственный ISA. Я делаю дизайн памяти-памяти, где ALU получает входы из памяти и выводит обратно в память без использования каких-либо регистров. Это устаревший метод, и регистры теперь более эффективны, но это не имеет значения для моего назначения.

Мой вопрос:

Если кодировка одной из моих инструкций выглядит следующим образом

opcode|destination|value1|value2|function

00 0001 0011 1100 00

функция "00" обозначает сложение, а код операции 00 обозначает операцию АЛУ.

Мой RTN выглядит так для этой функции:

Mem[0001] <--- Mem[0011] + Mem[1100]

0001, 0011, 1100 - это адреса памяти, я пытаюсь суммировать значения ВНУТРИ этих адресов памяти и затем сохранять их в адресе памяти 0001 (перезаписывая его).

Таким образом, если значение в адресе памяти 0011 было "2", а значение в адресе памяти 1100 было "3", моя инструкция сохраняла бы "5" в адресе памяти 0001.

Также допустим, что я хочу перезаписать значение "3" в адресе 1100 на "4". Я могу просто сделать Mem[1100] <--- 0100 (двоичный для 4)?

Правильно ли то, что я реализую? Или я подхожу к адресации памяти совершенно неправильно?

1 ответ

Решение

Эти архитектуры обычно имеют один аккумулятор. В противном случае вам понадобится двухпортовый ОЗУ для доступа к двум операндам одновременно.

Вы можете зафиксировать одно значение памяти, но это менее универсальный аккумулятор.

Операции записи в память выполняются с другой стороны часов / тактов, чем операции чтения.

Операции с памятью используют другой код операции, нежели операции с памятью того же типа.

Наконец, если ваш const слишком велик для вашего размера инструкции, вам нужно сначала скопировать const в адрес памяти, а затем использовать его для операции память-память.

Другие вопросы по тегам