MIPS BNE Преобразование машинного кода
Я пытаюсь преобразовать около 25 строк программы MIPS из машинного кода в инструкции.
Когда я конвертирую машинный код 0x1620fff9
, это дает следующее: 000101 10001 00000 1111 1111 1111 1001
Я понимаю, что это I-формат, и инструкция BNE
с целевым регистром $17
и источник $0
Тем не менее, непосредственный адрес - это то, что я запутался.
Как 1111 1111 1111 1001
число со знаком, дополнение к его двум дает результат -7
, Я просто не знаю, что делать с таким результатом. Симулятору MARS нужна метка для того, куда он должен переходить, но мне неясно, что делать. Программа, которую я конвертирую, имеет только основную функцию и функцию печати.
Спасибо
1 ответ
Получается, что MARS и QTSpim по-разному обрабатывают эти инструкции:
MARS всегда выпрыгивает из инструкции после инструкции ветвления, что и должно делать конвейерная машина;
QtSPIM прыгает из инструкции перехода, что проще для понимания.
В MARS инструкция bne - 0x1620fff8, а в QtSPIM - 0x1620fff9.
Наш профессор пошел на уступки за разные результаты, но я подумал, что это может пригодиться кому-то в будущем.