Według Intel w x64 następujące rejestry nazywane są rejestrami ogólnego przeznaczenia (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP i R8-R15) https://software.intel.com/en-us/articles/introduction-to-x64-assembly.Dlaczego rpb i rsp są nazywane rejestrami ogólnego przeznaczenia?
W poniższym artykule napisano, że RBP i RSP są rejestrami specjalnego przeznaczenia (RBP wskazuje na podstawę bieżącej ramki stosu, a punkt RSP na górę bieżącej ramki stosu). https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
Teraz mam dwa sprzeczne stwierdzenia. Oświadczenie firmy Intel powinno być zaufane, ale co jest poprawne i dlaczego RBP i RSP na ogół nazywają ogólny cel?
Dzięki za pomoc.
Możesz używać obu jako rejestrów ogólnego przeznaczenia, co oznacza, że zwykłe instrukcje arytmetyczne i logiczne działają z nimi dobrze. 'rbp' jest dość powszechnym celem, wskaźnik ramki jest po prostu konwencją. – Jester
Każdy rejestr ma jakąś specjalność (z wyjątkiem R8-R15), dla niektórych instrukcji. Dla RSP jest to specjalne dla 'push' /' pop'/'call' /' ret', więc większość kodu nigdy go nie używa do niczego innego. Ale w kontrolowanym warunkowym (jak brak obsługi sygnału) nie * masz *, aby użyć go do wskaźnika stosu. na przykład możesz go użyć do odczytu tablicy w pętli z 'pop', np. [w tej odpowiedzi na kod-golfa] (https://codegolf.stackexchange.com/questions/133618/extreme-fibonacci/135618#135618). (Właściwie użyłem 'esp' w kodzie 32-bitowym, ale tę samą różnicę). –
Zgaduję, że jeśli rozszerzysz definicję "specjalności" na kodowanie, nawet 'r13' jest trochę wyjątkowe, chociaż nie jest tak naprawdę funkcjonalne, że nadal możesz efektywnie używać każdego trybu adresowania (nawet jeśli zespół czasami wkłada ukryte zerowe przemieszczenie dla ciebie). – BeeOnRope