Почему код операции ALU для lw и sw равен 00?

Я пытаюсь понять пути данных и то, как это работает в программировании MIPS. Часть занижения заключается в понимании кодов операций ALU, которые, по сути, сообщают ALU, какие операции выполнять. Например, если мы реализуем базовые функции AND, OR, ADD, SUB, NAND и NOR, мы получим базовое распределение кодов операций ALU, т. е. AND равно 00, OR равно 01, ADD равно 10, SUB равно 10, NAND равно 10 и NOR равно 01. Но я не уверен, что понимаю, почему код операции ALU для sw и lw равен 00?

введите здесь описание изображения


person Ski Mask    schedule 21.02.2020    source источник
comment
Откуда вы получаете эту информацию об коде операции ALU для lw и sw?   -  person EOF    schedule 21.02.2020
comment
@EOF Я получил их из слайдов своей лекции, но у них нет никакого объяснения, поэтому я не был уверен, почему ответ 00.   -  person Ski Mask    schedule 22.02.2020
comment
Формат для (reg-reg) инструкций ALU (кодировка R-типа) в MIPS - 6 bit opcode, 5 bit rs, 5 bit rt, 5 bit rd, 5 bit SHAMT, 6 bit ALUop. Формат для sw и lw с общей регистровой базой (I-тип) - 6 bit opcode, 5 bit rs, 5 bit rt, 16 bit immediate. Где вы видите ALUop в инструкциях загрузки/сохранения?   -  person EOF    schedule 22.02.2020
comment
Вы правы, но если у нас есть OR, который является R-типом, тогда код операции действительно равен 000000, однако код операции ALU при использовании 2-битного сигнала равен 01. Кроме того, в нашем листе говорится, что последние 6 бит для R -Type называется функцией, а не ALUop.   -  person Ski Mask    schedule 22.02.2020
comment
Есть две возможности: 1) Вы неправильно поняли диаграммы ваших лекторов, но, поскольку вы не разместили их здесь, мы не можем диагностировать источник вашего непонимания. 2) Ваш лектор сделал ошибку на своих диаграммах, но так как вы их здесь не разместили...   -  person EOF    schedule 22.02.2020
comment
Я просто добавил их. Первоначально на немецком языке, большая часть материалов на английском, так что это не должно быть проблемой.   -  person Ski Mask    schedule 22.02.2020
comment
Я не могу не чувствовать, что это может быть не все, что требуется, чтобы следовать вашим мыслям. В любом случае, вы можете заметить, что инструкции R-типа управляют АЛУ через последние 6 бит инструкции (см. Инструкцию [5-0] внизу изображения), в то время как lw и sw определенно не управляют АЛУ. АЛУ таким образом, потому что эти биты сразу поступают в АЛУ как операнд (Инструкция [15-0]). Скорее, ALUop из компонента Control представляет собой 2-битный селектор для мультиплексора, решившего использовать либо функциональное поле в инструкции, либо напрямую переопределить некоторые коды операций.   -  person EOF    schedule 22.02.2020


Ответы (1)


В MIPS существует только один режим адресации: база + смещение.

В инструкциях загрузки и сохранения АЛУ выполняет это вычисление адреса, которое выполняется с помощью сложения. Таким образом, АЛУ выполняет сложение в: регистр + расширенный знак непосредственно, что формирует адрес, отправляемый в память данных.

person Erik Eidt    schedule 21.02.2020
comment
Но разве OP-код для сложения (ALU - 2 бита) не равен 10? Итак, если мы выполняем сложение, разве код операции для lw и sw не должен быть равен 10? - person Ski Mask; 21.02.2020
comment
ALUOP — 00 (2 бита), а управление ALU — 010 (3 бита): сложение. Он преобразуется из 00 в 010 системой управления ALU. Я полагаю, что вы путаете ALUOP и ALUControl, но некоторые слайды и тексты также делают это. В некоторых текстах управление ALU также описывается как 4-битное. (Кстати, это внутренние детали реализации процессора, поэтому программа может использовать разные значения без ведома.) - person Erik Eidt; 22.02.2020
comment
Основной элемент управления предоставляет 00 как ALUOp из addi, lw и sw, и это сообщает элементу управления ALU вывод кода для добавления в ALU. Главный элемент управления предоставляет 01 в качестве ALUOP для ветвей, что заставляет элемент управления ALU выводить код для вычитания в ALU. Для остальных главный элемент управления выводит 1x, что указывает элементу управления ALU искать правильную операцию в битах func[5:0]. - person Erik Eidt; 22.02.2020