[ marija_st210 @ 25.05.2007. 06:38 ] @
Code: #program: konverzija iz internog formata u ceo oktalni broj u znakovnom obliku .section .data broj: .long 7628572 okt_duz=11 okt_br: .fill okt_duz,1,0 greska: .byte 0 .section .text .globl main #deklaracija funkcije na c-u glasi: #long conv3(long broj, long duz_niz, char* niz) #ovo znaci: # prvi argument je na ebp+8, prenosi se preko vrenosti (broj koji se konvertuje) # drugi argument je na ebp+12, prenosi se preko vrednosti (max duzina stringa) # treci argument je na ebp+16, prenosi se po adresi (adresa izlaznog niza) # greska se vraca preko povratne vrednosti f-je, odnosno preko eax conv3: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax #broj koji se konvertuje movl 16(%ebp), %edi #adresa stringa movl $8, %ebx #baza c3_cifra: cmpl $1, 12(%ebp) #da li ima jos mesta u stringu jle c3_greska xorl %edx, %edx #neophodno zbog divl divl %ebx addb $'0', %dl movb %dl, (%edi) incl %edi decl 12(%ebp) #u stringu sada ima jedno mesto manje andl %eax, %eax #kraj algoritma? jnz c3_cifra movb $0, (%edi) #kraj stringa xorl %eax, %eax #nema greske decl %edi #obrtanje niza movl 16(%ebp), %esi c3_obrni: cmpl %edi, %esi jae c3_kraj movb (%esi), %bh movb (%edi), %bl movb %bl, (%esi) movb %bh, (%edi) decl %edi incl %esi jmp c3_obrni c3_greska: movl $1, %eax c3_kraj: movl %ebp, %esp popl %ebp ret main: pushl $okt_br pushl $okt_duz pushl broj call conv3 addl $12, %esp movb %al, greska kraj: nop Ako vidite gde je greska,napisite mi. Meni pise segmentation fault kada kompajliram. |