[ 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.
[ Eurora3D Team @ 26.05.2007. 12:33 ] @
Nisam gledao kod (ako primetim nesto javicu ti) ali vidim da da ti uglavom imas probleme sa "kompailiranjem" == asembliranjem
Trabala bi da bolje proucis sintaksu svog asemblera i njegove opcije za asembliranje.
Pozdrav
[ marija_st210 @ 27.05.2007. 01:09 ] @
Sve sam iscitala sta imam.
Sve fakultetske skripte,praktikum,knjigu...
Ne mogu da se snadjem u knoppix okruzenju u onom njihovom dibageru ddd i gledanju registara.

Ako neko ima GNU/Linux Debian neka mi kaze kako da kompajliram ovaj zadatak i kako da gledam registre.
Ja uzmem gcc -g -o program program.S
Onda uzmem status->registers i gledam registre.
I onda mi odjednom napise poruku S:32 Segmentation fault,posle pedesetak koraka,kada uzmem run opciju.

Nije mi jasno...

[ Eurora3D Team @ 07.06.2007. 22:49 ] @
Pogledaj primer komandne linije za kompailiranje koji ti je dao rumpl u tvojoj predhodnoj temi.
Code:

$ make exo1   
cc    exo1.s   -o exo1 
$ ./exo1
Unesite ime i prezime: asdf
Vi ste: asdf

Ja radim na Windows-u ali primecujem da on ne koristi -g opciju kao ti
Pozdrav
[ marija_st210 @ 10.06.2007. 03:21 ] @
Prosao mi je ispit...
Nije vise ovo bitno...
Greska je bila u kodovima za konverziju...
Ne u dibageru...
Pozdrav!