У меня есть простая программа-калькулятор в сборке 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