好的问题如下:使用MARS,开发一个程序:
这是我的尝试,请不要解决我的家庭问题。我想从我的错误中吸取教训。我的问题是,我哪里出错,寄存器似乎转到-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
答案 0 :(得分:2)
您的代码存在一些问题,但在应用这些更改后应该没问题。
您在分支后初始化$s5
,当您的起始编号为偶数时,$s5
会保持未初始化状态。
当起始编号为奇数且程序处理完毕后,控制流程无条件地进入偶数情况。在odd_n
完成计算后,您需要跳转到程序的输出部分。
在4
显示$v0
之前,您需要将syscall
加载到msgeven
中(当您在此处时,请考虑修复在两个消息中放置换行符。)