Je réécrire ma réponse (s) au projet des questions d'Euler dans l'assemblage MIPS, et je ne peux pas obtenir celui-ci à la sortie de la bonne réponse. Je suis allé sur le code de la dernière heure, et je ne peux pas comprendre ce qui ne va pas avec mon approche (que je reçois 33165 quand la réponse est un 200,00+ frais supérieur à celui), donc je figure le problème doit être mon tremblement avec la syntaxe. Y a-t-il quelque chose de stupide que je fais ici, comme utiliser un registre réservé?Algorithmique Problème dans 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
EDIT: code modifié depuis leur publication. Corrections faites suggéré, mais il donne encore une réponse d'environ 100.000. :(
Pourquoi vous ne en utilisant le registre noms au lieu de numéros de registre? $ a0, $ a1, $ t0, etc. – Tom
Je me suis un petit programme comme celui-ci, qu'il n'a pas été nécessaire. – Andy