SHARE
TWEET

Untitled

a guest Dec 8th, 2019 188 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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top