Untitled

 avatar
unknown
plain_text
a year ago
4.1 kB
3
Indexable
.data
	formatScanf: .asciz "%ld "
	formatPrintf: .asciz "%ld "
	m: .space 4
	n: .space 4
	p: .space 4
	k: .space 4
	x: .space 4
	y: .space 4
	i: .space 4 
	j: .space 4 
	c: .space 4 
	S: .space 2000 
	S2: .space 2000
	m2: .space 4 
	n2: .space 4 
	nrv: .space 4
	cell: .space 4
	slash: .asciz "\n"

.text
.global main
main:

    pushl $m
    pushl $formatScanf
    call scanf
    popl %ebx
    popl %ebx
    addl $2, m
    movl m, %ecx
    decl %ecx
    movl %ecx, m2
  
 
    pushl $n
    pushl $formatScanf
    call scanf
    popl %ebx
    popl %ebx
    addl $2, n
    movl n, %ecx
    decl %ecx
    movl %ecx, n2
   
    pushl $p
    pushl $formatScanf
    call scanf
    popl %ebx
    popl %ebx
    movl $0, c

for_vii:

	movl c, %ecx
	cmp %ecx, p
	je for_k

	pushl $x
	pushl $formatScanf
	call scanf
	popl %ebx
	popl %ebx
   
	pushl $y
	pushl $formatScanf
	call scanf
	popl %ebx
	popl %ebx

	movl x,	%eax
	xorl %edx, %edx
	mull n
	addl y, %eax
 	incl %eax

 	lea S, %edi
	movl $1, (%edi, %eax, 4)
	incl c
	jmp for_vii

  
for_k:

	pushl $k
	pushl $formatScanf
	call scanf
	popl %ebx
	popl %ebx
	movl $0, c

evolutii:

	movl c, %ecx
	cmp %ecx, k
	je out 
	incl c
	movl $1, i
    
for_line:

	movl i, %ecx
	cmp %ecx, m2
	je transpunere
	movl $1, j
    
for_column:

	movl j, %ecx
	cmp %ecx, n2
	je cont_line

	movl i, %eax
	xor %edx, %edx
	mull n 
	addl j, %eax

	lea S, %edi
	movl (%edi, %eax, 4), %ebx
	movl %ebx, cell 
	movl $0, nrv

	//i-1,j-1
	movl i, %eax
	xor %edx, %edx
	decl %eax
	mull n
	addl j, %eax
	decl %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv
	//i-1, j
	movl i, %eax
	xor %edx, %edx
	decl %eax
	mull n
	addl j, %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv
	//i-1,j+1
	movl i, %eax
	xor %edx, %edx
	decl %eax
	mull n
	addl j, %eax
	incl %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv
	//i,j+1
	movl i, %eax
	xor %edx, %edx
	mull n
	addl j, %eax
	incl %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv
	//i, j-1
	movl i, %eax
	xor %edx, %edx
	mull n
	addl j, %eax
	decl %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv
	//i+1,j+1
	movl i, %eax
	xor %edx, %edx
	incl %eax
	mull n
	addl j, %eax
	incl %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv
	//i+1,j
	movl i, %eax
	xor %edx, %edx
	incl %eax
	mull n
	addl j, %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv
	//i+1,j-1
	movl i, %eax
	xor %edx, %edx
	incl %eax
	mull n
	addl j, %eax
	decl %eax
	movl (%edi, %eax, 4), %edx
	addl %edx, nrv

	cmp $0, %ebx
	je cell_moarta
	jmp cell_vie

cont_column:

	incl j
	jmp for_column
        
cont_line:
            
	incl i
	jmp for_line
	
cell_moarta: 

	movl nrv, %eax
	cmp $3, %eax
	je cell_invie
	
	movl i, %eax
	xor %edx, %edx
	mull n
	addl j, %eax
	
	lea S2, %edi
	movl $0,(%edi, %eax, 4)
	jmp cont_column
    
cell_vie:

	movl nrv, %eax
	cmp $2, %eax
	je cell_invie
	movl nrv, %eax
	cmp $3, %eax	
	je cell_invie
  
	movl i, %eax
	xor %edx, %edx
	mull n
	addl j, %eax
	
	lea S2, %edi
	movl $0,(%edi, %eax, 4)
	jmp cont_column

cell_invie: 
    
	movl i, %eax
	xor %edx, %edx
	mull n
	addl j, %eax
	
	lea S2, %edi
	movl $1, (%edi, %eax, 4)
	jmp cont_column

transpunere:

	movl $1, i
	
for_line_transp:
	
	movl i, %ecx
	cmp %ecx, m2
	je evolutii
	movl $1, j
    
for_column_transp:

	movl j, %ecx
	cmp %ecx, n2
	je cont_line_transp
	movl i, %eax
	xor %edx, %edx
	mull n
	addl j, %eax

	lea S2, %edi
	movl (%edi, %eax, 4), %ebx 
	lea S, %edi
	movl %ebx, (%edi, %eax, 4)

	incl j
	jmp for_column_transp

cont_line_transp:
      
	incl i
	jmp for_line_transp
	jmp evolutii

out:

	movl $1, i

for_i:

	movl i, %ecx
	cmp %ecx, m2
	je exit
	movl $1, j
    
for_j:
            
	movl j, %ecx
	cmp %ecx, n2
	je out_cont

	movl i, %eax
	xor %edx, %edx
	mull n
	addl j, %eax

	lea S , %edi
	movl (%edi, %eax, 4), %ebx

    	pushl %ebx
   	pushl $formatPrintf
    	call printf
    	popl %ebx
    	popl %ebx

    	pushl $0
    	call fflush
    	popl %edx

    	incl j
    	jmp for_j

out_cont:

    	movl $4, %eax
    	movl $1, %ebx
    	movl $slash, %ecx
    	movl $2, %edx
    	int $0x80

    	incl i
    	jmp for_i


exit:
    	mov $1, %eax
    	xor %ebx, %ebx
    	int $0x80
Editor is loading...
Leave a Comment