MIPS浮点数,无穷大和微商

问题描述 投票:0回答:1

我正在尝试制作一个程序,该程序可以进行以下程序中的计算。我在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
mips mips32
1个回答
0
投票
.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
© www.soinside.com 2019 - 2024. All rights reserved.