我正在尝试制作一个程序,该程序可以进行以下程序中的计算。我在QtSpim中运行它,但是它显示了有关如何加载无穷大以及可能还有其他lwc1的错误,并且我不知道如何实际加载它们。我知道该程序将在我的计算结果中显示错误,该练习仅是为了练习,并查看MIPS在任何情况下如何工作。
.text
.globl main
main:
la $a0, msgx #Print msgx
li $v0, 4
syscall
li $v0, 6 #Type x
syscall
s.s $f0, float1
la $a0, endl #New line
li $v0, 4
syscall
la $a0, msgy #Print msgy
li $v0, 4
syscall
li $v0, 6 #Type y
syscall
s.s $f0, float2
la $a0, float1 #load x
l.s $f1, 0($a0)
la $a1, float2 #load y
l.d $f2, 0($a1)
la $s0, zero #load 0.0
l.s $f3, 0($t0)
la $s1, plus #load plus infinity
lwc1 $f4, 0($t1)
la $s2, minus #load minus infinity
lwc1 $f5, 0($t2)
la $s3, NaN #load NaN
lwc1 $f6, 0($t3)
mul.s $f0, $f1, $f2 # x * y
#mul.s $f0, $f1, $f5 # x * (minus inf)
#div.s $f0, $f2, $f3 # y / 0
#div.s $f0, $f3, $f3 # 0 / 0
#mul.s $f0, $f3, $f4 # 0 * (plus inf)
#mul.s $f0, $f4, $f5 # (plus inf) * (minus inf)
#add.s $f0, $f4, $f5 # (plus inf) + (minus inf)
#mul.s $f0, $f1, $f6 # x * NaN
mov.s $f12, $f0
li $v0, 2
syscall
li $v0, 10
syscall
.end main
.data
msgx: .asciiz "Write x: "
endl: .asciiz "\n"
msgy: .asciiz "Write y: "
float1: .float 0.0 # $f1
float2: .float 0.0 # $f2
zero: .float 0.0
plus: .word 7F800000
minus: .word FF800000
NaN: .word FFFFFFFF
.text
.globl main
main:
la $a0, msgx #Print msgx
li $v0, 4
syscall
li $v0, 6 #Type x
syscall
s.s $f0, float1
la $a0, endl #New line
li $v0, 4
syscall
la $a0, msgy #Print msgy
li $v0, 4
syscall
li $v0, 6 #Type y
syscall
s.s $f0, float2
la $a0, float1 #load x
l.s $f1, 0($a0)
la $a1, float2 #load y
l.s $f2, 0($a1)
la $s0, zero #load 0.0
lwc1 $f3, 0($s0)
la $s1, plus #load plus infinity
lwc1 $f4, 0($s1)
la $s2, minus #load minus infinity
lwc1 $f5, 0($s2)
la $s3, NaN #load NaN
lwc1 $f6, 0($s3)
mul.s $f0, $f1, $f2 # x * y
mul.s $f7, $f1, $f5 # x * (minus inf)
div.s $f8, $f2, $f3 # y / 0
div.s $f9, $f3, $f3 # 0 / 0
mul.s $f10, $f3, $f4 # 0 * (plus inf)
mul.s $f11, $f4, $f5 # (plus inf) * (minus inf)
add.s $f13, $f4, $f5 # (plus inf) + (minus inf)
mul.s $f14, $f1, $f6 # x * NaN
la $a0, endl #New line
li $v0, 4
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f0
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f7
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f8
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f9
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f10
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f11
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f13
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
mov.s $f12, $f14
li $v0, 2
syscall
la $a0, endl #New line
li $v0, 4
syscall
li $v0, 10
syscall
.end main
.data
msgx: .asciiz "Write x: "
endl: .asciiz "\n"
msgy: .asciiz "Write y: "
float1: .float 0.0 # $f1
float2: .float 0.0 # $f2
zero: .float 0.0
plus: .word 0x7F800000
minus: .word 0xFF800000
NaN: .word 0x7FBFFFFF