0

我一直在尝试使用 mips mars 实现抽搐矩阵。我在生成它时遇到了一些问题。所以我得到的是这个,我可以打开一个图像文件(512x512)将其转换为灰度,然后当我尝试应用抽搐时,我只得到一个黑色方块:这是整个程序:

.data

 #uncoment
 buffer: .space 786432 # buffer para imagens para 512x512
 bufferGray: .space 262144 # buffer para imagens cinza 512 x 512
 #

#uncoment after 32x32
bufferSobelH: .space 262144 #array sobel horizontal
bufferSobelV: .space 262144 #array sobel Vertical
bufferSomaSobel: .space 262144 #array Somas sobel
bufferFinal: .space 262144 #array final
#


#Arrays Sobel
SobellV: .byte 1,2,1,0,0,0,-1,-2,-1 #Sobel Vertical
SobellH: .byte 1,0,-1,2,0,-2,1,0,-1 #Sobel Horizontal


.text
    main:
#funcao para efectuar a convolution
#argumentos $a0 array de origem escala cinzentos
#argumentos $a1 array de destino ou o sobel horizontal ou vertical
#argumentos $a2 array sobel a usar
la $a0,bufferGray #carrega o endereco buffer imagem em cinzento
la $a1,bufferSobelH # carrega o endereco do buffer para conter o sobel horizontal
la $a2, SobellH #carrega o array sobel horizontal
jal convolution
nop 

jal write_gray_image
nop
jal SafeExit
nop


#funcao para efectuar a convolution
#argumentos $a0 array de origem escala cinzentos
#argumentos $a1 array de destino ou o sobel horizontal ou vertical
#argumentos $a2 array sobel a usar
#argumentos $a3 contador
convolution:
addi $sp,$sp,-4 
sw $ra,0($sp)
addi $a0,$a0,512 #incrementa uma linha
addi $a3,$a3,-512 #retira 512 ao valor do contador para eliminar a linha 
jal filter
nop 


filter:

blt $a3,512,endsobel
nop

#carrega os bytes matrix cinzento
lbu $t0,0($a0)#carrega o valor  da escala de cinzentos
#
#carrega o centro da matrix
lbu $t1,4($a2)
#

#multiplica cada byte(componente) pelo valor da matrix
mul $s0,$t0,$t1
#

#########################################################
#carrega o valor da matrix a direita
lbu $t0,1($a0)
lbu $t1,5($a2)
mul $t2,$t0,$t1
add $s0,$s0,$t2


#########################################################

#########################################################
#carrega o valor da matrix a esquerda
lbu $t0,-1($a0)#o valor da matrix a esquerda
lbu $t1,3($a2)
mul $t2,$t0,$t1
add $s0,$s0,$t2
#########################################################


#sobe uma linha
add $a0,$a0,-512
#

#carrega os bytes matrix cinzento
lbu $t0,0($a0)#carrega o valor  da escala de cinzentos
#
#carrega o centro da matrix
lbu $t1,1($a2)
#

#multiplica cada byte(componente) pelo valor da matrix
mul $t2,$t0,$t1
add $s0,$s0,$t2

#

#########################################################
#carrega o valor da matrix a direita
lbu $t0,1($a0)
lbu $t1,2($a2)
mul $t2,$t0,$t1
add $s0,$s0,$t2


#########################################################

#########################################################
#carrega o valor da matrix a esquerda
lbu $t0,-1($a0)#o valor da matrix a esquerda
lbu $t1,0($a2)
mul $t2,$t0,$t1
add $s0,$s0,$t2
#########################################################
#desce 2 linhas
add $a0,$a0,1024
#
#carrega os bytes matrix cinzento
lbu $t0,0($a0)#carrega o valor  da escala de cinzentos
#
#carrega o centro da matrix
lbu $t1,7($a2)
#

#multiplica cada byte(componente) pelo valor da matrix
mul $t2,$t0,$t1
add $s0,$s0,$t2

#

#########################################################
#carrega o valor da matrix a direita
lbu $t0,1($a0)
lbu $t1,8($a2)
mul $t2,$t0,$t1
add $s0,$s0,$t2


#########################################################

#########################################################
#carrega o valor da matrix a esquerda
lbu $t0,-1($a0)#o valor da matrix a esquerda
lbu $t1,6($a2)
mul $t2,$t0,$t1
add $s0,$s0,$t2
#########################################################
#sobe uma linha
add $a0,$a0,512
#
sra $s0,$s0,2
abs $s0, $s0
sb $s0,0($a1)

addi $a0,$a0,1
addi $a1,$a1,1
addi $a3,$a3,-1


beq $zero,$zero,filter
nop




endsobel:

 #exit here
lw $ra,0($sp) #exit sobel 
addi $sp,$sp,4
jr $ra
nop
4

0 回答 0