Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

pocetnicki problem sa asemblerom

[es] :: Asembler :: pocetnicki problem sa asemblerom

[ Pregleda: 2856 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zikaa
Zivorad Antonijevic
Beograd

Član broj: 10078
Poruke: 106
*.scnet.yu.

Sajt: zantonijevic.com


+1 Profil

icon pocetnicki problem sa asemblerom26.01.2005. u 00:04 - pre 189 meseci
dakle funkcija treba samo da zameni dva stringa a pravi dosta gluposti,
ako neko vidi gde gresim , neka mi kaze.

swap.s
Code:


.intel_syntax noprefix

.text
.global swap_strings

    #funkcija swap_strings
    #menja stringove s1 i s2
    #koji se nalaze
    #na adresama [ebp+8] i [ebp+12]
    
swap_strings:
    enter 0,0

    mov eax, [ebp+8]
    mov eax, [eax]
    mov ecx, [ebp+12]
    xchg [ecx], eax
    mov ecx, [ebp+8]
    xchg [ecx], eax

    
    leave
    ret



i jos test.c
Code:

#include <string.h>
#include <malloc.h>

extern void swap_strings(char *s1, char *s2);

int main()
{
  char *s1;
  char *s2;


  s1=strdup("prvi");
  s2=strdup("drugi");

  printf("%s , %s \n",s1,s2);

  swap_strings(s1,s2);
  printf("%s , %s \n",s1,s2);

  return 0;
}


i komande za kompajliranje (pod linuksom)
as swap.s
gcc -c test.c
gcc -o test test.o swap.o

[Ovu poruku je menjao Sundance dana 28.01.2005. u 16:02 GMT+1]
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.85.*



Profil

icon Re: valjda sam glup (pocetnicki problem sa asemblerom). 26.01.2005. u 02:30 - pre 189 meseci
Nisu glup =) svako ko zeli da radi u asm zna sta hoce i to ne znaci da je covek glup...
Prvo cu ti ukazati na nest osto ja mislim da je bitno pa posle prelazimo na ispravljanje gresaka u kodu:
prvo stringove kad vezujes za pointer moj ti je savet da odmah ides sa
char *prvi="prvi"; umesto strdup, jer je jednostavnoje i lepse za razumevanje, a i preglednije i manje kucanja sto je najbitnije =)))

Naime sto se tice samog predavanja funkciji ovo sto tvoj kod radi je bukvalno sledece ->>
string_swap(0x411111,0x42222)
gde su ove adrese u stvari pointeri na stringove i ti mozes da menjas stringove na tim adresama, medjutim ono sto ti hoces a nisi uradio je greska u samom C delu koda ali ne i u ASM kodu koji radi stvarno ono sto si hteo.
Naime trebao si umesto :
Code:

swap_strings(s1,s2);

da uradis ovo
Code:

swap_strings(&s1, &s2);


asm kod ti je sasvim ok mada bi ga ja skratio malo :
Code:

mov eax, [ebp+8]
mov ecx, [ebp+12]
push [eax]
push [ecx]
pop [eax]
pop [ecx]


Nadam se da sam pomogao sa ovim
 
Odgovor na temu

zikaa
Zivorad Antonijevic
Beograd

Član broj: 10078
Poruke: 106
*.yu
Via: [es] mailing liste

Sajt: zantonijevic.com


+1 Profil

icon Re: valjda sam glup (pocetnicki problem sa asemblerom). 26.01.2005. u 03:02 - pre 189 meseci
hvala.
Mozes li da mi kazes kako bi napisao funkciju koja
se poziva sa swap_strings(s1,s2)?
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
195.252.86.*



Profil

icon Re: valjda sam glup (pocetnicki problem sa asemblerom). 26.01.2005. u 14:11 - pre 189 meseci
Nazalost tako nesto je nemoguce u C iz ovog razloga.
KAd predas s1 kao argument funkciji ti ne predajes adresu gde se cuva adresa stringa, vec predajes samo adresu stringa, tako da zamena argumenata koju si radio u prvobitnom kodu samo radi kao da od pocetka predato umest s1,s2 ->> s2, s1... zato moras adresu pointera da menjas, mislim da C++ ima nesto sto se zovu reference i mislim da bi preko njih to bilo moguce, ali nisam siguran jer davno (5godina) nisam radio u C++...
 
Odgovor na temu

zikaa
Zivorad Antonijevic
Beograd

Član broj: 10078
Poruke: 106
*.scnet.yu.

Sajt: zantonijevic.com


+1 Profil

icon Re: valjda sam glup (pocetnicki problem sa asemblerom). 27.01.2005. u 00:45 - pre 189 meseci
hvala jos jednom
 
Odgovor na temu

[es] :: Asembler :: pocetnicki problem sa asemblerom

[ Pregleda: 2856 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.