Как преобразовать / закодировать отрицательное число как непосредственное в машинном коде MIPS

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

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

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

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

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

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

001000 10001 10011 1111110000011000
addi    rs    rt     immediate

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

2 ответа

Решение

Да, 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 использовать.)

Есть довольно простой способ конвертировать положительное число в отрицательный комплимент (комплимент 2). Сначала вы найдете 1 комплимент, который просто меняет знак каждого бита. Затем добавьте 1, чтобы получить 2 комплимента. Вот пример с number 10 (using 16 bits):Начните с положительного числа:

00000000 00001010

Получите 1 комплимент, поменяв местами биты:

11111111 11110101

Затем добавьте 1:

11111111 11110101
+ 1
-----------------
11111111 11110110 = -10

Вот и все. Чтобы преобразовать отрицательное число в положительный комплимент, просто переверните процесс: вычтите 1 из числа, затем получите комплимент 1 (поменяйте местами знак каждого бита). Есть и другие способы получить комплимент 2, но я считаю, что это самый простой и быстрый способ. Надеюсь, поможет!

Другие вопросы по тегам