[ marija_st210 @ 19.05.2007. 00:41 ] @
Kada ga kompajliram,on nece da ispise ime i prezime...
Radimo u x86,AT&T sintaksa.
Ako moze neko,neka napise gde je greska!



.section .data
ime_i_prezime_max = 40
ime_i_prezime: .fill ime_i_prezime_max,1,0
ime_i_prezime_duzina: .long 0
poruka1: .ascii "Unesite ime i prezime: \0"
poruka1_duzina = .-poruka1
poruka2: .ascii "Vi ste: \0"
poruka2_duzina = .-poruka2

.section .text
.globl main
main:
movl $4, %eax #ispis poruke 1
movl $1, %ebx
leal poruka1, %ecx
movl $poruka1_duzina, %edx
int $0x80

movl $3, %eax #unos imena i prezimena
movl $0, %ebx
leal ime_i_prezime, %ecx
movl $ime_i_prezime_max, %edx

movl %eax, ime_i_prezime_duzina
movl $4, %eax #ispis poruke 2
movl $1, %ebx
leal poruka2, %ecx
movl $poruka2_duzina, %edx
int $0x80

movl $4, %eax #ispis imena i prezimena
movl $1, %ebx
leal ime_i_prezime, %ecx
movl ime_i_prezime_duzina, %edx
int $0x80
kraj:
movl $1, %eax
movl $0, %ebx
int $0x80

[ Eurora3D Team @ 21.05.2007. 21:05 ] @
Moram da kazem da mi je ovaj asembler potpuno nepoznat (kao i sintaksa).
Jedino sto mogu da primetim (logikom) je da ne postoji int $0x80 u segmentu za unos imena i prezimena.
Pozdrav
[ marija_st210 @ 21.05.2007. 22:04 ] @
To sam i ja primetila,jer je javljao gresku dibager.
Ispravila sam.
Upisem ime,prezime ali nece da ispise ono sto upisem...
Nije mi jasno...
[ Eurora3D Team @ 22.05.2007. 00:15 ] @
Jesi stavila ovako ?
deo koda
...
movl $3, %eax #unos imena i prezimena
movl $0, %ebx
leal ime_i_prezime, %ecx
movl $ime_i_prezime_max, %edx
int $0x80 # <- ovde interrupt
movl %eax, ime_i_prezime_duzina # da bi ovde uzeo duzinu reci u eax

movl $4, %eax #ispis poruke 2
movl $1, %ebx
leal poruka2, %ecx
movl $poruka2_duzina, %edx
int $0x80
...

i stavi na kraju celog koda npr

movl $4, %eax #ispis poruke 1
movl $1, %ebx
leal poruka1, %ecx
movl $poruka1_duzina, %edx
int $0x80

da vidis jel uopste stize do kraja ili se prekida zbog greske
Pozdrav
[ marija_st210 @ 22.05.2007. 02:39 ] @
Ubacila sam onaj kod.Stize do kraja,kada je kompajlirao onaj deo sto sam dodala,uspesno je kompajlirao,ali kada je stiglo do

kraj:
movl $1, %eax //
movl $0, %ebx //
int $0x80 //

prijavio mi segmentation fault...

mislim da je greska u ovom kodu.

Da li imas neku ideju kako kraj da izmenim?

kraj:
movl $1, %eax
movl $0, %ebx
int $0x80


[ rumpl @ 22.05.2007. 08:17 ] @
Code:

.section .data
ime_i_prezime_max = 40
ime_i_prezime: .fill ime_i_prezime_max,1,0
ime_i_prezime_duzina: .long 0
poruka1: .ascii "Unesite ime i prezime: \0"
poruka1_duzina = .-poruka1
poruka2: .ascii "Vi ste: \0"
poruka2_duzina = .-poruka2

.section .text
.globl main
main:
movl $4, %eax #ispis poruke 1
movl $1, %ebx
leal poruka1, %ecx
movl $poruka1_duzina, %edx
int $0x80

movl $3, %eax #unos imena i prezimena
movl $0, %ebx
leal ime_i_prezime, %ecx
movl $ime_i_prezime_max, %edx

movl %eax, ime_i_prezime_duzina
movl $4, %eax #ispis poruke 2
movl $1, %ebx
leal poruka2, %ecx
movl $poruka2_duzina, %edx
int $0x80

movl $4, %eax #ispis imena i prezimena
movl $1, %ebx
leal ime_i_prezime, %ecx
movl ime_i_prezime_duzina, %edx
int $0x80
kraj:
movl $1, %eax
movl $0, %ebx
int $0x80


Code:

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


