Untitled
unknown
plain_text
a year ago
4.6 kB
6
Indexable
.data s: .space 1600 #18 linii si coloane +2 pentru matricea extinsa s1: .space 1600 #copie formatScanf: .asciz "%ld" formatPrintf: .asciz "%ld " newLine: .asciz "\n" n: .space 4 n2: .space 4 m: .space 4 m2: .space 4 p: .space 4 left: .space 4 right: .space 4 index: .space 4 linie: .space 4 coloana: .space 4 k: .space 4 vecini: .space 4 dimMat: .space 4 .text .global main main: #cin >> n pushl $n pushl $formatScanf call scanf popl %ebx popl %ebx #cin >> m pushl $m pushl $formatScanf call scanf popl %ebx popl %ebx #cin >> p pushl $p pushl $formatScanf call scanf popl %ebx popl %ebx lea s, %edi lea s1, %esi movl n, %eax movl %eax, n2 movl m, %eax movl %eax, m2 addl $2, n2 addl $2, m2 xorl %edx, %edx movl n2, %eax mull m2 movl %eax, dimMat xorl %ecx, %ecx #initializare matrice s cu 0 initializare_matrice: cmp %ecx, dimMat je sfarsit_initializare_matrice movl $0, (%edi, %ecx, 4) incl %ecx jmp initializare_matrice sfarsit_initializare_matrice: movl $0, index loop_citire: #for (index = 0; index < p; ++index) # cin >> left >> right; # s[left + 1][right + 1] = 1; movl index, %ecx cmp p, %ecx je sfarsit_loop_citire #cin >> left pushl $left pushl $formatScanf call scanf popl %ebx popl %ebx #cin >> right pushl $right pushl $formatScanf call scanf popl %ebx popl %ebx # s[left + 1][right + 1] = movl left, %eax incl %eax xor %edx, %edx mull m2 addl right, %eax incl %eax movl $1, (%edi, %eax, 4) incl index jmp loop_citire sfarsit_loop_citire: citire_k: # cin >> k pushl $k pushl $formatScanf call scanf popl %ebx popl %ebx sfarsit_citire_k: movl $0, index for_k_loop: movl index, %ecx cmpl k, %ecx je sfarsit_for_k_loop xorl %ecx, %ecx resetare_matrice_s1: # initializez toata matricea extinsa s1 cu 0 cmp %ecx, dimMat je sfarsit_resetare_matrice_s1 movl $0, (%esi, %ecx, 4) incl %ecx jmp resetare_matrice_s1 sfarsit_resetare_matrice_s1: movl $1, linie pentru_linie: movl linie, %ecx cmp n, %ecx jg sfarsit_pentru_linie movl $1, coloana pentru_coloana: movl coloana, %ecx cmp m, %ecx jg sfarsit_pentru_coloana # calcul vecini element de pe pozitia [linie, coloana] movl $0, vecini # %eax = [linie, coloana] movl linie, %eax xor %edx, %edx mull m2 addl coloana, %eax # %eax = [linie, coloana +1 -1] decl %eax movl (%edi, %eax, 4), %ecx addl %ecx, vecini addl $2, %eax movl (%edi, %eax, 4), %ecx addl %ecx, vecini # %eax = [linie - 1, coloana +0 +1 -1] subl m2, %eax #scad o linie movl (%edi, %eax, 4), %ecx addl %ecx, vecini decl %eax movl (%edi, %eax, 4), %ecx addl %ecx, vecini decl %eax movl (%edi, %eax, 4), %ecx addl %ecx, vecini # %eax = [linie + 1, coloana +0 +1 -1] addl m2, %eax addl m2, %eax movl (%edi, %eax, 4), %ecx addl %ecx, vecini incl %eax movl (%edi, %eax, 4), %ecx addl %ecx, vecini incl %eax movl (%edi, %eax, 4), %ecx addl %ecx, vecini # inapoi la pozitia initiala [linie, coloana] subl m2, %eax decl %eax cmpl $1, (%edi, %eax, 4) je celula_vie celula_moarta: movl vecini, %ecx cmpl $3, %ecx je s1_1 jmp s1_0 celula_vie: movl vecini, %ecx cmp $1, %ecx jle s1_0 cmp $4, %ecx jge s1_0 jmp s1_1 s1_0: movl $0, (%esi, %eax, 4) jmp sfarsit_comparatie s1_1: movl $1, (%esi, %eax, 4) sfarsit_comparatie: incl coloana jmp pentru_coloana sfarsit_pentru_coloana: incl linie jmp pentru_linie sfarsit_pentru_linie: xorl %ecx, %ecx # copiere matrice s1 inapoi in s copiere_matrice: cmp %ecx, dimMat je sfarsit_copiere_matrice movl (%esi, %ecx, 4), %eax movl %eax, (%edi, %ecx, 4) incl %ecx jmp copiere_matrice sfarsit_copiere_matrice: incl index jmp for_k_loop sfarsit_for_k_loop: afisare_matrice: movl $1, linie for_lines: movl linie, %ecx cmp n, %ecx jg sfarsit_afisare_matrice movl $1, coloana for_columns: movl coloana, %ecx cmp m, %ecx jg new_line movl linie, %eax xor %edx, %edx mull m2 addl coloana, %eax pushl (%edi, %eax, 4) pushl $formatPrintf call printf popl %ebx popl %ebx pushl $0 call fflush popl %ebx incl coloana jmp for_columns new_line: movl $4, %eax movl $1, %ebx movl $newLine, %ecx movl $2, %edx int $0x80 incl linie jmp for_lines sfarsit_afisare_matrice: exit: movl $1, %eax xor %ebx, %ebx int $0x80
Editor is loading...
Leave a Comment