# $Author: sitexec $ # $Revision: 1.2 $ # $Date: 2007/04/24 13:25:12 $ # $Header: /home/sitexec/cvs/sitexec/dir/Assembly/master/mmScore/mmScore.S,v 1.2 2007/04/24 13:25:12 sitexec Exp $ #.global _start #_start: #jmp mmScore .global mmScore mmScore: nop #MM_NPEGS = 4 oldebp = 0 retaddr = oldebp + 32 c1 = retaddr + 4 c2 = c1 + 4 pNumBlack = c2 + 4 pNumWhite = pNumBlack + 4 i = oldebp - 4 j = i - 4 b1 = j - MM_NPEGS b2 = b1 - MM_NPEGS tempblack = b2 - 4 tempwhite = tempblack - 4 pusha movl %esp, %ebp addl $tempwhite, %esp movl $0, i(%ebp) movl $0, tempblack(%ebp) movl $0, tempwhite(%ebp) #movl i(%ebp), %ebx movl $0, %edx startfor1: movl i(%ebp), %ebx cmpl $MM_NPEGS, %ebx jz endfor1 movl c1(%ebp), %edx addl %ebx, %edx movb (%edx), %dl movl %ebp, %edx addl $b1, %edx addl %ebx, %edx movb %dl, (%edx) addl $1, i(%ebp) jmp startfor1 endfor1: movl $0, %edx startfor2: movl i(%ebp), %ebx cmpl $MM_NPEGS, %ebx jz endfor2 movl c2(%ebp), %edx addl %ebx, %edx movb (%edx), %dl movl %ebp, %edx addl $b2, %edx addl %ebx, %edx movb %dl, (%edx) addl $1, i(%ebp) jmp startfor2 endfor2: movl $0, i(%ebp) startwhile1: movl i(%ebp), %ebx cmpl $MM_NPEGS, %ebx jz endwhile1 startif2: #movl b1+i(%ebp), %eax #cmpl %eax, b2+i(%ebp) movl %ebp, %eax addl $b1, %eax addl i(%ebp), %eax movb (%eax), %cl movl %ebp, %eax addl $b2, %eax addl i(%ebp), %eax movb (%eax), %ch cmpb %cl, %ch jnz endif2 addl $1, tempblack(%ebp) #movl $1, b1+i(%ebp) movl %ebp, %eax addl $b1, %eax addl i(%ebp), %eax movb $-1, (%eax) #movl $2, b2+i(%ebp) movl %ebp, %eax addl $b2, %eax addl i(%ebp), %eax movb $-2, (%eax) endif2: addl $1, i(%ebp) jmp startwhile1 endwhile1: movl $0, i(%ebp) startwhile2: movl i(%ebp), %ebx cmpl $MM_NPEGS, %ebx jz endwhile2 movl $0, j(%ebp) cmpl j(%ebp), %ebx jz endwhile3 startif3: #movl b1+i(%ebp), %eax #cmpl %eax,b2+j(%ebp) movl %ebp, %eax addl $b1, %eax addl i(%ebp), %eax movb (%eax), %cl movl %ebp, %eax addl $b2, %eax addl j(%ebp), %eax movb (%eax), %ch cmpb %cl, %ch jz nexttest jmp endif3 nexttest: movl i(%ebp), %eax cmpl %eax, j(%ebp) jnz endif3 addl $1, tempwhite(%ebp) #movl $1, b1+i(%ebp) movl %ebp, %eax addl $b1, %eax addl i(%ebp), %eax movb $-1, (%eax) #movl $2, b2+j(%ebp) movl %ebp, %eax addl $b2, %eax addl j(%ebp), %eax movb $-2, (%eax) endif3: addl $1, j(%ebp) endwhile3: addl $1, i(%ebp) jmp startwhile2 endwhile2: movl tempblack(%ebp), %eax movl $5, pNumBlack(%ebp) movl tempwhite(%ebp), %eax movl $5, pNumWhite(%ebp) #movl tempblack(%ebp), %eax #movl pNumBlack(%ebp), %ebx #movl $0, (%ebx) #movl tempwhite(%ebp), %eax #movl pNumWhite(%ebp), %ebx #movl $0, (%ebx) movl %ebp, %esp popa ret