MIPS 어셈블리의 Project Euler 질문에 내 대답을 다시 쓰고 있는데 올바른 대답을 출력 할 수 없습니다. 지난 1 시간 동안 코드를 살펴 봤는데, 내 접근법에 무엇이 잘못되었는지를 알아낼 수 없습니다. (답은 멋진 200,00+ 이상일 때 33165를 얻음에 따라) 문제를 파악합니다. 그 문법에 어색해 져야합니다. 예약 된 레지스터를 사용하는 것처럼 내가 여기서하고있는 바보 같은 것이 있습니까?MIPS의 알고리즘 문제
## p1.asm
##
## Andrew Levenson, 2010
## Project Euler, Problem 1
## In MIPS Assembly for SPIM
## Calculate the sum, s,
## of all natural numbers, n,
## Such that n < 1000.
.text
.globl main
main:
ori $8, $0, 0x0 # Init sum s in $8 to 0
ori $9, $0, 0x0 # Init variable number n in $9 to 0
ori $10, $0, 0x3
ori $11, $0, 0x5
la $14, lim
loop:
retry:
addiu $9, $9, 0x1 # Increment n by 1
# Is n less than 1000?
sltiu $15, $9, 1000 # if n >= 1000 then jump to print
beq $15, $0, print # if $15 == 0
sll $0, $0, $0 # no op
# Is n a multiple of three or five?
div $9, $10 # n/3
mflo $12 # $12 = floor(n/3)
mfhi $13 # $13 = n mod 3
bne $13, $0, retry # if n mod 3 != 0 then retry
sll $0, $0, $0 # no op
beq $13, $0, sum # else, print
sll $0, $0, $0 # no op
div $9, $11 # n/5
mflo $12 # $12 = floor(n/5)
mfhi $13 # $13 = n mod 5
bne $13, $0, retry # if n mod 5 != 0 then retry
sll $0, $0, $0 # no op
# If we've made it this far, n is good!
sum:
addu $8, $8, $9 # s = s + n
j loop # jump to loop
sll $0, $0, $0 # no op
print:
li $v0, 1 # system call #1 - print int
move $a0, $8
syscall # execute
exit:
li $v0, 0xA # system call #10 - exit
syscall
## End of Program
## Variable declarations
.data
lim: .word 1000 # loop bound
편집 : 게시되고 있기 때문에 조정 코드입니다. 제안 된 수정안을 제안했지만 약 10 만 건의 응답을 제공합니다. 5 다음 $9
가 3의 배수가 아닌 경우 분기에 의해, 그리고 : :(
: 당신은 다음 줄을 제거해야합니다 등록 번호 대신 이름이 필요하십니까? $ a0, $ a1, $ t0 등? – Tom
나는 이렇게 작은 프로그램을 위해 그것이 필요하지 않다고 생각했다. – Andy