I'm trying to write a program using MIPS Assembly Language (I write the code in TextWrangler and run it in QTSpim)
I was wondering how I would go about checking if a number is perfect or not. I know my first lines of code may be partially incorrect but when I figure out the loop or how to check if a number is perfect it will all be easier to solve. Does anyone have any suggestions? My code so far is below and I put a note where I would put the check to see if a number is perfect.
.text .globl main main: start: addiu $s3, 1 # Load register $s3 with 1 li $v0,4 # print prompt la $a0,prompt # syscall li $v0,5 # code 5 == read integer syscall # Invoke the operating system. #BELOW CODE CHECKS IF INTEGER IS <1 and ENDS IF IT IS sltu d,s,t # if ( $s < $t ) # d = 1 # else # d = 0 li $v0,10 # code 10 == exit syscall # Halt the program. # THIS IS THE END OF CHECKING IF INTEGER < 1 # BELOW WILL DETERMINE IF THE INTEGER IS PERFECT # END OF DETERMINING IF INTERGER IS PERFECT li $v0,4 # code 4 == print perfect la $a0,perfect # $a0 == address of the string syscall # Invoke the exception handler. li $v0,4 # code 4 == print string la $a1,notper # $a0 == address of the not perfect syscall # Invoke the exception handler. j start # JUMP TO THE START OF THE PROGRAM # ---------------------- Below may not be needed, keep for now sltu d,s,t # if ( $s < $t ) # d = 1 # else # d = 0 .data perfect: .asciiz "The number you entered is Perfect." notper: .asciiz "The number you entered is NOT Perfect." prompt: .asciiz "Please enter an Integer: "
(Not sure if this maces any sense or if it would work but: I'd set T equal to whatever the integer entered is. Then I'd start a loop and divide the integer entered by T and keep decreasing T until it is equal to one. Each time the remainder is 0 it will add the divisor to a register. If at the end all the numbers added to the register is the same as the integer entered it will print that the number is perfect.)