Как преобразовать / закодировать отрицательное число как непосредственное в машинном коде MIPS - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу изменить эту инструкцию на двоичный или машинный код: addi $s3, $s1, -1000.

Я знаю, как кодировать код операции, rs и rt, но я не знаю, как преобразовать-1000 в двоичный файл.

Я знаю, как получить 1 дополнение и 2 дополнение.Но я не знаю, как выразить это в этой инструкции типа I.
Я просто не знаю, как выразить -1000 в последние 16 цифр в виде двоичного числа.

, поскольку 1000 (десятичное число)0000001111101000 из 16 цифр.

1's complement is      1111110000010111
                                     +1
=                      1111110000011000 2's complement

, поэтому ответ на всю инструкцию:

001000 10001 10011 1111110000011000
addi    rs    rt     immediate

Это правильно?

1 Ответ

0 голосов
/ 19 февраля 2019

Да, MIPS addi / addiu использует 16-разрядное дополнение со знаком 2 непосредственно в качестве младших 16 битов слова инструкции .Процессор подпишет знак до 32 (или 64) бит при декодировании.

Но учтите, что ori / xori / andi использование логической инструкции без знака 16-битнемедленные, которые расширяются от нуля до 32-битного (или 64-битного), поэтому -1000 не кодируется.

Для реализации xori $t0, $t1, -1000 вам необходимо создать 32-битный -1000в регистре с чем-то вроде addiu $at, $zero, -1000, тогда вы могли бы xori $t0, $t1, $at.($at - это «временный» регистр ассемблера, который используют псевдоинструкции, такие как bgt.)

...