;void monoMax(unsigned char* bmpIn,
;unsigned char* bmpOut,
;short unsigned int tamFil,
;short unsigned int tamCol,)
global monoMax
%define matriz1 [ebp + 8]; 32 bits
%define matrizres [ebp + 12]; 32 bits(la matriz es de 1/3 del tamaño de la original ya que guarda solamente un valor en vez de los 3)
%define col [ebp + 16];16 bits (cant en pixeles)
%define fil [ebp + 20]; 16 bits (cant en pixeles)
%define cont [ebp - 4] ; Variable local
section.text
monoMax:
push ebp
mov ebp, esp
sub esp, 4
push edi
push esi
push ebx
xor ebx, ebx
mov bx, col ;en ebx me guardo la cantidad de pixeles por cada fila
mov esi, matriz1 ; cargo la matriz A
mov edi, matrizres ; cargo la matriz de resultado
mov ecx, fil ; me guardo en ecx la cantidad de filas para el ciclo
ciclofilas:
mov cont, ebx ; me guardo el contador para cada ciclo de columnas
ciclocolumnas:
cmp ebx, 0
je continuo
xor eax, eax
xor edx, ecx
mov al, [esi]
mov dl, [esi + 1]
cmp al, dl
cmovb ax, dx
mov dl, [esi + 2]
cmp al, dl
cmovb ax, dx
mov [edi], al
add esi, 3
add edi, 1
dec ebx
jmp ciclocolumnas
continuo:
mov ebx, cont
loop ciclofilas ; continuo hasta terminar con todas las filas
fin:
pop ebx
pop esi
pop edi
add esp, 4
pop ebp
ret