Pytanie o dwie instrukcje assemblerowe x86-64

0

Hej główkuję na poniższych dwóch instrukcjach x86-64, co mogą one oznaczać w c++ i jak je najprościej zreprodukować w c++ ? Głównie mi chodzi o sub,
$rsp to rejestr stack pointer, tylko odjęcie od niego 8 to już nie wiem na co może wskazywać, wyjście z funkcji czy coś w tym stylu ?

mov    %rdi,%rbx
sub    $0x8,%rsp

Z góry dzięki za wskazówki

2

Nie da się sensownie samych tych 2 instrukcji reprodukować w C bo nie mają większego sensu tam. Szczególnie ta pierwsza sama w sobie nie ma. Ta druga to alokacja stosu, zwykle raczej na początku funkcji a nie na jej końcu. "Alokuje" 8 bajtów na stosie poprzez przesunięcie wskaźnika szczytu stosu o 8 bajtów w dół. Kompilator C wygenerowałby coś podobnego na przykład gdybyś miał funkcje z jakimiś 2 intami jako zmienne lokalne, albo jakimś char buffer[8]

0

Na forum jest dozwolona tylko intela składnia, reszta jest nieczytelna.

Shalom cię wprowadził w błąd, mov %rbi, %rbx przepisuje zawartość rejestru rbi do rbx.
A sub 0x8, rsp odejmuje od rejestru 8 bajtów r oznacza 64 bitowy system, czyli prawdopodobnie alokuje miejsce na stosie, bo stos rośnie w dół czyli odejmujesz.
Ale pod rsp może być cokolwiek, ale to zależy od tego co działo się przed tym, ale standardowo rsp jest od stosu.

1

Shalom cię wprowadził w błąd, mov %rbi, %rbx przepisuje zawartość rejestru rbi do rbx.

No i co niby taka instrukcja ma znaczyć na poziomie kodu w C? o_O Nie oznacza absolutnie nic. Ot jakieś żonglowanie parametrami, może np. gdzieśtam potrzebny jest na chwile rejestr rdi i kompilator wygenerował kod który przepisuje dane z niego do rbx a potem gdzieś przepisuje je w drugą stronę. Nie da sie czegoś takiego zreprodukować na poziomie C.

Ale pod rsp może być cokolwiek

Bardzo niewielka szansa, chyba ze ktoś tego asma klepie z palca i dla beki coś innego tam przechowuje.

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