All pastes #455505 Raw Edit

Stuff

public text v1 · immutable
·published 2007-04-24 06:59 UTC
rendered paste body
# $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