0

私は QTSPIM を使用していますが、MIPS は 32 ビットしか処理できないことを知っています。これも課題です。ただそこに置くだけです。

したがって、目的は factorial(14) を表示できるようにすることです。現時点では、プログラムは factorial(12) までしか上がらないと思います。64ビットをサポートできるようになるのはどれほど難しいでしょうか。上位32ビットと下位32ビットを保存する必要があることは多少知っていますか?

誰かがヒントやサンプルコードを提供できますか?

    # Iterative program to compute n!

            # The value n is entered by the user

            .globl  main
main:
            li      $v0, 5
            syscall                 # Get user input for n
            move    $s0, $v0        # s0: n

            move    $a0, $s0        # put n into first parameter
            jal     factorial
            move    $s1, $v0        # s1: n!

            move    $a0, $s1    
            li      $v0, 1
            syscall                 # display n!            

            li  $v0, 10
            syscall

#-----------------------------------
            # Factorial Function
            #
            # Parameters:  a0 - n
            # Return Values: V0 - n!
factorial:
            #---------------------- Stuff at beginning of function
            addi    $sp, $sp, -12   # space for 3 values
            sw      $ra, 0($sp)
            sw      $s0, 4($sp)
            sw      $s1, 8($sp)

            #---------------------- body of function
            move    $s0, $a0        # s0: n
            li      $s1, 1          # s1: n! (init to 1)
            li      $t1, 1          # t1: loop exit test value
floop:      ble     $s0, $t1, done  # when n decrements down to 1, exit
            mul     $s1, $s1, $s0   # s1 = s1 * n
            addi    $s0, $s0, -1    # n--
            j       floop

            #---------------------- Stuff at end of function
done:       move    $v0, $s1        # put n! into return register
            lw      $ra, 0($sp)
            lw      $s0, 4($sp)
            lw      $s1, 8($sp)
            addi    $sp, $sp, 12
            jr      $ra             # TTFN
4

1 に答える 1

0

乗算命令の 2 オペランド形式を使用すると、andMULT $s1,$s0の 64 ビット積が特殊レジスタおよび特殊レジスタに配置されます。$s1$s2HILO

この機能を使用して、追加の作業で 64 ビットの階乗を計算できます。具体的には、積が 32 ビットを超えると、小学校の長さのかけ算に相当するコードを記述する必要があります。

于 2012-10-11T23:35:41.067 に答える