Как преобразовать / закодировать отрицательное число как непосредственное в машинном коде 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, но я считаю, что это самый простой и быстрый способ. Надеюсь, поможет!