pana acum
unknown
assembly_x86
a year ago
4.1 kB
3
Indexable
//Cerinta 0 .data mLines: .space 4 nCols: .space 4 p: .space 4 x: .space 4 y: .space 4 k: .space 4 i: .space 4 j: .space 4 l: .space 4 sum: .space 4 matrix: .space 1600 matrix2: .space 1600 formatPrintf: .asciz "%d " endl: .asciz "\n" formatScanf: .asciz "%d" .text .global main main: push $mLines push $formatScanf call scanf addl $8, %esp push $nCols push $formatScanf call scanf addl $8, %esp push $p push $formatScanf call scanf addl $8, %esp mov $0, %ecx lea matrix, %edi mov $0, l //lea matrix, %edi et_p: cmp p, %ecx je et_cont push %ecx push $x push $formatScanf call scanf addl $8, %esp push $y push $formatScanf call scanf addl $8, %esp push $k push $formatScanf call scanf addl $8, %esp pop %ecx mov x, %eax mull nCols addl y, %eax movl $1, (%edi, %eax, 4) incl %ecx jmp et_p et_k: mov l, %ecx cmp %ecx, k je et_cont et_cont1: movl $0, i movl $0, j incl l for_lines1: mov i, %ecx cmp %ecx, mLines je et_k movl $0, j for_col1: mov j, %ecx cmp nCols, %ecx je et_cont_for_lines1 //aici se scrie cod //operatii movl $0, %ebx //stanga sus decl i decl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx decl i movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx subl $2, j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx incl i movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx decl i decl j //operatii //operatii1 movl %ebx, sum movl i, %eax mull nCols addl j, %eax movl (%edi, %eax, 4), %ebx cmp $0, %ebx je et_is0 jg et_is1 //0 sau 1 et_is0: cmp %3, sum je et_cond4 jg et_cont_for_col jl et_cont_for_col et_is1: //conditii et_cond1: //1. Subpopulare. Fiecare celula (care este in viata in generatia curenta) cu mai putin de doi //vecini in viata, moare in generatia urmatoare. jmp et_cont_for_col et_cond2: //2. Continuitate celule vii. Fiecare celula (care este in viata in generatia curenta), cu doi sau //trei vecini in viata, va exista si in generatia urmatoare. jmp et_cont_for_col et_cond3: //3. Ultrapopulare. Fiecare celula (care este in viata in generatia curenta), care are mai mult de //trei vecini in viata, moare in generatia urmatoare. jmp et_cont_for_col et_cond4: //4. Creare. O celula moarta care are exact trei vecini in viata, va fi creata in generatia urmatoare. jmp et_cont_for_col et_cond5: //5. Continuitate celule moarte. Orice alta celula moarta, care nu se incadreaza in regula de //creare, ramane o celula moarta. jmp et_cont_for_col //conditii //operatii1 et_cont_for_col: incl j jmp for_col1 et_cont_for_lines1: incl i jmp for_lines1 //operatii //operatii //a 2 a parte et_cont: movl $0, i movl $0, j for_lines: mov i, %ecx cmp %ecx, mLines je et_exit movl $0, j for_col: mov j, %ecx cmp nCols, %ecx je et_cont_for_lines //aici se scrie cod //afisare: movl i, %eax mull nCols addl j, %eax movl (%edi, %eax, 4), %ebx //operatii //operatii push %ebx //cod pus de mn push $formatPrintf call printf addl $8, %esp //afisare incl j jmp for_col et_cont_for_lines: push $endl call printf addl $4, %esp incl i jmp for_lines //a 2 a parte et_exit: push $endl call printf addl $4, %esp push $0 call fflush addl $4, %esp movl $1, %eax movl $0, %ebx int $0x80
Editor is loading...
Leave a Comment