Jump-Anweisung in MIPS Assembly

Hier einige MIPS-Assembler-code schrieb ich zum testen der Sprung-Anweisung:

addi $a0, $0, 1
j next
next:
j skip1
add $a0, $a0, $a0
skip1:
j skip2:
add $a0, $a0, $a0
add $a0, $a0, $a0
skip2:
j skip3
loop:
add $a0, $a0, $a0
add $a0, $a0, $a0
add $a0, $a0, $a0
skip3:
j loop

Wenn ich den assembler, hier ist das Ergebnis:

[0x000000]  0x20040001  # addi $a0, $zero, 1 ($a0 = 1)
[0x000004]  0x08000002  # j 0x0002 (jump to addr 0x0008)
[0x000008]  0x08000004  # j 0x0004 (jump to addr 0x0010)
[0x00000C]  0x00842020  # add $a0, $a0, $a0 ($a0 = $a0 + $a0)
[0x000010]  0x08000007  # j 0x0007 (jump to addr 0x001C)
[0x000014]  0x00842020  # add $a0, $a0, $a0 ($a0 = $a0 + $a0)
[0x000018]  0x00842020  # add $a0, $a0, $a0 ($a0 = $a0 + $a0)
[0x00001C]  0x0800000B  # j 0x000B (jump to addr 0x002C)
[0x000020]  0x00842020  # add $a0, $a0, $a0 ($a0 = $a0 + $a0)
[0x000024]  0x00842020  # add $a0, $a0, $a0 ($a0 = $a0 + $a0)
[0x000028]  0x00842020  # add $a0, $a0, $a0 ($a0 = $a0 + $a0)
[0x00002C]  0x08000008  # j 0x0008 (jump to addr 0x0020)

Blick auf den Maschinen-code für die jump-Anweisungen, das ist, was ich sehe:

1st jump (just jumps to next instruction) 0x08000002
2nd jump (skips 1 instruction) 0x08000004
3rd jump (skips 2 instructions) 0x08000007
4th jump (skips 3 instructions) 0x0800000B
5th jump (skips 3 instructions backwards) 0x08000008

Blick auf diese Anleitung, es sieht aus wie der Maschinen-code beginnt mit einem 08 für die jump-Anweisung, und die Zahl am Ende sagt die jump-Anweisung, wohin Sie gehen. Aber ich kann nicht herausfinden, wie diese Zahl berechnet wird. Auch, es ist nichts zu zeigen mir, dass der 5. Sprung rückwärts springen.

Wie ist den Sprung Wert berechnet?

  • warum verwenden Sie 3 add $a0, $a0, $a0? warum nicht verwenden sll $a0, $a0, 3
  • lassen Sie mich daran erinnern, dass Sie verdienen es, ein cookie für diese
InformationsquelleAutor node ninja | 2011-10-24
Schreibe einen Kommentar