mercredi 23 septembre 2015

MIPs Store Integers array

.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.

Hi to everyone. This code basically does 3 things:

  • Generate 2 randoms int
  • calculate MCD
  • Prob of prime

The number of iterations decided by user.

So, here is my problem: I stored the 2 numbers and the MCD in $s5,$s6,$s7 and i want to print that as a table using arrays. First, if i try to put the 1 number into an array, i got this an error (stored word not aligned on boundary):

.data

array: .space 32

.text

sw $s6, array, ($k1)
addi $k1, $zero, 4)

And my other problem is: How do i define .space for array since the user decide the number of iterations?

Thanks




Aucun commentaire:

Enregistrer un commentaire