Я хочу изменить эту инструкцию на двоичный или машинный код:
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
Это правильно?
Да, 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
.)