﻿.globl rgb2grayAssembly

.text

rgb2grayAssembly:

# COMPLETE THIS SUBROUTINE (it invokes subroutine div16K, defined below)
# Como esta llamada se realiza desde C, se supone que en $a0 está la variable de entrada
# PROLOGO
addi $sp, $sp, -8 	 # Hago hueco en la pila para guardar ra y a0
sw $ra, 4($sp)   	 # Guardo ra en la pila
sw $a0, 0($sp)   	 # Guardo ra en la pila NO HACE FALTA GUARDARLO EN PILA

lbu $t1, 0($a0)  	 # Cargo el byte correspondiente a pixel->R
lbu $t2, 1($a0)  	 # Cargo el byte correspondiente a pixel->G
lbu $t3, 2($a0)  	 # Cargo el byte correspondiente a pixel->B
addiu $t4, $0, 3483	 # Cargo en $t4 el valor de la constante 3483
addiu $t5, $0, 11718 # Cargo en $t5 el valor de la constante 11718
addiu $t6, $0, 1183	 # Cargo en $t6 el valor de la constante 1183
mul $t7, $t1, $t4    # Multiplicación de 3483* pixel->R
mul $t8, $t2, $t5    # Multiplicación de 11718*pixel->G
mul $t9, $t3, $t6    # Multiplicación de 1183*pixel->B
addu $t1, $t7, $t8	 # Suma de 3483* pixel->R + 11718*pixel->G
addu $t2, $t1, $t9	 # Suma de (3483* pixel->R + 11718*pixel->G) + + 1183*pixel->B
add $a0, $t2, $0	 # Muevo el resultado de la suma a $a0

#addi $sp, $sp, -4 	 # Hago hueco en la pila para guardar ra
#sw $ra, 0($sp)   	 # Guardo ra en la pila
jal div16K           # Salto a la dirección de la etiqueta div16k

# EPILOGO
lw $a0, 0($sp)   	 # Saco a0 de la pila NO HACE FALTA GUARDARLO EN PILA
lw $ra, 4($sp)   	 # Saco ra de la pila
addi $sp, $sp, 8 	 # Quito hueco en la pila para guardar ra

jr $ra



div16K:

sra $v0, $a0, 14		 # Destacar que log2(16384) = 14
#lw $ra, 4($sp)   	 # Saco ra de la pila
#addi $sp, $sp, 8 	 # Quito hueco en la pila para guardar ra y a0

jr $ra