Преобразование машинного кода MIPS BNE

Я пытаюсь преобразовать около 25 строк программы MIPS из машинного кода в инструкции.

Когда я конвертирую машинный код 0x1620fff9, он дает следующее: 000101 10001 00000 1111 1111 1111 1001

Я понимаю, что это I-формат, а инструкция - BNE с целевым регистром $17 и источником $0, однако меня смущает непосредственный / адрес.

Поскольку 1111 1111 1111 1001 является числом со знаком, его дополнение до двух дает результат -7. Я просто не знаю, что мне делать с таким результатом. Симулятору MARS нужна метка, указывающая, куда он должен разветвляться, но я не понимаю, что делать. Программа, которую я конвертирую, имеет только главную функцию и функцию печати.

Спасибо


person Brian Jay    schedule 17.03.2016    source источник
comment
Добавьте метку в соответствующую инструкцию или используйте символ для текущего адреса, который обычно ., $ или * (в зависимости от ассемблера). Вы можете написать что-то вроде bne $s0, $t0, .-7 (при необходимости отрегулируйте смещение).   -  person Jester    schedule 17.03.2016
comment
Смещение в инструкции перехода - это смещение word, поэтому вам нужно умножить на 4, чтобы получить смещение в байтах, давая bne $s0, $t0, . - 28   -  person markgz    schedule 18.03.2016
comment
Спасибо за введение, ребята. Всякий раз, когда MARS видит команду bne, он говорит, что ожидает «bne $ t1, $ t2, label», поэтому оба приведенных выше решения, похоже, не работают для mars. Есть другие мысли?   -  person Brian Jay    schedule 20.03.2016


Ответы (1)


Получается, что MARS и QTSpim обрабатывают эти инструкции по-разному:

  • MARS всегда переходит от инструкции к инструкции перехода, что и должно делать конвейерная машина;

  • QtSPIM переходит от инструкции ветвления, что проще для понимания.

  • В режиме MARS инструкция bne имеет вид 0x1620fff8, а в QtSPIM - 0x1620fff9.

Наш профессор пошел на уступки из-за разницы в результатах, но я подумал, что это может быть кому-то полезно в будущем.

person Brian Jay    schedule 11.04.2016
comment
Некоторые люди считают, что раскрытие деталей конвейера в ISA (например, слот задержки ветвления или практически все, что касается IA-64), является большой ошибкой дизайна. Это неудобство, которое, например, не принесет пользы для будущих реализаций архитектуры, которые выполняют неупорядоченное выполнение. Линус Торвальдс писал о подобных вещах на форумах realworldtech.com (но они не доступны для поиска, xD). - person Peter Cordes; 11.04.2016