-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy paths4a.s
executable file
·79 lines (54 loc) · 1.02 KB
/
s4a.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
.data
signe: .word 0
exponent: .word 0
mantissa: .word 0
cfixa: .word 0x87D18A00
cflotant: .float 0.0
.text
.globl main
main:
addiu $sp, $sp, -4
sw $ra, 0($sp)
la $t0, cfixa
lw $a0, 0($t0) # a0 cfixa
la $a1, signe # a1 signe
la $a2, exponent # a2 exponent
la $a3, mantissa # a3 mentissa
jal descompon
la $a0, signe
lw $a0,0($a0)
la $a1, exponent
lw $a1,0($a1)
la $a2, mantissa
lw $a2,0($a2)
jal compon
la $t0, cflotant
swc1 $f0, 0($t0)
lw $ra, 0($sp)
addiu $sp, $sp, 4
jr $ra
descompon:
slt $t0, $a0, $zero
sw $t0, 0($a1)
sll $a0, $a0, 1 # eliminem el signe
if: bne $a0, $zero, else # si cf != 0 saltem al else
move $t2, $zero
b fielse
else: li $t2, 18
while: blt $a0, $zero, fiwhile # saltem si cf < 0
sll $a0, $a0, 1
addi $t2, $t2, -1
b while
fiwhile:sra $a0, $a0, 8
li $t0, 8388607
and $a0, $a0, $t0
addi $t2, $t2, 127
fielse: sw $t2, 0($a2)
sw $a0, 0($a3)
jr $ra
compon: sll $a0, $a0, 31
sll $a1, $a1, 23
or $t0, $a0, $a1
or $t0, $t0, $a2
mtc1 $t0, $f0
jr $ra