Я просто хочу проверить, что мое понимание этих двух понятий правильное, поскольку я пытался завершить проект, и, хотя все работает в моих ожиданиях, он почти не выполняет тестовые примеры и вводит случайное значение ...Разделитель адресов MIPS Адресация алгоритма и выделение кода из двоичного кода команды?
в принципе, цель проекта заключается в выписывать команду перехода на консоль в таком виде:
BranchName $ S, [$ т, если применимо] 0xAbsoluteAddressOfBranchTargetInstruction
Edit: Уточнение: Я пишу это в MIPS. Идея заключается в том, что я получаю адрес памяти в $ a0, заданный программе кодом моего инструктора (я пишу функцию). Адрес предназначен для слова, содержащего инструкцию MIPS. Я сделать следующее:
- Получить инструкции
- инструкция изолят опкод и вывод его имени для регистрации (т.е. опкод 5, выход BNE), ничего не делать, если это не команда ветвления.
- Изолировать $ s, $ t и выводить как применимо (т. Е.: Нет $ t для bgez)
- Использовать смещение в инструкции перехода для вычисления его абсолютного адреса (адреса целевой команды, следующего за ветвью) и вывода в шестигранный. Для целей этого расчета адрес команды перехода ($ a0) считается $ pc.
IE:
BEQ $ 6, $ 9, 0x00100008
Во-первых, это мое понимание расчета ветви правильно?
- PC -> PC + 4
- Младшие 16 битов инструкции
- < < 2 эти нижние биты
- Добавить PC + 4 и влево сдвинуты нижние 16 бит (только нижний 16, хотя) ,
Во-вторых, может кто-нибудь сказать мне, какие биты мне нужно изолировать, чтобы знать, с какой ветвью я имею дело? Я думаю, что у меня есть они (первые 6 для BEQ/BNE, первые 16 с $ s замаскированы для других), но я хотел дважды проверить.
О, и, наконец, я должен ожидать отклонения от SPIM от его работы в системе Intel x86 Windows и системе Intel x86 Linux? Я получаю глупый глюк, и я не могу его изолировать от моих обработок адресных обработок, но он появляется только при запуске тестовых скриптов, которые мой проф дал нам в Linux (.sh); работает прямо в spim на любой ОС, кажется, работает ... при условии, что мое понимание того, как выполнять ручные вычисления (как указано выше), является правильным.
Я не думаю, что там будет разница между Windows и Linux, поскольку SPIM использует базовую «работоспособность» оборудования. – Zack
Попробуйте использовать MARS вместо SPIM и посмотрите, получите ли вы тот же ответ. (http://courses.missouristate.edu/KenVollmar/mars/) – Zack
@Zack Считаете ли вы, что это имеет какое-то отношение к моим чистым алгоритмическим соображениям? Я где-то читал, что Spim не беспокоит ПК + 4, что может привести к ошибке? –