.486
.model flat
extrn __fltused:near
extrn __ftol:near
public _main
_TEXT segment
_main:
push ebx
push esi
push edi
push ebp
mov ebp,esp
sub esp,4
mov dword ptr (-4)[ebp],0
L2:
mov edi,dword ptr (-4)[ebp]
lea edi,[edi*4]
mov dword ptr (_down)[edi],1
mov dword ptr (_up)[edi],1
L3:
inc dword ptr (-4)[ebp]
cmp dword ptr (-4)[ebp],15
jl L2
mov dword ptr (-4)[ebp],0
L6:
mov edi,dword ptr (-4)[ebp]
mov dword ptr (_rows)[edi*4],1
L7:
inc dword ptr (-4)[ebp]
cmp dword ptr (-4)[ebp],8
jl L6
push 0
call _queens
add esp,4
mov eax,0
L1:
mov esp,ebp
pop ebp
pop edi
pop esi
pop ebx
ret
public _queens
_queens:
push ebx
push esi
push edi
push ebp
mov ebp,esp
sub esp,4
mov dword ptr (-4)[ebp],0
L11:
mov edi,dword ptr (-4)[ebp]
cmp dword ptr (_rows)[edi*4],0
je L15
mov esi,dword ptr (20)[ebp]
mov ebx,edi
sub ebx,esi
cmp dword ptr (_up+28)[ebx*4],0
je L15
lea edi,[esi][edi]
cmp dword ptr (_down)[edi*4],0
je L15
mov edi,dword ptr (-4)[ebp]
mov esi,dword ptr (20)[ebp]
lea ebx,[esi][edi]
mov dword ptr (_down)[ebx*4],0
mov ebx,edi
sub ebx,esi
mov dword ptr (_up+28)[ebx*4],0
mov dword ptr (_rows)[edi*4],0
mov edi,dword ptr (20)[ebp]
mov esi,dword ptr (-4)[ebp]
mov dword ptr (_x)[edi*4],esi
cmp dword ptr (20)[ebp],7
jne L19
call _print
add esp,0
jmp L20
L19:
mov edi,dword ptr (20)[ebp]
lea edi,(1)[edi]
push edi
call _queens
add esp,4
L20:
mov edi,dword ptr (-4)[ebp]
mov esi,dword ptr (20)[ebp]
lea ebx,[esi][edi]
mov dword ptr (_down)[ebx*4],1
mov ebx,edi
sub ebx,esi
mov dword ptr (_up+28)[ebx*4],1
mov dword ptr (_rows)[edi*4],1
L15:
L12:
inc dword ptr (-4)[ebp]
cmp dword ptr (-4)[ebp],8
jl L11
mov eax,0
L10:
mov esp,ebp
pop ebp
pop edi
pop esi
pop ebx
ret
public _print
_print:
push ebx
push esi
push edi
push ebp
mov ebp,esp
sub esp,4
mov dword ptr (-4)[ebp],0
L23:
mov edi,dword ptr (-4)[ebp]
mov edi,dword ptr (_x)[edi*4]
lea edi,(49)[edi]
push edi
lea edi,(L27)
push edi
call _printf
add esp,8
L24:
inc dword ptr (-4)[ebp]
cmp dword ptr (-4)[ebp],8
jl L23
lea edi,(L28)
push edi
call _printf
add esp,4
mov eax,0
L22:
mov esp,ebp
pop ebp
pop edi
pop esi
pop ebx
ret
_TEXT ends
extrn _printf:near
_TEXT segment
_TEXT ends
_DATA segment
public _x
align 4
_x label byte
db 32 dup (0)
public _rows
align 4
_rows label byte
db 32 dup (0)
public _down
align 4
_down label byte
db 60 dup (0)
public _up
align 4
_up label byte
db 60 dup (0)
_DATA ends
_TEXT segment
align 1
L28 label byte
db 10
db 0
align 1
L27 label byte
db 37
db 99
db 32
db 0
_TEXT ends
end
