include irvine32.inc .data chess dd 64 dup(0) a dd 8 dup(0) b dd 15 dup(0) d dd 15 dup(0) sum dd 0 str1 db "八皇后摆法总数:",0 str2 db "第",0 str3 db "种可能摆法:",0 str4 db " ",0 str5 db "按回车键继续...",0 .code main proc mov edi, offset a mov ecx, 8 mov eax, 1 rep stosd mov edi, offset b mov ecx, 15 rep stosd mov edi, offset d mov ecx, 15 rep stosd push 0 call PutQueen mov edx,offset str1 call writestring mov eax,sum call writedec call crlf exit main endp
PutQueen proc push ebp mov ebp,esp pushad mov esi,[ebp+8] ;n mov edi,0 ;col again1: cmp edi,8 jge final0 mov eax,[a+4*edi] cmp eax,0 jz final1 mov ebx,esi add ebx,edi mov eax,[b+4*ebx] cmp eax,0 jz final1 mov ecx,esi sub ecx,edi add ecx,7 mov eax,[d+4*ecx] cmp eax,0 jz final1 mov eax,esi imul eax,8 add eax,edi mov dword ptr [chess+4*eax],1 mov dword ptr [a+4*edi],0 mov dword ptr [b+4*ebx],0 mov dword ptr [d+4*ecx],0 cmp esi,7 jnz final2 inc sum mov edx,offset str2 call writestring mov eax,sum call writedec mov edx,offset str3 call writestring call crlf mov ebx,0 ;i again2: cmp ebx,8 jge final3 mov edx,offset str4 call writestring mov ecx,0 ;j again3: cmp ecx,8 jge final4 mov eax,ebx imul eax,8 add eax,ecx mov eax,[chess+4*eax] call writedec mov al,' ' call writechar inc ecx jmp again3 final4: call crlf inc ebx jmp again2 final3: call crlf mov edx,0 mov eax,sum mov ebx,10 div ebx cmp edx,0 jnz final5 mov edx,offset str5 call writestring call readchar call crlf jmp final5 final2: mov edx,esi inc edx push edx call PutQueen final5: mov eax,esi imul eax,8 add eax,edi mov dword ptr [chess+4*eax],0 mov dword ptr [a+4*edi],1 mov ebx,esi add ebx,edi mov dword ptr [b+4*ebx],1 mov ecx,esi sub ecx,edi add ecx,7 mov dword ptr [d+4*ecx],1 final1: inc edi jmp again1 final0: popad leave ret 4 PutQueen endp end main
|