Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;DEFINICION DE MACROS
- LEA: MACRO (reg, ETIQ)
- or reg, r0, low(ETIQ)
- or.u reg, reg, high(ETIQ)
- ENDMACRO
- DBNZ: MACRO (reg, ETIQ)
- sub reg, reg, 1
- cmp r3, reg, r0
- bb0 eq, r3, ETIQ
- ENDMACRO
- PUSH: MACRO (reg)
- subu r30, r30, 4
- st reg, r30, r0
- ENDMACRO
- POP: MACRO (reg)
- ld reg, r30, r0
- addu r30, r30, 4
- ENDMACRO
- SWAP: MACRO(ra,rb)
- or r1, ra,ra
- or ra,rb,rb
- or rb,r1,r1
- ENDMACRO
- CREATEFP: MACRO()
- PUSH(r1)
- PUSH(r31)
- or r31, r30, r30
- ENDMACRO
- DESTROYFP: MACRO()
- or r30, r31, r31
- POP (r31)
- POP (r1)
- jmp(r1)
- ENDMACRO
- ;SETUP DE LA MEMORIA
- org 0
- nF: data 4
- ;data 0x0000000E
- ;data -1
- ;data 0
- ;data 1
- org 20
- Imagen1: data 4, 8
- ;data 0xD1000000, 0x00000000
- ;data 0x00000000, 0x00007A1D
- ;data 0x01000000, 0x00000000
- ;data 0x00000000, 0x000000FF
- data 0x00000000, 0x00000000
- data 0x00000000, 0x00002100
- data 0x00000000, 0x00000000
- data 0x00000000, 0x00000000
- ;data 0x55FF55FF, 0x55FF55FF
- ;data 0xFF55FF55, 0xFF55FF55
- ;data 0x55FF55FF, 0x55FF55FF
- ;data 0xFF55FF55, 0xFF55FF55
- org 128
- Imagen2: data 4, 8
- ;data 0x02000000, 0x00000000
- ;data 0x00000000, 0x00000182
- ;data 0xFF000000, 0x00000000
- ;data 0x00000000, 0x00000010
- data 0x00000000, 0x00000000
- data 0x00000000, 0x00000000
- data 0x00000000, 0x00000000
- data 0x00000000, 0x00000000
- ;data 0x54FE54FE, 0x54FE54FE
- ;data 0xFD57FD57, 0xFD57FD57
- ;data 0x54FE54FD, 0x54FE54FE
- ;data 0xFD53FD53, 0xFD53FD53
- org 256
- SubImagen: data 0x13121110, 0x17161514, 0x00000018
- ;data 0x00000000, 0x00000055, 0x00
- ;data 0x00000000, 0x00000055, 0x00
- org 276
- Filtro_M: data 2, 0xFFFFFFFF, 0xFFFFFFFE, 1, 2, 0xFFFFFFFF
- data 0xFFFFFFFE, 1, 0, 1, 0xFFFFFFFE, 1
- data 2, 0xFFFFFFFF, 0xFFFFFFFE, 1, 2, 0xFFFFFFFF
- ;data 0, 1, 0, 1, 0, 1
- ;data 0, 1, 2, 0xFFFFFFFF, 0, 1
- ;data 0, 1, 0, 1, 0, 1
- ;data 0, 1, 0, 1, 0, 1
- ;data 0, 1, 1, 1, 0, 1
- ;data 0, 1, 0, 1, 0, 1
- org 512
- Imagen_S: data 5, 8
- data 0x04030201, 0x08070605, 0x0C0B0A09
- data 0x100F0E0D, 0x14131211, 0x18171615
- data 0x1C1B1A19, 0x201F1E1D, 0x24232221
- data 0x28272625
- ;data 3, 3
- ;data 0x40302010, 0x80706050, 0x90
- org 640
- SubImagen_S:data 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
- ;data 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
- org 896
- Imagen_FP: data 4, 8
- data 0x40414243, 0x44454647
- data 0x48494A4B, 0x4C4D4E4F
- data 0x40994243, 0x44454647
- data 0x48494A4B, 0x4C4D4E4F
- ;data 4, 8
- ;data 0x44444444, 0x44444444
- ;data 0x33343444, 0x44444444
- ;data 0x44884444, 0x44444444
- ;data 0x44444444, 0x44444444
- ;data 5, 5
- ;data 0x44332211, 0x03020155
- ;data 0x22210504, 0x31252423
- ;data 0x35343332, 0x44434241
- ;data 0x00000045
- org 1024
- Filtro_FP: data 1, 1, 1, 1, 1, 1
- data 1, 1, 0xFFFFFFF8, 1, 1, 1
- data 1, 1, 1, 1, 1, 1
- ;data 1, 8, 1, 8, 1, 8
- ;data 1, 8, 0, 8, 1, 8
- ;data 1, 8, 1, 8, 1, 8
- ;data 0, 1, 0, 1, 0, 1
- ;data 0, 1, -5, -5, 0, 1
- ;data 0, 1, 0, 1, 0, 1
- org 1280
- Imagen_F: ;data 4, 6
- ;data 0x12345678, 0xFFFEFDFC
- ;data 0x13355779, 0xEEEDECEB
- ;data 0x23456789, 0xDFDEDDDC
- data 4, 6
- data 0x04030201, 0x02000605
- data 0x05030104, 0x0C090603
- data 0x0804120F, 0x80402010
- ;data 4, 8
- ;data 0x04030201, 0x07060504
- ;data 0x14134211, 0x17168514
- ;data 0x24232221, 0x27262574
- ;data 0x34333231, 0x37363534
- org 1360
- Im_Filtrada:;data 0, 0
- ;data 0x01020304, 0x05060102
- ;data 0x03040506, 0x01020304
- ;data 0x05060102, 0x03040506
- data 0xA5A5A5A5, 0xA5A5A5A5
- data 0xA5A5A5A5, 0xA5A5A5A5
- data 0xA5A5A5A5, 0xA5A5A5A5
- data 0xA5A5A5A5, 0xA5A5A5A5
- ;res 40
- org 1440
- Fil_Filtro: ;data 0, 1, 0, 1, 0, 1
- ;data 0, 1, 1, 1, 0, 1
- ;data 0, 1, 0, 1, 0, 1
- data 0xFFFFFFFE, 0xFFFFFFF8
- data 0x00000000, 0xFFFFFFF8
- data 0xFFFFFFFE, 0xFFFFFFF8
- data 0x00000000, 0xFFFFFFF8
- data 0x00000000, 0xFFFFFFF8
- data 0x00000000, 0xFFFFFFF8
- data 0xFFFFFFFE, 0xFFFFFFF8
- data 0x00000000, 0xFFFFFFF8
- data 0xFFFFFFFE, 0xFFFFFFF8
- ;data 0, 1, -3, 1, 0, 1
- ;data 0, 1, 4, 1, 0, 1
- ;data 0, 1, 0, 1, 0, 1
- org 2000
- Imagen_Rec: data 4, 4
- data 0x04030201, 0x0D0E0F10, 0x05040302, 0x23222120
- org 2200
- Filtro_rec: data 1, 8, 1, 8, 1, 8
- data 1, 8, 0, 8, 1, 8
- data 1, 8, 1, 8, 1, 8
- org 2400
- Res_rec: res 24
- data 0x55555555, 0x55555555
- ;SUBRUTINAS AUXILIARES
- Mess_reg: or r2, r0, 2
- or r3, r0, 3
- or r4, r0, 4
- or r5, r0, 5
- or r6, r0, 6
- or r7, r0, 7
- or r8, r0, 8
- or r9, r0, 9
- or r10, r0, 10
- or r11, r0, 11
- or r12, r0, 12
- or r13, r0, 13
- or r14, r0, 14
- or r15, r0, 15
- or r16, r0, 16
- or r17, r0, 17
- or r18, r0, 18
- or r19, r0, 19
- or r20, r0, 20
- or r21, r0, 21
- or r22, r0, 22
- or r23, r0, 23
- or r24, r0, 24
- or r25, r0, 25
- or r26, r0, 26
- or r27, r0, 27
- or r28, r0, 28
- or r29, r0, 29
- jmp(r1)
- ;PROGRAMAS PRINCIPALES
- PpalSqrt: LEA (r30, 61440)
- LEA (r10, 100100025);set Num
- ;or r10, r0, 1
- ;or r10, r0, 0
- ;or r10, r0, 100
- ;or r10, r0, 144
- PUSH(r10)
- bsr Sqrt
- POP(r10)
- stop
- PpalNF: LEA (r30, 61440)
- sub r10, r0, 1 ;oper es -1
- ;or r10, r0, 14
- PUSH(r10)
- bsr nFiltrados
- POP(r10)
- stop
- PpalComp: bsr Mess_reg
- LEA (r30, 61440)
- or r10, r0, 128
- PUSH (r10)
- or r11, r0, 20
- PUSH (r11)
- bsr Comp
- POP(r11)
- POP(r10)
- stop
- PpalVPix: bsr Mess_reg
- LEA (r30, 61440)
- or r10, r0, 276
- PUSH (r10)
- or r11, r0, 256
- PUSH (r11)
- bsr ValorPixel
- POP(r11)
- POP(r10)
- stop
- PpalSubImg: bsr Mess_reg
- LEA (r30, 61440)
- or r10, r0, 6
- PUSH(r10)
- or r11, r0, 3
- PUSH(r11)
- or r12, r0, 640
- PUSH(r12)
- or r13, r0, 512
- PUSH (r13)
- bsr SubMatriz
- POP(r13)
- POP(r12)
- POP(r11)
- POP(r10)
- stop
- PpalFilP: bsr Mess_reg
- LEA (r30, 61440)
- or r10, r0, 1024
- PUSH(r10)
- or r11, r0, 2
- ;or r11, r0, 3
- PUSH(r11)
- or r12, r0, 2
- PUSH(r12)
- or r13, r0, 896
- PUSH(r13)
- bsr FilPixel
- POP(r13)
- POP(r12)
- POP(r11)
- POP(r10)
- stop
- PpalFiltro: bsr Mess_reg
- LEA (r30, 61440)
- or r10, r0, 1440
- PUSH(r10)
- or r11, r0, 1360
- PUSH(r11)
- or r12, r0, 1280
- PUSH(r12)
- bsr Filtro
- POP(r12)
- POP(r11)
- POP(r10)
- stop
- PpalRec: bsr Mess_reg
- LEA (r30, 61440)
- or r10, r0, 2000
- or r11, r0, 2200
- or r12, r0, 2400
- or r13, r0, 40
- PUSH(r13)
- PUSH(r11)
- PUSH(r12)
- PUSH(r10)
- bsr FiltRec
- POP(r10)
- POP(r12)
- POP(r11)
- POP(r13)
- stop
- ;SUBRUTINAS
- Sqrt: ld r20, r30, 0 ; r20 es Num
- cmp r3, r20, 2
- bb1 lt, r3, END_EX_SQ
- ld r7, r30, r0 ; r7 es a
- or r8, r0, 1 ; r8 es b
- LOOP_SQ: sub r5, r7, r8 ; Repite mientras (a – b) > 1
- cmp r3, r5, 1
- bb1 le, r3, END_SQ ; No es menor o igual por lo que no repite
- add r7, r7, r8
- divs r7, r7, 2
- divs r8, r20, r7 ; parte 3a
- cmp r3, r8, r7
- bb0 gt, r3, LOOP_SQ ; Si b no es mayor que a no hace falta intercambiar (parte 3b)
- SWAP(r7, r8)
- br LOOP_SQ
- END_EX_SQ: or r8, r20, r20 ; Si no se cumple la condicion inicial la raiz es el numero dado
- END_SQ: or r29, r8, r8
- jmp (r1)
- nFiltrados: ld r20, r30, 0 ;r20 es oper
- cmp r3, r20, 0
- bb1 ge, r3, INIT_NF ;Parte 1 algoritmo
- ld r5, r0, 0 ;r5 es nF (Inicio parte 2 algoritmo)
- subu r5, r5, 0x1
- cmp r3, r5, 0
- bb1 lt, r3, RESTORE_NF
- st r5, r0, 0
- br END_NF
- INIT_NF: st r20, r0, 0
- or r5, r20, r20 ;r5 a nF para END_NF
- br END_NF
- RESTORE_NF: or r5, r0, 0 ;r5 == 0
- st r5, r0, 0 ;nF == 0
- END_NF: or r29, r5, r5 ;return nF en r29
- jmp(r1)
- Comp: CREATEFP()
- subu r30, r30, 4
- or r3, r0, 0 ;Inicializa a 0 dif. r3 será dif toda la subrutina
- st r3, r31, -4 ;Guarda una variable contador (inicializada a 0) como variable local
- or r2, r0, 0 ;r2 -> registro indice matriz. En vez de un load inicial a contador hacemos or (más rápido)
- ld r20, r31, 8 ;Imagen 1
- ld r21, r31, 12 ;Imagen 2
- ld r4, r20, 0 ;r4 es M
- ld r5, r20, 4 ;r5 es N
- muls r4, r4, r5 ;r4 es MxN
- LOOP_COMP: add r2, r2, 8 ;r2 apunta al siguiente elemento de las dos matrices
- ld.bu r20, r20, r2 ;Load siguiente elemento Imagen1
- ld.bu r21, r21, r2 ;Load siguiente elemento Imagen2
- ld r2, r31, -4 ;r2 es contador
- sub r8, r20, r21 ;Imagen1ij - Imagen2ij
- muls r8, r8, r8 ;Al cuadrado
- add r3, r3, r8 ;Actualizar Dif
- add r2, r2, 1 ;Incrementar contador
- cmp r7, r2, r4 ;r4 sigue siendo MxN, comprobamos si se ha recorrido toda la matriz
- bb1 eq, r7, FIN_COMP;Salto si se ha recorrido entera
- st r2, r31, -4 ;Store contador
- ld r20, r31, 8
- ld r21, r31, 12 ;Se preparan r20 y 21 para la carga del siguiente elemento de las matrices
- br LOOP_COMP
- FIN_COMP: PUSH(r3)
- bsr Sqrt
- DESTROYFP()
- ValorPixel: CREATEFP()
- subu r30, r30, 4
- or r3, r0, 0 ;Inicializa a 0 ACC. r3 será ACC toda la subrutina
- st r3, r31, -4 ;Guarda una variable contador (inicializada a 0) como variable local
- or r2, r0, 0 ;r2 -> registro indice matriz. En vez de un load inicial a contador hacemos or (más rápido)
- ld r20, r31, 8 ;r20 es SubImg
- ld r21, r31, 12 ;r21 es MFiltro
- LOOP_V_PIX: ld.bu r4, r20, r2 ;Load siguiente elemento SubImg
- mulu r2, r2, 8 ;Preparar r2 para cargar pares
- ld r5, r21, r2 ;Load coeficiente N siguiente par MFiltro
- mulu r4, r4, 256 ;Multiplica rxx por 256
- muls r4, r4, r5 ;Y por el coeficiente N del filtro
- add r2, r2, 4
- ld r5, r21, r2 ;Cargamos coeficiente D del par
- divs r4, r4, r5 ;Divide entre el coeficiente D del filtro
- add r3, r3, r4 ;Acumula en ACC
- ld r2, r31, -4 ;Load contador
- add r2, r2, 1 ;Incrementar contador
- cmp r7, r2, 9
- bb1 eq, r7, FIN_V_PIX
- st r2, r31, -4 ;Store contador
- br LOOP_V_PIX
- FIN_V_PIX: divs r3, r3, 256 ;Divide ACC por 256
- or r29, r3, r3 ;Asigna r29 = ACC
- DESTROYFP()
- SubMatriz: CREATEFP()
- or r3, r0, 0 ;Utilizaremos r3 como contador en bucle
- or r11, r0, 0 ;Utilizaremos r11 como indice absoluto de SubImagen
- ld r20, r31, 8 ;Load Imagen
- ld r21, r31, 12 ;Load SubImagen
- ld r4, r31, 16 ;Load i
- ld r5, r31, 20 ;Load j
- ld r6, r20, 4 ;Load N
- muls r10, r6, r4
- add r10, r10, 8 ;Saltamos M y N y convertimos r10 en el indice absoluto a utilizar en la matriz Imagen
- add r10, r10, r5 ;Offset elemento central
- sub r10, r10, 1 ;Offset inicial fila central
- sub r10, r10, r6 ;Offset primer elemento
- COPY_LOOP: ld.bu r22, r20, r10 ;Cargar siguiente elemento
- st.b r22, r21, r11 ;Guardarlo en SubMatriz
- add r10, r10, 1 ;Mover indice de Imagen + 1
- add r11, r11, 1 ;Indice SubMatriz + 1
- add r3, r3, 1 ;r3 es un contador de columna
- cmp r7, r3, 3 ;SubMatriz solo tiene 3 elementos por columna por lo que si llega a 3 hemos copiado la fila
- bb1 eq, r7, END_ROW
- br COPY_LOOP
- END_ROW: cmp r7, r11, 9 ;SubMatriz tiene 9 elementos por lo que si llega a 9 hemos terminado
- bb1 eq, r7, FIN_SUB
- or r3, r0, 0 ;Contador bucle anterior a 0
- sub r10, r10, 3 ;Se mueve el indice de imagen a la columna antes de la copia
- add r10, r10, r6 ;Se mueve el indice de Imagen a la siguiente fila, sumando el numero de elementos por fila
- br COPY_LOOP ;Copiar la siguiente fila
- FIN_SUB: DESTROYFP()
- FilPixel: CREATEFP()
- ld r2, r31, 12 ;Load i
- ld r3, r31, 16 ;Load j
- ld r20, r31, 8 ;Load Imagen
- ld r4, r20, 0 ;Load M
- ld r5, r20, 4 ;Load N
- sub r4, r4, 1; ;M-1
- sub r5, r5, 1 ;N-1
- cmp r7, r2, r4 ;i = M-1?
- bb1 eq, r7, FIN_2_FILP
- cmp r7, r2, r4 ;j = N-1?
- bb1 eq, r7, FIN_2_FILP
- cmp r7, r2, 0 ;i = 0?
- bb1 eq, r7, FIN_2_FILP
- cmp r7, r3, 0 ;j = 0?
- bb1 eq, r7, FIN_2_FILP
- subu r30, r30, 12 ;Reserva en el marco de pila 3 palabras
- or r25, r30, r30 ;Puntero a SubMatriz
- PUSH(r3)
- PUSH(r2)
- PUSH(r25)
- PUSH(r20)
- bsr SubMatriz
- addu r30, r30, 16
- ld r21, r31, 20 ;Load MFiltro
- or r25, r30, r30 ;Puntero a SubMatriz
- PUSH(r21)
- PUSH(r25)
- bsr ValorPixel
- addu r30, r30, 8
- cmp r7, r29, 0
- bb1 lt, r7, FILP_0
- cmp r7, r29, 255
- bb1 gt, r7, FILP_255
- br FIN_FILP
- FILP_0: or r29, r0, 0
- br FIN_FILP
- FILP_255: or r29, r0, 255
- br FIN_FILP
- FIN_2_FILP: ld r20, r31, 8 ;Load Imagen
- ld r10, r20, 4 ;Load N de Imagen
- ld r2, r31, 12 ;Load i
- muls r10, r2, r10
- add r10, r10, 8 ;Saltamos M y N y convertimos r10 en el indice absoluto a utilizar en la matriz Imagen
- ld r3, r31, 16 ;Load j
- add r10, r10, r3 ;Offset elemento central
- ld.bu r29, r20, r10 ;Cargar Imagenij
- FIN_FILP: DESTROYFP()
- Filtro: CREATEFP()
- subu r30, r30, 12
- ld r20, r31, 8 ;Load Imagen
- ld r21, r31, 12 ;Load ImFiltrada
- ld r22, r31, 16 ;Load MFiltro
- ld r4, r20, 0 ;Load M Imagen
- st r4, r21, 0 ;Store M Imagen en ImFiltrada
- ld r5, r20, 4 ;Load N Imagen
- st r5, r21, 4 ;Store N Imagen en ImFiltrada
- or r2, r0, 0 ;r2 sera el contador de fila (i)
- or r3, r0, 0 ;r3 sera el contador de columna (j)
- or r6, r0, 0 ;r6 sera el indice de matriz de ImFiltrada
- add r6, r6, 8 ;Saltamos M y N y apuntamos al primer byte de la matriz ImFiltrada
- st r6, r31, -4 ;Guardamos el indice de ImFiltrada como local
- st r3, r31, -8 ;Guardamos j como local
- st r2, r31, -12 ;Guardamos i como local
- LOOP_N_F: PUSH(r22)
- PUSH(r3)
- PUSH(r2)
- PUSH(r20)
- bsr FilPixel ;Tras esto debemos asegurarnos de restaurar los registros a los valores que queremos
- addu r30, r30, 16
- ld r20, r31, 8 ;Load Imagen
- ld r21, r31, 12 ;Load ImFiltrada
- ld r22, r31, 16 ;Load MFiltro
- ld r4, r20, 0 ;Load M Imagen
- ld r5, r20, 4 ;Load N Imagen
- ld r6, r31, -4 ;Load indice
- ld r3, r31, -8 ;Load j
- ld r2, r31, -12 ;Load i
- st.b r29, r21, r6
- add r6, r6, 1 ;Aumentamos el indice de la matriz ImFiltrada
- add r3, r3, 1 ;j -> j+1
- st r6, r31, -4 ;Guardamos el indice de ImFiltrada como local
- st r3, r31, -8 ;Guardamos j como local
- cmp r7, r3, r5 ;Comparar j y n
- bb0 eq, r7, LOOP_N_F;Si j aun no es igual a N hacemos otra iteracion sobre la fila
- LOOP_M_F: add r2, r2, 1 ;i -> i+1
- st r2, r31, -12 ;Guardamos i como local
- or r3, r0, 0 ;Restaurar j al principio de la columna
- st r3, r31, -8 ;Guardamos j como local
- cmp r7, r2, r4 ;Comparar i y m
- bb0 eq, r7, LOOP_N_F;Si i aun no es igual a M hacemos otra iteracion sobre la siguiente fila
- FIN_FILTRO: DESTROYFP()
- FiltRec: CREATEFP()
- ld r20, r31, 8 ;Load ImagenIn
- ld r4, r20, 0 ;Load M
- ld r5, r20, 4 ;Load N
- muls r6, r4, r5 ;Calcular numero elementos matriz. Usaremos r6 para calcular el espacio a reservar
- LOOP_RES: and r8, r6, 3 ;Bitwise and con 3 para comprobar que los 2 ultimos bits son 0 (multiplo de 4)
- cmp r7, r8, r0 ;Comprobamos el bitwise anterior. Si es eq 0, será multiplo de 4. Si no, sumaremos 1 al espacio
- bb1 eq, r7, RESERVA ;No hace falta sumar el 1
- add r6, r6, 1 ;Sumamos el 1 (no hemos saltado, el bitwise and no era 0)
- br LOOP_RES
- RESERVA: add r6, r6, 8 ;Dos palabras para M y N
- subu r30, r30, r6 ;Reservamos el espacio en pila
- ;Paso 2
- ld r22, r31, 16 ;Load MFiltro
- ld r21, r31, 12 ;Load ImagenOut
- PUSH(r22)
- PUSH(r21)
- PUSH(r20)
- bsr Filtro
- addu r30, r30, 12
- ;Paso 3
- brk1: or r24, r30, r30 ;Puntero al principio de ImTmp
- ld r21, r31, 12 ;Load ImagenOut
- ld r3, r21, 0 ;Load M
- st r3, r24, 0 ;Store M
- ld r4, r21, 4 ;Load N
- st r4, r24, 4 ;Store N
- or r5, r0, 8 ;r5 será un puntero para ambas matrices
- muls r6, r3, r4 ;Numero de elementos a copiar. Asi sabremos cuando parar
- add r6, r6, 8 ;Añadimos 8 a las iteraciones ya que el contador empezara en 8, ya que se usa tambien como indice
- COPY_LOOP_R:ld.bu r9, r21, r5 ;Load el siguiente elemento
- st.b r9, r24, r5 ;Y store en ImTmp
- add r5, r5, 1 ;Avanzamos el contador
- cmp r7, r5, r6 ;Comparamos al numero de iteraciones
- bb0 eq, r7, COPY_LOOP_R ;Si las iteraciones aun no son iguales hacemos otra
- ;Paso 4
- sub r2, r0, 1 ;oper -1 para nFiltrados
- PUSH(r2)
- bsr nFiltrados
- addu r30, r30, 4
- cmp r7, r29, 0 ;si el resultado es 0...
- bb1 eq, r7, FIN_2_REC ;Salta para terminar el paso
- ;Paso 5
- ld r20, r31, 8 ;Load ImagenIn
- ld r21, r31, 12 ;Load ImagenOut
- brk3: PUSH(r21)
- PUSH(r20)
- bsr Comp
- brk2: addu r30, r30, 8
- ld r2, r31, 20 ;Load NCambios
- cmp r7, r29, r2
- bb1 lt, r7, FIN_REC
- ;Paso 6. Notese que, ya que no hemos hecho ningun otro push, la pila deberia seguir apuntando a ImgTemp
- or r24, r30, r30
- ld r21, r31, 12 ;Load ImagenOut
- ld r22, r31, 16 ;Load MFiltro. Recordamos que tenemos ya NCambios del paso 5
- PUSH(r2)
- PUSH(r22)
- PUSH(r21)
- PUSH(r24)
- bsr FiltRec
- ;Paso 7
- FIN_REC: DESTROYFP()
- FIN_2_REC: sub r29, r0, 1 ;si el resultado era 0, asigna r29 = -1 y retorna al llamante
- br FIN_REC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement