Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. FiltRec:    CREATEFP()
  3.             ld r20, r31, 8      ;Load ImagenIn
  4.             ld r4, r20, 0       ;Load M
  5.             ld r5, r20, 4       ;Load N
  6.             muls r6, r4, r5     ;Calcular numero elementos matriz. Usaremos r6 para calcular el espacio a reservar
  7.             and r8, r6, 3       ;Bitwise and con 3 para comprobar que los 2 ultimos bits son 0 (multiplo de 4)
  8.             divs r6, r6, 4      ;r6 entre 4 para obtener el espacio a reservar
  9.             add r6, r6, 8       ;Dos palabras para M y N
  10.             cmp r7, r8, r0      ;Comprobamos el bitwise anterior. Si es eq 0, será multiplo de 4. Si no, sumaremos 1 al espacio
  11.             bb1 eq, r7, RESERVA ;No hace falta sumar el 1
  12.             add r6, r6, 1       ;Sumamos el 1 (no hemos saltado, el bitwise and no era 0)
  13. RESERVA:    subu r30, r30, r6   ;Reservamos el espacio en pila
  14.            
  15.             ;Paso 2
  16.             ld r22, r31, 16     ;Load MFiltro
  17.             ld r21, r31, 12     ;Load ImagenOut
  18.             PUSH(r22)
  19.             PUSH(r21)
  20.             PUSH(r20)
  21.             bsr Filtro
  22.             addu r30, r30, 12
  23.  
  24.             ;Paso 3
  25.             or r24, r30, r30    ;Puntero al principio de ImTmp
  26.             ld r21, r31, 12     ;Load ImagenOut
  27.             ld r3, r21, 0       ;Load M
  28.             st r3, r24, 0       ;Store M
  29.             ld r4, r21, 4       ;Load N
  30.             st r4, r24, 4       ;Store N
  31.             or r5, r0, 8        ;r5 será un puntero para ambas matrices
  32.             muls r6, r3, r4     ;Numero de elementos a copiar. Asi sabremos cuando parar
  33.             add r6, r6, 8       ;Añadimos 8 a las iteraciones ya que el contador empezara en 8, ya que se usa tambien como indice
  34. COPY_LOOP_R:ld.bu r9, r21, r5   ;Load el siguiente elemento
  35.             st.b r9, r24, r5    ;Y store en ImTmp
  36.             add r5, r5, 1       ;Avanzamos el contador
  37.             cmp r7, r5, r6      ;Comparamos al numero de iteraciones
  38.             bb0 eq, r7, COPY_LOOP_R     ;Si las iteraciones aun no son iguales hacemos otra
  39.            
  40.             ;Paso 4
  41.             sub r2, r0, 1       ;oper -1 para nFiltrados
  42.             PUSH(r2)
  43.             bsr nFiltrados
  44.             addu r30, r30, 4
  45.             cmp r7, r29, 0      ;si el resultado es 0...
  46.             bb1 FIN_2_REC
  47.  
  48.             ;Paso 5
  49.             ld r20, r31, 8      ;Load ImagenIn
  50.             ld r21, r31, 12     ;Load ImagenOut
  51.             PUSH(r21)
  52.             PUSH(r20)
  53.             bsr Comp
  54.             addu r30, r30, 8
  55.             ld r2, r31, 20      ;Load NCambios
  56.             cmp r7, r29, r2    
  57.             bb1 lt, r7, FIN_REC
  58.  
  59.             ;Paso 6. Notese que ya que no hemos hecho ningun otro push, la pila deberia seguir apuntando a ImgTemp
  60.             or r24, r30, r30
  61.             ld r21, r31, 12     ;Load ImagenOut
  62.             ld r22, r31, 16     ;Load MFiltro. Recordamos que tenemos ya NCambios del paso 5
  63.             PUSH(r2)
  64.             PUSH(r22)
  65.             PUSH(r21)
  66.             PUSH(r24)
  67.             bsr FiltRec
  68.  
  69.             ;Paso 7
  70. FIN_REC:    DESTROYFP()
  71. FIN_2_REC:  sub r29, r0, 1      ;si el resultado era 0, asigna r29 = -1 y retorna al llamante
  72.             br FIN_REC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement