.data
spacestr: .asciiz " "
pow:
.asciiz "Ingrese numero de Iteraciones = "
mcd:
.asciiz "MCD "
linea:
.asciiz "\n"
proba:
.asciiz "la probabilidad es: \n%"
.text
main:
li $v0,4
la $a0,pow
syscall #imprime mensaje en pow
li $v0,5
syscall #Lee el entero ingresado por el usuario.
move $t5,$v0 #mueve el valor leído a t5
li $t6, 1
li $t8, 1
li $t9, 0
li $k0, 100
mainloop:
bgt $t6,$t5,Fin
li $v0, 30
syscall
move $t0, $a0
li $a0, 1
move $a1, $t0
li $v0, 40
syscall
li $a0, 1
li $a1, 1000
li $v0, 42
syscall #Genera numero aleatorio (time feed)
move $a2, $a0 # Guarda el numero en a2
li $v0, 1
syscall # imprime el entero.
move $s5, $a2 #guardo en s5 el primero numero generado (pregunta!)
li $v0, 4
la $a0,spacesrt
syscall #imprime un espacio
li $a0, 1
li $a1, 1000
li $v0, 42
syscall #genera segundo numero aleatorio.
move $a3, $a0 #mueve el numero generado a a3
li $v0, 1
syscall #imprime el segundo entero generado.
move $s6, $a3 #guardo el valor en s6 (pregunta!)
# Euclides MCD (GCD)
slt $s0, $a2, $a3 #compara si a < b. Verdadero s0=1 sino s0=0
bne $s0,$zero, SwapNumbers
SwapNumbers:
move $t2, $a2
move $a2, $a3
move $a3, $t2
loop:
beq $a3,$zero,EXIT
move $t4,$a3 # c = b
rem $a3,$a2,$a3 # b = a % b
move $$a2,$t4 # a = c
j loop
EXIT:
move $s7, $a2 #El valor del MCD
li $v0, 4
la $a0,spacestr
syscall
li $v0,4
la $a0,mcd
syscall
li $v0,4
la $a0,mcd #imprime la palabra en mcd
syscall
li $v0,1
la $a0,($s7) #luego muestra el valor calculado de MCD
syscall
li $v0,4
la $a0,linea
syscall # Cambio de linea (por orden en iteraciones)
addi $t6,$t6,1
bne $s7,st8, exit #cuenta las veces que MCD = 1 (primos)
addi $t9,$t9,1
exit:
j mainloop
Fin:
mtc1 $st9, $f1
cvt.s.w $f1,$f1
mtc1 $t5, $f2
cvt.s.w $f2,$f2
mtc1 $k0,$f3
cvt.s.w $f3,$f3
div.s $f12,$f1,$f2
mul.s $f12,$f12,$f3 # (primos/iteraciones*100)
li $v0, 4
la $a0, proba
syscall
li $v0, 2
syscall # Imprime resultado en f12
li $v0,10
syscall #Finaliza programa.
Salut à tous. Ce code fait essentiellement 3 choses:MIPs Store Entiers tableau
- 2 générons randoms int
- calculate
- base de données centrale Prob de premier
Le nombre d'itérations décidées par l'utilisateur. Donc, voici mon problème: J'ai stocké les 2 numéros et le MCD dans $ s5, $ s6, $ s7 et je veux imprimer cela comme une table en utilisant des tableaux. Tout d'abord, si je tente de mettre le 1 numéro dans un tableau, je suis arrivé ce une erreur (mot stocké non alignée sur la limite):
.data
tableau: .space 32
.text
sw s6 $, tableau, (k1 $)
Addi k1 $, zéro $, 4)
Et mon autre problème est: Comment définir .space pour le tableau puisque l'utilisateur de décider le nombre d'itérations ?
Merci
Merci, Gusbro. La directive align semble fonctionner. A propos de la deuxième réponse c'est la chose, comme je disais que les itérations sont décidées par l'utilisateur, pourrait être 5 ou 20 ou 100 ou 100000. Aucune limite je crois ... – JEC
Eh bien, il y a toujours une limite, que ce soit la portée de entiers ou la mémoire que vous avez. Vous pouvez définir un tableau comme le dernier emplacement de votre segment '.data', c'est-à-dire qu'aucune autre variable n'est définie après votre étiquette' array'. Ensuite, vous pouvez considérer toute la mémoire restante comme votre espace de tableau (jusqu'à ce qu'il "frappe" votre segment de code) – gusbro