Cerinta 0x00 TemaASC
unknown
assembly_x86
a year ago
4.6 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 incl mLines push $nCols push $formatScanf call scanf addl $8, %esp incl nCols push $p push $formatScanf call scanf addl $8, %esp mov $0, %ecx lea matrix, %edi lea matrix2, %esi et_p: cmp p, %ecx je citire_k push %ecx push $x push $formatScanf call scanf addl $8, %esp push $y push $formatScanf call scanf addl $8, %esp pop %ecx incl x incl y mov x, %eax mull nCols addl y, %eax movl $1, (%edi, %eax, 4) incl %ecx jmp et_p citire_k: push $k push $formatScanf call scanf addl $8, %esp movl $0, l et_k: mov l, %ecx cmp %ecx, k je et_cont et_cont1: movl $1, i movl $1, j incl l for_lines1: mov i, %ecx cmp %ecx, mLines je et_switch movl $1, 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 //mijloc sus incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx //dreapta sus incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx //dreapta mijloc incl i movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx //stanga mijloc subl $2, j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx //stanga jos incl i movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx //mijloc jos incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx //dreapta jos incl j movl i, %eax mull nCols addl j, %eax addl (%edi, %eax, 4), %ebx decl i decl j //operatii //operatii1 //et_el_curent: 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: movl $3, %ecx cmp %ecx, sum je et_cond4 jg et_cont_for_col jl et_cont_for_col et_is1: movl $2, %ecx cmp %ecx, sum je et_cond2 jl et_cond1 jg et_cond2 //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. movl $0, (%esi, %eax, 4) 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. movl $3, %ecx cmp %ecx, sum jg et_cond3 movl $1, (%esi, %eax, 4) 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. movl $0, (%esi, %eax, 4) 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. movl $1, (%esi, %eax, 4) 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 //schimbarea matricei et_switch: movl %esi, %edi //lea jmp et_k //schimbarea matricei //a 2 a parte et_cont: movl $1, i movl $1, j for_lines: mov i, %ecx cmp %ecx, mLines je et_exit movl $1, 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 //afisare push %ebx 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