Pitanje:
Optimizacije AMD64 kompajlera s manipulacijama registra
Modoc
2013-03-21 06:44:32 UTC
view on stackexchange narkive permalink

Registrima AMD64 (zvani x86-64 ili x64) može se pristupiti 8, 16, 32 ili 64 bita odjednom. Kad čitate popis za rastavljanje, koje operacije registra nisu jednostavne?

Na primjer, kada uputa pristupa dijelu registra, kako to utječe na druge dijelove?

Koje tipične upute ili sekvence uputa koje koriste optimizatori mogu kodirati nešto što nije očito (npr. xoriranje registra samim sobom radi postavljanja na nulu)?

Ovo je pitanje preširoko. Vodiće do popisa anegdota, a ne do cjelovitih odgovora. Trebao bi biti daleko fokusiraniji, u najmanju ruku ograničen na određenu temu, a po mogućnosti na određeni kompajler ili platformu (npr. Manipulacije stogom u Visual C ++). Budući da je već postojao [jedan odgovor] (http://reverseengineering.stackexchange.com/a/111), predložio sam uređivanje koje se fokusira na temu tog odgovora: registriranje manipulacija.
Hvala na uređivanju @Gilles. Znao sam da je pitanje preširoko kad sam ga postavio, ali nisam ga mogao preformulirati na način koji je i dalje komunicirao ono što želim.
Nadam se da se pitanje i dalje približava onome što vas zanima. Potičem vas da postavite zasebno pitanje o manipulacijama stogom s VC ++-om, uredio bih ovo pitanje da bih se usredotočio na to, ali mislio sam da bi mi bilo korisnije prilagoditi se postojećem odgovoru.
Jedan odgovor:
#1
+10
Igor Skochinsky
2013-03-21 08:15:42 UTC
view on stackexchange narkive permalink

Nije zapravo optimizacija, ali jedna od poteškoća koje morate biti svjesni kada dolazite iz x86 je sljedeća:

Svaka operacija na 32-bitnom registru poništava gornju polovicu 64-bitne

Na primjer, sljedeće:

  mov eax, 3  

Je zapravo ekvivalent:

  mov rax, 3  

To se odnosi i na nove registre r8 - r15 , npr .:

  inc r8d  

također poništava gornju polovicu r8.

Međutim , 8-bitni i 16-bitni dijelovi registara ne rade tako, tj. operacije na njima modificiraju samo taj dio registra.



Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
Loading...