Я перевел этот код до сих пор, и я не понимаю, как вычислить сумму 16-разрядного адреса.Перевести следующий код машинного языка (0x2237FFF1) в сборку MIPS
0x2237FFF1
Для бинарного
0010 0010 0011 0111 1111 1111 1111 0001
Теперь я читал опкод (001000) и знаю, что это я типа и addi
инструкция
Теперь я группируя бинарник в I-type
op rs rt imm
001000 10001 10111 1111111111110001
8 17 23 ?
Глядя на справочный лист MIPS и выяснили, что инструкция должна быть
addi $s7,$s1,????
Я стеком здесь и не знаю метод, как определить 16-битный непосредственный адрес в Genral.
Вы уже нашли сразу, это '1111111111110001'. Можете ли вы преобразовать из двоичного кода? Обратите внимание, что непосредственные символы расширены, поэтому на самом деле '-15' в десятичном формате. – Jester
* «немедленный адрес» * звучит подозрительно для меня, как правило, в Assembly это либо * немедленное * (значение, непосредственно закодированное в инструкции, в вашем случае '0xFFF1' => знак расширен до 32b =' 0xFFFFFFF1' = '-15') , или * адрес * в одном из возможных режимов адресации, один режим, похожий на немедленный, - 'pc + offset', в таком случае это будет адрес' pc-15'. Я пишу это как общую информацию, я не проверял конкретный код операции в справочном руководстве MIPS, поэтому я не знаю, существует ли такой режим адреса в MIPS, но, я думаю, у вас есть немедленный вариант. – Ped7g
Или даже абсолютная адресация будет напоминать немедленное кодирование еще больше, например, когда инструкция содержит абсолютный адрес памяти для работы, но это очень маловероятно для RISC-подобных процессоров, как обычно, они имеют фиксированные инструкции размера «word» и абсолютные адрес обычно требует целого «слова», чтобы определить его. Поэтому, если какая-либо адресация задействована, тогда она будет на 99% относительной, используя значение как смещение с расширением знака. – Ped7g