MIPS部门的问题

时间:2011-04-03 12:02:29

标签: mips division

我需要帮助调试以下代码。我已经尝试了10次或更多次,但我仍然不明白为什么我会得到如下所示的奇怪输出:

Enter a: 5
Enter b: 2
a/b = 268501012 (<--- weird output)



# task4partial.asm
# Given positive integers a and b, output a/b and a%b.
  .data
str1: .asciiz "Enter a: "
str2: .asciiz "Enter b: "
str3: .asciiz "a/b = "
str4: .asciiz "a%b = "
newline: .asciiz "\n"
  .text

main: li   $v0, 4            # system call code for print_string
  la   $a0, str1         # address of str1
  syscall                # print str1

#get the first number from user, put it into $s0

li   $v0, 5            # system call code for read_int
  syscall                # read an integer into $v0 from console
  add  $s0, $v0, $zero   # copy $v0 into $s0 (a)


#read print_string for str2
li   $v0, 4            # system call code for print_string
  la   $a0, str2         # address of str1
  syscall                # print str1

# get second number from user, put it into $t1  
li  $v0, 5      #load syscall for read_int
syscall         #make the syscall
move $s1, $v0       #move the number read into $s1(b)

#do the calculations
div $s0, $s1        #diving $s0 by $s1
mflo    $t0         #storing value of lo(quotient) in
                #register $t0
mfhi    $t1         #storing value of hi(remainder) in
                #register $t1

#read print_string for str3
li   $v0, 4            # system call code for print_string
  la   $a0, str3         # address of str1
  syscall                # print str1   

#print a/b
li  $v0, 1      #load syscall print_int into $v0
move $t2, $t0       #move the number to print into $t2
syscall

#end of program
li  $v0, 10     #system call code for exit
syscall

1 个答案:

答案 0 :(得分:0)

错误在于这一行:move $t2, $t0 #move the number to print into $t2 print_int系统调用例程的参数必须放在$a0中,而不是放入$t2