Преобразование кода сборки в машинный код.Что идет в этом счетчике ПК? - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть это назначение:

enter image description here

В этом примере, каковы 0/32, 22, 16, 12 числа в третьем ряду?

enter image description here

В приведенном выше тексте почему ПК = 4?Я думал, что это должно равняться текущему местоположению инструкции = LC?

Я где-то читал, что для инструкции BNE счетчик ПК обрабатывается по-другому, так что это адрес слова.Так что будет в колонке ПК для инструкции BNE?Я знаю, что 4 байта = 1 слово, поэтому, если бы BNE был на ПК = 28 байтов, то это было бы 7 слов?Тем не менее, он должен вернуться к метке next, которая находится в 8 байтов = 2 слова ... так что же происходит в столбце?Должен ли я ввести -5, чтобы подразумевать, что следующая инструкция находится на втором слове?

РЕДАКТИРОВАТЬ

Я заполнил это, но я все еще застрял:

enter image description here

1 Ответ

2 голосов
/ 21 сентября 2019

Я думаю, что они используют столбец ПК, чтобы указать следующий ПК значение после после выполнения инструкции.

Для большинства инструкций (например, арифметических и логических) следующим ПК является 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 соответственно.

...