Złączanie dwóch stringów w jeden w Assemblerze

0

Witam.

Przczesałem cały internet w poszukiwaniu tego rozwiązania i jedyn co się dowiedziałem że jest to sprawa nie łatwa bo trzeba zarezerwować odpowiednią wielkość w pamięci. Otóż chciałem połączyć dwa stringi np "Ala " i " ma kota " w jeden czyli "Ala ma kota ". Działanie podobne operatora += w językach wysokiego poziomu.

Jeżeli komuś to potrzebne to używam masma ale jak ktoś napisze w innych assemblerach to nie będzie problemu. W miarę rozumiem assembler więc sobie jakoś rozszyfruje sens kodu.

Życzę miłego dnia.

5

jest to sprawa nie łatwa bo trzeba zarezerwować odpowiednią wielkość w pamięci

I tak właśnie jest. Niemniej nie napisałeś co to dla ciebie w ogóle znaczy połączyć dwa stringi. Gdzie te połączone stringi mają się znaleźć? Do tej swojej funkcji chcesz przekazać bufor, czy może funkcja na dynamicznie alokować pamięć na stercie i tam te stringi wrzucić?

0

Oczywiśćie chcę alokować dynamicznie pamięć na stercie bo potem chcę odpowiednie dane sklejać. I mam takie pytanie bo specem z assemblera nie jestem. Czy add będzie okej żeby złączyć te dwa stringi czyli tekst1=tekst1+tekst2 wrzucone na tą stertę czy za pomocą esp mam się odnośić do dobrej pozycji na stosie ?

2

Żartujesz z tym add? Przecież ono dodaje wartości 2 rejestrów i tyle. A ty chcesz:

  • przelecieć pętla przez te stringi szukając null żeby policzyć długość (jak strlen)
  • użyć brk żeby alokować pamięć na znaki+null
  • skopiować pierwszy string do tej pamięci jakimś movsb
  • skopiować drugi string do tej pamięci za tym pierwszym w taki sam sposób ale tym razem dodając null na koniec

I oczywiście kopiując musisz ustawić odpowiednio wskaźnik na lokalizację źródłowych danych.

Czyli mniej więcej coś jakbyś w C zrobił strlen+malloc+strcat. Możesz też mieć w tym asemblerze call strlen, call malloc, call strcat, call strcat ale musisz wtedy przeczytać o calling convention i poprawnie ustawić parametry wywołania tych funkcji (o ile w ogóle wolno ci używać zewnętrznych bibliotek ;P)
Zapomnij o przyzwyczajeniach z języków innych niż C bo intuicja będzie cię mocno zawodzić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1