Dokumente und Mars-Simulator
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
########################################################################################
|
||||
# Wandelt eine vorzeichenbehaftete 32-Bit-Integer-Zahl in die 32-Bit-IEEE-754-Form #
|
||||
# um, legt diese an der Speicherstelle dst ab und gibt sie aus. #
|
||||
# Aufgabe zur Code-Analyse der Pruefungsklausur Computersysteme im SS14, urspruenglich #
|
||||
# in DLX-Assembler verfasst, uebersetzt und modifiziert von C. Hesseling im Jan 2017 #
|
||||
########################################################################################
|
||||
|
||||
.data
|
||||
src: .word 0xFFFFFF85
|
||||
dst: .word 0xDEADBEEF
|
||||
mask1: .word 0x80000000
|
||||
mask2: .word 0xFFFFFFFF
|
||||
mask3: .word 0x7FFFFF
|
||||
|
||||
message1: .asciiz "\nDie 32-Bit-IEEE-754-Darstellung ist binaer: "
|
||||
message2: .asciiz " und hexadezimal: "
|
||||
|
||||
.text
|
||||
# Laden der zu wandelnden Zahl und der Masken in die Register
|
||||
lw $t1, src
|
||||
lw $t2, mask1
|
||||
lw $t3, mask2
|
||||
lw $t4, mask3
|
||||
|
||||
# Bitweise UND-Verknuepfung mit Maske 1, Vorzeichentest, wenn Zahl positiv ist, springe zu m1
|
||||
and $t5, $t1 , $t2
|
||||
beqz $t5, m1
|
||||
|
||||
# Die beiden folgenden Zeilen werden nur ausgefuehrt, wenn die Ursprungszahl negativ ist:
|
||||
# Bitweise Negation durch die Verwendung von Maske 2, danach Addition von 1,
|
||||
# berechnet also das Zweierkomplement
|
||||
xor $t1, $t1, $t3
|
||||
addi $t1, $t1, 0x1
|
||||
|
||||
# Maske 1 in $t2 wird so verschoben, dass sie nun das Bit 30 statt Bit 31 extrahiert,
|
||||
# der Zaehler in $t6 wird mit 0 initialisiert
|
||||
m1: srl $t2, $t2, 1
|
||||
and $t6, $zero, $zero
|
||||
|
||||
# Schleife: Der Inhalt von $t1 wird solange nach links verschoben, bis ein
|
||||
# 1-Bit an Position 30 erkannt wird, dann wird zu m3 gesprungen,
|
||||
# die Anzahl der Verschiebungen wird in Register $t6 gespeichert:
|
||||
m2: and $t7, $t1, $t2
|
||||
bnez $t7, m3
|
||||
addi $t6, $t6, 1
|
||||
sll $t1, $t1, 1
|
||||
j m2
|
||||
|
||||
# In den folgenden Zeilen werden Charakteristik und Mantisse berechnet und
|
||||
# das Ergebnis in $t5 abgelegt:
|
||||
m3: # Berechnung der Charakteristik und Verknuepfung mit $t5
|
||||
addi $t7, $zero, 30
|
||||
sub $t6, $t7, $t6
|
||||
addi $t6, $t6, 127
|
||||
sll $t6, $t6, 0x17
|
||||
or $t5, $t5, $t6
|
||||
|
||||
# Berechnung der Mantisse und Verknuepfung mit $t5
|
||||
srl $t1, $t1, 0x7
|
||||
and $t1, $t1, $t4
|
||||
or $t5, $t5, $t1
|
||||
|
||||
# Ausgabe des Strings message1
|
||||
la $a0, message1
|
||||
li $v0, 4
|
||||
syscall
|
||||
|
||||
# Ausgabe des Ergebnisses binaer
|
||||
move $a0, $t5
|
||||
li $v0, 35
|
||||
syscall
|
||||
|
||||
# Ausgabe des Strings message2
|
||||
la $a0, message2
|
||||
li $v0, 4
|
||||
syscall
|
||||
|
||||
# Ausgabe des Ergebnisses hexadezimal
|
||||
move $a0, $t5
|
||||
li $v0, 34
|
||||
syscall
|
||||
|
||||
# Ablage des Ergebnisses an der Speicherstelle dst
|
||||
sw $t5, dst
|
||||
|
||||
# exit
|
||||
li $v0, 10
|
||||
syscall
|
||||
Binary file not shown.
Reference in New Issue
Block a user