2015-02-03 10 views
0

Я пытаюсь перевести следующий MIPS инструкцию в 32-битном машинного кода (с использованием тупоконечника):Перевести следующие инструкции MIPS в 32-битных инструкции

swc1 $f1 8($t0)

Что я сделал:

111001 00001 01000 00001000 

Я уверен только в переводе swc1, но не на других. Я много искал в googled, но не смог найти число $ f1. Я также прочитал эту тему: Link to a similar question Однако я все еще не уверен, что я должен использовать 00001 для $ f1. Что касается машинного кода смещения 8 и $ t0, я делаю это правильно?

+0

тупоконечника или прямой порядок байтов? – EOF

+0

Это большой конец, так как это в MIPS, я думаю. Поправьте меня если я ошибаюсь. Спасибо! – HoneyWine

+0

MIPS может быть либо. Кроме того, AFAIK, инструкция MIPS-инструкции не должны совпадать с контентом данных. – EOF

ответ

1

Поскольку инструкции 32 бит, формат машинного кода имеет место для 16 бит немедленным, следующим образом: (. Числа в скобках указывают битовые счетчики)

111001 Rs[5] Ft[5] Offs[16]

Обратите внимание, что $t0 является регистром # 8, а $f1 действительно является регистром # 1. В качестве такой вашей инструкции является:

111001 01000 00001 0000000000001000 
= 1110 0101 0000 0001 0000 0000 0000 1000 = E5 01 00 08 

Конечно, Вы можете проверить его с помощью доверенного ассемблер:

1 0000 E5010008  swc1 $f1, 8($t0) 
+0

Спасибо за объяснение! Теперь я понимаю. – HoneyWine