DBNZ: MACRO(ra,eti) ;Decrementa y salta si no cero. sub ra,ra,1 cmp r9,ra,0 bb0 2,r9,eti ENDMACRO LD_INM: MACRO(ra,eti) ;Carga el valor de una etiqueta. or ra,r0,low(eti) or.u ra,ra,high(eti) ENDMACRO org 0 LD_INM(r10,PIXEL) ;r10 puntero a matriz. LD_INM(r2,HISTO_H) ;r2 puntero a histograma horizontal. LD_INM(r3,DIM) ld r3,r3,0 ;r3 contador de filas. add r14,r3,r0 S_FIL: add r4,r14,r0 ;r4 contador de columnas. add r5,r0,r0 ;r5 acumulador de suma de cada fila. S_COL: ld.bu r6,r10,0 ;Se carga un pixel en r6 y se va sumando add r10,r10,1 ;a r5 hasta completar una fila. add r5,r5,r6 DBNZ(r4,S_COL) st r5,r2,0 ;Se almacena el resultado y se pasa a la add r2,r2,4 ;siguiente fila. DBNZ(r3,S_FIL) ;Histograma de ecualizacion LD_INM(r10,PIXEL) ;r10 puntero a matriz y LD_INM(r2,ECUALIZ) ;r2 puntero a histograma de ecualización. add r3,r0,256 ;Se inicializa a cero el histograma de LIMPIA: st r0,r2,0 ;ecualización almacenando ceros en las add r2,r2,4 ;256 palabras que ocupa en memoria. DBNZ(r3,LIMPIA) LD_INM(r2,ECUALIZ) ;r2 puntero a histograma de ecualización. LD_INM(r3,DIM) ;r3 se carga con el número de pixels, es ld r3,r3,0 ;decir, con DIMxDIM. mulu r3,r3,r3 S_PIX: ld.bu r4,r10,0 ;r4 se carga con un pixel y se multiplica mak r4,r4,0<2> ;por 4 para apuntar a la palabra del ld r9,r2,r4 ;histograma que se debe incrementar. add r9,r9,1 st r9,r2,r4 add r10,r10,1 DBNZ(r3,S_PIX) stop ;Como ejemplo de ensayo del programa se considera una matriz de 16x16 pixels ;y se carga de acuerdo con el programa que sigue. ENSAYO: LD_INM (r20,PIXEL) addu r21,r0,64 BUC: st r21,r20,0 add r20,r20,4 DBNZ(r21,BUC) and r1,r0,r0 jmp (r1) ;Reserva de espacio de los datos utilizados por el programa org 10000 PIXEL: res 256 HISTO_H: res 64 ECUALIZ: res 1024 DIM: data 16