Bläddra i källkod

iteracion basica por archivo

David 11 år sedan
förälder
incheckning
4cd616c536
1 ändrade filer med 41 tillägg och 5 borttagningar
  1. 41 5
      filtros/blur_asm.asm

+ 41 - 5
filtros/blur_asm.asm

@@ -2,11 +2,20 @@ default rel
 global _blur_asm
 global blur_asm
 
-
+; Alias para no volverme loco con los registros
+%define src 	rdi
+%define dst 	rsi
+%define cont 	rdx
+%define size 	rcx
+%define sigma 	r8
+%define radius 	r9
+
+; Algunos defines ultiles
+%define PIXEL_SIZE  4
+
+; Mascaras y esas cosas
 section .data
 
-
-
 section .text
 ;void blur_asm    (
 	;unsigned char *src,
@@ -18,6 +27,33 @@ section .text
 
 _blur_asm:
 blur_asm:
-
-
+    push rbp
+    mov rbp, rsp                ; Stack frame
+
+.calc_size:                     ; Calculo el tamaño de la imagen en bytes
+    mov rax, cont               ; Cargo filas
+    mul size                    ; Multiplico por las columnas
+    mov rbx, PIXEL_SIZE         ; Multiplico temporal
+    mul rbx                     ; Multiplico por el tamaño del pixel
+    mov size, rax               ; Guardo el tamaño
+    xor cont, cont              ; Limpio el contador
+
+.loop:
+    cmp cont, size              ; Comparo tamaño con el contador
+    jge .fin                    ; Si ya recorri la imagen voy al final
+    movdqu xmm0, [src]          ; Cargo la imagen 1 => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|......|
+
+.cuentas:                       ; Resto componente a componente de 4 pixeles de cada imagen
+
+.write:
+    movdqu [dst], xmm0          ; Escribo en el destino
+.endLoop:
+    ; TODO: Si el tamaño de la imagen no es multiplo de 4 acá va a sumar y hacer invalid read al llegar al final
+    add src, PIXEL_SIZE * 4     ; Incremento 4 pixeles
+    add dst, PIXEL_SIZE * 4
+    add cont, PIXEL_SIZE * 4
+    jmp .loop
+
+.fin:
+    pop rbp
     ret