David 11 лет назад
Родитель
Сommit
f18886dc18
1 измененных файлов с 23 добавлено и 33 удалено
  1. 23 33
      filtros/blur_asm.asm

+ 23 - 33
filtros/blur_asm.asm

@@ -1,5 +1,4 @@
-default rel
-global _blur_asm
+default rel global _blur_asm
 global blur_asm
 global blur_asm
 
 
 ; Alias para no volverme loco con los registros
 ; Alias para no volverme loco con los registros
@@ -38,39 +37,40 @@ blur_asm:
 	mov rax, PIXEL_SIZE
 	mov rax, PIXEL_SIZE
 	mul cols
 	mul cols
 	mul radius 
 	mul radius 
-								;rax ahora es cols*pix_size*radius
-	add src, rax				; Avanzo el radius filas (col*pix_size)
-	add dst, rax				; idem
+								; rax:=cols*pix_size*radius => cuantas filas debo saltear
+	add src, rax				; Avanzo "radius" filas (col*pix_size*radius)
+	add dst, rax				
 
 
-	mov rax, PIXEL_SIZE
-	mul radius					;rax ahora es radius pixeles
-
-	add src, rax				;avanzo radius pixeles (borde)
-	add dst, rax				;idem
-
-	mov cols, r9				;recupero cols  por el mul
 	sub filas, radius			;acomodo filas para ignorar los bordes
 	sub filas, radius			;acomodo filas para ignorar los bordes
 	sub filas, radius			;acomodo filas para ignorar los bordes
 	sub filas, radius			;acomodo filas para ignorar los bordes
 
 
-	sub cols, rax				;acomodo cols para ignorar los bordes
+	mov cols, r9				;recupero cols por el mul
+	sub cols, radius			;resto radius columnas 
+	sub cols, radius			;resto radius columnas
 
 
-	mov rax,PIXEL_SIZE 
+	mov rax, PIXEL_SIZE
 	mul cols
 	mul cols
 	mov cols, rax 				;cols:=cols*pix_size
 	mov cols, rax 				;cols:=cols*pix_size
-	xor r9,r9
+
 	xor r10,r10
 	xor r10,r10
+
+.iniciarFila:
+	lea src, [src+PIXEL_SIZE*radius]	;avanzo radius pixeles (borde)
+	lea dst, [dst+PIXEL_SIZE*radius]	;avanzo radius pixeles (borde)
+	xor r9,r9
+
 .loop:
 .loop:
     cmp cols, r9              	; Comparo tamaño con el contador
     cmp cols, r9              	; Comparo tamaño con el contador
-    jl .finFila                    ; Si ya recorri la imagen voy al final
+    je .finFila                    ; 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)|......|
     ;movdqu xmm0, [src]          ; Cargo la imagen 1 => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|......|
 	pxor xmm0,xmm0
 	pxor xmm0,xmm0
 
 
 .write:
 .write:
-    movdqu [dst], xmm0          ; Escribo en el destino
+    movd [dst], xmm0          ; Escribo en el destino
 .endLoop:
 .endLoop:
-    add src, PIXEL_SIZE * 4     ; Incremento 4 pixeles
-    add dst, PIXEL_SIZE * 4
-    add r9, PIXEL_SIZE * 4
+    add src, PIXEL_SIZE      ; Incremento 4 pixeles
+    add dst, PIXEL_SIZE
+    add r9, PIXEL_SIZE
     jmp .loop
     jmp .loop
 
 
 .finFila:
 .finFila:
@@ -78,20 +78,10 @@ blur_asm:
 	cmp r10,filas
 	cmp r10,filas
 	jge .fin
 	jge .fin
 
 
-	xor r9,r9
-
-	mov r11, rdx				;salvo rdx
-	mov rax, PIXEL_SIZE
-	mul radius					;rax ahora es radius pixeles
-
-	add src, rax				;agrego radius a la columna inicial
-	add src, rax				;agrego radius a la columna inicial
-	add dst, rax
-	add dst, rax
-
-	mov rdx, r11				;recupero rdx
+	lea src, [src+PIXEL_SIZE*radius]	;agrego radius a la columna (termino la fila)
+	lea dst, [dst+PIXEL_SIZE*radius]
 
 
-	jmp .loop
+	jmp .iniciarFila
 
 
 .fin:
 .fin:
 	pop r11
 	pop r11