MIPS组装作业。似乎无法找到错误

时间:2012-03-19 18:23:04

标签: assembly mips

好的问题如下:使用MARS,开发一个程序:

  • 提示用户输入一个整数,
  • 从键盘读取整数(比如n),
  • 计算并打印出1的奇数和偶数之和 到n。

这是我的尝试,请不要解决我的家庭问题。我想从我的错误中吸取教训。我的问题是,我哪里出错,寄存器似乎转到-MAXINT 运行它,你会看到:(

    # Assignment 3, part 1
    # NAME  
    #The Formulas used in this assignments are visible in a text document 
    #attached in the zip. and their mathematical proofs. 
        # Odd or Even Checker by parity bit in binary format.
        # by anding it with the number N
        # if it is odd, the anding will result in 00000001
        # if it is even the ANDing will result in all 0
        # we can check if the result is ==0 or not
        # then use mathematical formulas to derive the sums
        # using the least number of instructions    
        # Without using the not-yet-learnt instructions.

----------------------------------------------- --------------------------

.data       #Data Declaration Section
    msg1: .asciiz "Hello, Enter an Integer:\n->"
    msgodd: .asciiz "Odd Sum is :\n"
    msgeven: .asciiz "Even Sum is :\n"  
.text       
        #START

    la $a0, msg1    #Load the address of label msg1
    li $v0,4    #Load int 4 to v0, and address the system call. 
    syscall

   #Request a Syscall for integer input
    li $v0,5    #Load int 5 <int inp>
    syscall 

    move $a0,$v0    #copy the int entered
    parity:
    move $t0,$a0    #will be used to test for odd or even
    move $a3,$a0    #will be used later
    andi $t0,00000001 # this is the parity bit i talked about above.
    beq $t0,$zero,even_n
    #s1 hold odd sum, s2 hold even sum, t1 is temp for odd, t2 is temp for even
    li $s5,1
    odd_n:
move $t1,$a3
move $t2,$a3
addi $t2,$t2,-1

ol:
    add $s1,$s1,$t1
    addi $t1,$t1,-2
    bne $t1,$s5,ol

el:
    add $s2,$s2,$t2
    addi $t2,$t2,-2
    bne $t2,$zero,el

    even_n:
move $t1,$a3
move $t2,$a3
addi $t1,$t1,-1

eol:
    add $s1,$s1,$t1
    addi $t1,$t1,-2
    bne $t1,$s5,eol

eel:
    add $s2,$s2,$t2
    addi $t2,$t2,-2
    bne $t2,$zero,eel

    print:
    li $v0,4
    la $a0,msgodd
    syscall
    li $v0,1
    move $a0,$s1
    syscall

    la $a0,msgeven
    syscall
    li $v0,1
    move $a0,$s2
    syscall

    exit:
    li $v0,10
    syscall

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题,但在应用这些更改后应该没问题。

  1. 您在分支后初始化$s5,当您的起始编号为偶数时,$s5会保持未初始化状态。

  2. 当起始编号为奇数且程序处理完毕后,控制流程无条件地进入偶数情况。在odd_n完成计算后,您需要跳转到程序的输出部分。

  3. 4显示$v0之前,您需要将syscall加载到msgeven中(当您在此处时,请考虑修复在两个消息中放置换行符。)

相关问题