Secondo Intel in x64 i seguenti registri sono chiamati registri di uso generale (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP e R8-R15) https://software.intel.com/en-us/articles/introduction-to-x64-assembly.Perché rpb e rsp vengono chiamati registri di scopo generale?
Nel seguente articolo, è scritto che RBP e RSP sono registri di scopo speciale (punto RBP alla base del frame dello stack corrente e punto RSP all'inizio del frame dello stack corrente). https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
Ora ho due affermazioni contraddittorie. La dichiarazione di Intel dovrebbe essere quella attendibile, ma che cosa è corretto e perché RBP e RSP hanno definito lo scopo generale?
Grazie per qualsiasi aiuto.
È possibile utilizzare entrambi come registri di uso generale, vale a dire che le normali istruzioni aritmetiche e logiche funzionano correttamente. 'rbp' è praticamente uno scopo generale, la cosa del puntatore del frame è solo convenzione. – Jester
Per ogni registro sono disponibili alcune caratteristiche (eccetto R8-R15), per alcune istruzioni. Per RSP, è speciale per 'push' /' pop'/'call' /' ret', quindi la maggior parte del codice non la usa mai per nient'altro. Ma in condizioni controllate (come nessun gestore di segnale) non * devi * usarlo per un puntatore allo stack. per esempio. puoi usarlo per leggere un array in un ciclo con 'pop', come [in questa risposta code-golf] (https://codegolf.stackexchange.com/questions/133618/extreme-fibonacci/135618#135618). (In realtà ho usato 'esp' nel codice a 32 bit, ma la stessa differenza). –
Immagino che se estendi la definizione di "particolarità" alla codifica, anche 'r13' è un po 'speciale, sebbene non sia realmente funzionale in quanto puoi ancora utilizzare efficacemente ogni modalità di indirizzamento (anche se l'assembly a volte inserisce uno spostamento zero nascosto per te). – BeeOnRope