Процедура декодирования машинного кода в инструкции по сборке - PullRequest
0 голосов
/ 10 сентября 2018

Я дал в назначении с машинным кодом как:

3c011001
34300000
8e080000
20090003
11200004
01094020
2129ffff
ae080000
08100004
2002000a
0000000c

и мне нужно расшифровать их, чтобы получить инструкции по сборке:

lui  $at, 0x1001
ori  $s0, $at, 0x0000
lw   $t0, 0($s0)
addi $t1, $zero, 3
beq  $t1, $zero, 0x0004
add  $t0, $t0, $t1
addi $t1, $t1, -1
sw   $t0, 0($s0)
j    0x00400010
addi $v0, $zero, 10
syscall

Какая процедура здесь при декодировании?

Я попытался java-программой преобразовать значения hexa в двоичные и на основе кодирования MIPS я использовал регистр переключения для двоичных значений, и я получил вывод:

0011 1100 0000 0001 0001 0000 0000 0001 lui     $at, 0x1001
0011 0100 0011 0000 0000 0000 0000 0000 ori     $s0, $at, 0x0000
1000 1110 0000 1000 0000 0000 0000 0000 lw      $t0, 0($s0)
0010 0000 0000 1001 0000 0000 0000 0011 addi    $t1, $zero, 3
0001 0001 0010 0000 0000 0000 0000 0100 beq     $zero, $t1
0000 0001 0000 1001 0100 0000 0010 0000 add     $t1, $t0, 0x4020
0010 0001 0010 1001 1111 1111 1111 1111 addi    $t1, $t1, 0x15151515
1010 1110 0000 1000 0000 0000 0000 0000 sw      $t0, 0($s0)
0000 1000 0001 0000 0000 0000 0000 0100 j       0x0004
0010 0000 0000 0010 0000 0000 0000 1010 addi    $v0, $zero, 0x00010
0000 0000 0000 0000 0000 0000 0000 1100 syscall
...