Kod mene radi ovaj program (GNU/Linux Debian).
Za "kraj:", ako ne radi, probaj samo sa : "ret" mada je cudno da ne radi... (meni radi sa mov.. mov.. int.. i sa ret).


[Ovu poruku je menjao rumpl dana 22.05.2007. u 09:27 GMT+1]
[ Eurora3D Team @ 22.05.2007. 10:14 ] @
Umesto ovog kraj: dela moze da ide samo ret (bez labele kraj:)
[ marija_st210 @ 22.05.2007. 17:46 ] @
Code:
.section .data
ime_i_prezime_max = 40
ime_i_prezime: .fill ime_i_prezime_max,1,0
ime_i_prezime_duzina: .long 0
poruka1: .ascii "Unesite ime i prezime: \0"
poruka1_duzina = .-poruka1
poruka2: .ascii "Vi ste: \0"
poruka2_duzina = .-poruka2

.section .text
.globl main
main:
movl $4, %eax #ispis poruke 1
movl $1, %ebx
leal poruka1, %ecx
movl $poruka1_duzina, %edx
int $0x80

movl $3, %eax #unos imena i prezimena
movl $0, %ebx
leal ime_i_prezime, %ecx
movl $ime_i_prezime_max, %edx

movl %eax, ime_i_prezime_duzina
movl $4, %eax #ispis poruke 2
movl $1, %ebx
leal poruka2, %ecx
movl $poruka2_duzina, %edx
int $0x80

movl $4, %eax #ispis imena i prezimena
movl $1, %ebx
leal ime_i_prezime, %ecx
movl ime_i_prezime_duzina, %edx
int $0x80
kraj:
movl $1, %eax
movl $0, %ebx
int $0x80


Code:
 make radi
 cc    radi.s   -o radi
 ./radi
Unesite ime i prezime: Vi ste:



Uopste nece da mi unosi ime i prezime...
Ne znam kako kod tebe hoce da unese ime i prezime...

[ rumpl @ 22.05.2007. 20:27 ] @
E izvini, ja ti poslao losi program, na ovom fali jedan int $0x80, zato nije hteo, ovo bi trebalo da radi:

Code:

.section .data
ime_i_prezime_max = 40
ime_i_prezime: .fill ime_i_prezime_max,1,0
ime_i_prezime_duzina: .long 0
poruka1: .ascii "Unesite ime i prezime: \0"
poruka1_duzina = .-poruka1
poruka2: .ascii "Vi ste: \0"
poruka2_duzina = .-poruka2

.section .text
.globl main
main:
movl $4, %eax #ispis poruke 1
movl $1, %ebx
leal poruka1, %ecx
movl $poruka1_duzina, %edx
int $0x80

movl $3, %eax #unos imena i prezimena
movl $0, %ebx
leal ime_i_prezime, %ecx
movl $ime_i_prezime_max, %edx
int  $0x80  # <<<<<<<<<<<<<<<<< OVAJ JE FALIO!!!

movl %eax, ime_i_prezime_duzina
movl $4, %eax #ispis poruke 2
movl $1, %ebx
leal poruka2, %ecx
movl $poruka2_duzina, %edx
int $0x80

movl $4, %eax #ispis imena i prezimena
movl $1, %ebx
leal ime_i_prezime, %ecx
movl ime_i_prezime_duzina, %edx
int $0x80
kraj:
movl $1, %eax
movl $0, %ebx
int $0x80
[ marija_st210 @ 22.05.2007. 21:45 ] @
Hvala vam mnogo na pomoci!Sada hoce da radi!
Nije mi jasno zasto nije hteo da radi ranije...

Da li mozda imate ideju kako da odradim program da naprimer unesem neki tekst u velikim i malim slovima,
a da mi izlazni tekst bude obrnuto,
na primer:

Unesite string: Ala Je Bio neZGODAN kolOKvIjum 123(*$
Rezultat: aLA jE bIO NEzgodan KOLokViJUM 123(*$

Znam da bi bila velika slova treba da se oduzme $32 od ascii koda malih slova.
Da li bi neko mogao da mi da ideju,ili code,pa da shvatim.

Ili,bio je jedan zadatak prosle godine:

Napisati program koji korisniku omogucava unos do 100 znakova (bez ENTERA) i
jedan znak,a zatim brise sve znakove sa ekrana ukoliko su isti kao uneti znak.
Interakcija sa programom glasi:

Uneti string: Ovo je jedan string
Uneti znak: j
Rezultat: Ovo e edan string.

Kako da to realizujem?To stvarno ne znam...

Ako neko hoce da mi pomogne,hvala unapred!