Я думаю, что они используют столбец ПК, чтобы указать следующий ПК значение после после выполнения инструкции.
Для большинства инструкций (например, арифметических и логических) следующим ПК является LC + 4 - так работает последовательное выполнение.
Однако для инструкций условного перехода это либо следующий ПК (LC + 4), или целевой адрес филиала (ПК + 4 + немедленный * 4).
Для (безусловных) инструкций перехода, следующий ПК является либо адресом, вычисленным по метке (j label
или jal label
)) или значение в регистре (jr $ra
).
Для инструкции BNE, поскольку она является условной ветвью, тогда в абстрактном следующем ПК может быть одно из двух разных значенийи так, нам нужно знать состояние - значения в регистрах - прежде чем мы сможем выбрать одно из двух возможных значений следующего ПК, потому что нам нужно знать, взята ли условная ветвь или нет.Если взято следующее ПК - PC+4+immediate*4
, а если не взято, это просто PC+4
.Он берется, если указанное условие истинно (т. Е. Два регистра равны и не равны в битовой комбинации).
0/32, 22, 17, 12:
код операции = 0 ... 0 означает инструкцию R-типа.Поле кода операции находится в битах 31-26.Итак, когда все эти биты равны 0, у нас есть инструкции R-типа.Инструкция R-типа имеет 3 поля регистра (биты 25-21, 20-16, 15-11), поле SHAMT (биты 10-6) и поле FUNC (биты 5-0).
Все инструкции R-типа имеют одинаковый код операции 0 и различаются по полю FUNC.Значение FUNC для инструкции ADD составляет 32 (что в двоичном виде составляет 100000 - можете ли вы определить это значение в двоичном расширении для инструкции ADD
?).
22 * 1044 *, 17 и 12 являются регистрационными номерами, и онисоответствуют дружественным именам ассемблера $s6
, $s1
и $t4
соответственно.