Как преобразовать инструкции MIPS в гекс с большими числами? - PullRequest
2 голосов
/ 21 февраля 2011

Как мне преобразовать инструкцию MIPS, такую ​​как addi $1,$2,90000

Если я начну с кода операции 001 000, поля функции 10 000 и соответствующих регистров для полей "rs", "rt", то от 90000 до шестнадцатеричного числа будет 5 цифр, а не 4 .... так что мой общее шестнадцатеричное представление не помещается в 8 цифр.

На самом деле, меня больше интересует, как перейти от шестнадцатеричного кода к MIPS, когда существует огромное число, которое портит шестнадцатеричное представление.

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Обычно ассемблеры MIPS реализуют «синтетические инструкции», которые превращаются в несколько реальных команд. Например, синтетическая инструкция addi с 32-разрядным непосредственным операндом может превратиться в lui (загрузить первые 16 бит непосредственной константы в регистр назначения), за которым следует addi (добавить в нижний 16 битов непосредственной константы), за которыми следует add (добавить в регистр источника).

Итак, нет единой инструкции, которая соответствует addi $1,$2,90000. Если ваш ассемблер примет это, то при разборке того, что он создает (или проверке файла листинга, если он его создаст), вы обнаружите, что он фактически сгенерировал несколько машинных инструкций для этой единственной строки сборки.

1 голос
/ 21 февраля 2011

Согласно http://en.wikibooks.org/wiki/MIPS_Assembly/Instruction_Formats, непосредственные значения не более 16 бит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...