|
@@ -2,11 +2,20 @@ default rel
|
|
|
global _blur_asm
|
|
global _blur_asm
|
|
|
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 .data
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
section .text
|
|
section .text
|
|
|
;void blur_asm (
|
|
;void blur_asm (
|
|
|
;unsigned char *src,
|
|
;unsigned char *src,
|
|
@@ -18,6 +27,33 @@ section .text
|
|
|
|
|
|
|
|
_blur_asm:
|
|
_blur_asm:
|
|
|
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
|
|
ret
|