|
@@ -1,10 +1,20 @@
|
|
|
|
|
+; asmsyntax=nasm
|
|
|
|
|
+
|
|
|
default rel
|
|
default rel
|
|
|
global _diff_asm
|
|
global _diff_asm
|
|
|
global diff_asm
|
|
global diff_asm
|
|
|
|
|
|
|
|
|
|
+; Alias para no volverme loco
|
|
|
|
|
+%define src rdi
|
|
|
|
|
+%define src2 rsi
|
|
|
|
|
+%define dst rdx
|
|
|
|
|
+%define cont rcx
|
|
|
|
|
+%define size r8
|
|
|
|
|
|
|
|
-section .data
|
|
|
|
|
|
|
+; Algunos defines ultiles
|
|
|
|
|
+%define PIXEL_SIZE 4
|
|
|
|
|
|
|
|
|
|
+section .data
|
|
|
|
|
|
|
|
|
|
|
|
|
section .text
|
|
section .text
|
|
@@ -17,6 +27,43 @@ section .text
|
|
|
|
|
|
|
|
_diff_asm:
|
|
_diff_asm:
|
|
|
diff_asm:
|
|
diff_asm:
|
|
|
|
|
+ push rbp
|
|
|
|
|
+ mov rbp, rsp
|
|
|
|
|
+
|
|
|
|
|
+.calc_size:
|
|
|
|
|
+ mov r9, dst ; Muevo el destino un rato para hacer el calculo del tamaño de la imagen
|
|
|
|
|
+ mov rax, cont ; Cargo filas
|
|
|
|
|
+ mul size ; Multiplico por las columnas
|
|
|
|
|
+ xor dst, dst ; Limpio temportal
|
|
|
|
|
+ mov dst, PIXEL_SIZE ; Multiplico temporal
|
|
|
|
|
+ mul dst ; Multiplico por el tamaño del pixel
|
|
|
|
|
+ mov size, rax ; Guardo el tamaño
|
|
|
|
|
+ mov dst, r9
|
|
|
|
|
+
|
|
|
|
|
+ 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
|
|
|
|
|
+ pxor xmm1, xmm1
|
|
|
|
|
+ movdqu xmm0, [src] ; Cargo la imagen 1
|
|
|
|
|
+ movdqu xmm1, [src2] ; Cargo la imagen 2
|
|
|
|
|
+
|
|
|
|
|
+.cuentas:
|
|
|
|
|
+; psubb xmm0, xmm1 ; Resto de xmm0 los pixeles de xmm1
|
|
|
|
|
+; mpsadbw xmm0, xmm1, 0b00100100
|
|
|
|
|
+ mpsadbw xmm0, xmm1, 36
|
|
|
|
|
+
|
|
|
|
|
+.write:
|
|
|
|
|
+ movdqu [dst], xmm0 ; Escribo en el destino
|
|
|
|
|
|
|
|
|
|
+.endLoop:
|
|
|
|
|
+ add src, PIXEL_SIZE * 4 ; Incremento 4 pixeles
|
|
|
|
|
+ add src2, PIXEL_SIZE * 4
|
|
|
|
|
+ add dst, PIXEL_SIZE * 4
|
|
|
|
|
+ add cont, PIXEL_SIZE * 4
|
|
|
|
|
+ jmp .loop
|
|
|
|
|
|
|
|
|
|
+.fin:
|
|
|
|
|
+ pop rbp
|
|
|
ret
|
|
ret
|