Требуется разъяснение о доступе к памяти (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 в адрес памяти, а затем использовать его для операции память-память.