Может ли кто-нибудь помочь мне с хранением кадров? (Сборка Mips) - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть простая программа-калькулятор в сборке MIPS, но по какой-то причине она просто возвращает нули. Кто-нибудь может мне помочь?

Я думаю, что, возможно, испортил хранение кадров, хотя я не уверен. Кроме того, я не уверен, правильно ли я использую команду beq.

.include "./cs47_proj_macro.asm"
.text
.globl au_normal
# TBD: Complete your project procedures
# Needed skeleton is given
#####################################################################
# Implement au_normal
# Argument:
#   $a0: First number
#   $a1: Second number
#   $a2: operation code ('+':add, '-':sub, '*':mul, '/':div)
# Return:
#   $v0: ($a0+$a1) | ($a0-$a1) | ($a0*$a1):LO | ($a0 / $a1)
#   $v1: ($a0 * $a1):HI | ($a0 % $a1)
# Notes:
#####################################################################
au_normal:
# TBD: Complete it
#store frame
addi    $sp, $sp, -24
sw      $fp, 24($sp)
sw      $ra, 20($sp)
sw      $a0, 16($sp)
sw      $a1, 12($sp)
sw  $a2, 8($sp)
addi    $fp, $sp, 24

sw $t0, '+'
sw $t1, '-'
sw $t2, '*'
sw $t3, '/'

beq $a2, $t0 Addition
beq $a2, $t1 Subtraction
beq $a2, $t2 Multiplication
beq $a2, $t3 Division

Addition:
    add $v0, $a0, $a1
    j exit

Subtraction:
    sub $v0, $a0, $a1
    j exit

Multiplication:
    mul $v0, $a0, $a1
    mfhi $v1
    j exit

Division:
    div $a0, $a1
    mflo $v0
    mfhi $v1
    j exit

exit:
    lw      $fp, 24($sp)
    lw      $ra, 20($sp)
    lw      $a0, 16($sp)
    lw      $a1,  12($sp)
    lw  $a2,  8($sp)
    addi    $sp, $sp, 20

    #return
    jr  $ra
...