Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- and r8, r6, 3 ;Bitwise and con 3 para comprobar que los 2 ultimos bits son 0 (multiplo de 4)
- divs r6, r6, 4 ;r6 entre 4 para obtener el espacio a reservar
- add r6, r6, 8 ;Dos palabras para M y N
- 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)
- RESERVA: 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
- 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 FIN_2_REC
- ;Paso 5
- ld r20, r31, 8 ;Load ImagenIn
- ld r21, r31, 12 ;Load ImagenOut
- PUSH(r21)
- PUSH(r20)
- bsr Comp
- 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