Assembly:Intel Registre
Fra CodeWiki
Da ingeniørene hos Intel utviklet den originale 8086 prosessoren hadde hvert register en klar oppgave. Mens de designet instruksjonssettet ble det jobbet mye med optimalisering og spesielle instruksjoner basert på funksjonen de forventet at hvert register skulle utføre. I følge Intel vil bruken av registre gjøre at koden kan ta fult utbytte av disse optimaliseringene. Desverre virker det som om dette er en tapt kunst. Få programmerere er klar over Intel's design og de fleste kompilatorerer er for enkle eller fokuserte på eksekveringshastighet til å bruke registerne skikkelig. Å forstå hvordan registerne og instruksjonsettene passer sammen er et viktig moment.
Å bruke registerne konsekvent har mange fordeler. På lik linje med å bruke gode variabelnavn, vil bruken av registre gjøre kode mer lesbar. Når de brukes skikkelig vil registerne ha en betydning som er nesten like klar og innlysende som løkke-telleren,i i høynivå programmering. Alle x86-prosessorer har 8 generelle registre. Registerne er 32 bit brede, dog det finnes også 16-bits versjoner. Hvert registernavn er egentlig en forkortelse.
- EAX - Accumulator Register
- EBX - Base Register
- ECX - Counter Register
- EDX - Data Register
- ESI - Source Index
- EDI - Destination Index
- EBP - Base Pointer
- ESP - Stack Pointer
I tillegg til disse har x86-prosessorene også 8-bytes registre, men disse er stort sett underlagt de overnevnte og ikke spesielt sentrale.
Innhold |
EAX
Alle store kalkulasjoner finner sted i EAX, noe som får det til å minne om et dedikert akkumulatorregister. EAX-registeret håndterer også IO-instruksjoner.
EDX
Dataregistret er en utvidelse av akkumulatoren. Det er nyttig for å lagre data relatert til EAX-registrets kalkulasjoner. EDX-registeret holder på adresser til dataverdier som skal brukes i en eller annen operasjon.
ECX
Fungerer på samme måte som "i"-variablene i høynivåsprogrammering og fungerer som et telleregister. ECX er en slags universal løkketeller. Alle tellerelaterte instruksjoner i x86 systemer benytter seg av ECX. Dette inkluderer instruksjoner som for eksempel LOOP, LOOPZ og LOOPNZ.
EDI
Alle løkker må lagre resultatet sitt et sted, og destinasjonsindeksen (EDI-registret) peker til dette stedet. Med en 1-bytes STOS-instrksjon til å skrive data ut av akkumulatoren gjør EDI-registeret dataoperasjoner mye mer størrelseseffektivt.
ESI
Extended Source Index Registeret. Dette registeret peker inn i Dataområdet. Denne peker ut lagerplasser der vi vil plassere data, Globale Variabler. I løkker som prosesserer data vil ESI-registeret holde på plasseringen av inputdatastrømmen.
ESP
ESP er den berømte stack pointeren. De viktige PUSH, POP, CALL og RET-instruksjonene krever ESP-registrets verdi og det er derfor ingen grunn til å bruke ESP til noe annet. ESP sammnen med EBP peker inn i Stacken til de lokale variablene.
EBP
I funksjoner som lagrer parametere eller variabler i stacken, vil Base pointeren (EBP-registeret) holde på plasseringen av den stack-rammen som det i øyeblikket handler om. I andre situasjoner fungerer EBP som et fritt datalagringsregister. EBP peker som sagt inn i stacken til de lokale variablene sammen med ESP-registeret.
EBX
I 16-bits modus er EBX-registeret nyttig som en pointer. Ellers brukes den kun til ekstra lagringsplass.
