Хорошо, вопрос в следующем: Используя MARS, разработайте программу, которая:
- Предлагает пользователю ввести целое число,
- Считывает целое число с клавиатуры (скажем, n),
- Вычисляет и распечатывает сумму нечетных чисел и сумму четных чисел от 1
по номеру
Вот моя попытка, пожалуйста НЕ РЕШИТЕ МОЮ РАБОТУ. Я хотел бы учиться на своих ошибках. Мой вопрос: где я ошибся, регистры, кажется, идут в -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