x86-rekisterit selkeästi
Ymmärtäkää yleiskäyttöisten, segmentti-, käskyosoitin- ja lippurekisterien tarkoitus ja toiminta x86-arkkitehtuurissa.
x86-rekisterit selkeästi on ilmainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.
Tutustutaan x86-rekistereihin
Tervetuloa x86-arkkitehtuurin ytimeen! Tänään selvitämme, mitä rekisterit ovat: suorittimen sisäisiä pieniä ja erittäin nopeita tallennuspaikkoja.
- Rekisterit sisältävät tietoja, joita suoritin tarvitsee nopeasti.
- Ne ovat paljon nopeampia kuin keskusmuisti (RAM).
- Niitä voi ajatella suorittimen työmuistina välittömiä laskutoimituksia ja operaatioita varten.
Yleiskäyttöiset rekisterit (GPR)
x86-arkkitehtuuri tarjoaa useita yleiskäyttöisiä rekistereitä (GPR). Ne ovat monipuolisia ja sopivat moniin tehtäviin, kuten väliaikaisten tietojen tai osoitteiden tallentamiseen.
Keskeisiä GPR-rekistereitä ovat:
AX(Accumulator)BX(Base)CX(Count)DX(Data)SI(Source Index)DI(Destination Index)BP(Base Pointer)SP(Stack Pointer)
AX, akkumulaattori
AX-rekisteriä (Accumulator) käytetään usein laskutoimituksiin sekä syöttö- ja tulostustoimintoihin. Se on 16-bittinen rekisteri, mutta sen 8-bittisiä puoliskoja voi käyttää myös erikseen: AH (ylempi tavu) ja AL (alempi tavu).
Seuraavassa on esimerkki arvon sijoittamisesta rekisteriin AX:
MOV AX, 1234h ; Move hexadecimal 1234 into AX
MOV AL, 0FFh ; Move FF into AL (lower 8 bits of AX)BX, perusrekisteri
BX-rekisteriä (Base) käytetään usein perusosoittimena muistiin käsiksi pääsemiseen. Se voi siis sisältää muistialueen aloitusosoitteen.
Se on hyödyllinen tietorakenteiden tai muistissa olevien taulukoiden käsittelyssä.
MOV BX, OFFSET myArray ; Load the starting address of myArray into BX
MOV AL, [BX] ; Load the byte at address BX into ALCX, laskuri
CX-rekisteriä (Count) käytetään ensisijaisesti silmukoiden laskurina. Monet x86-assemblyn silmukkakäskyt käyttävät CX-rekisteriä implisiittisesti iteraatioiden seuraamiseen.
Kun LOOP-käskyä käytetään, CX-rekisterin arvo pienenee automaattisesti, kunnes se saavuttaa nollan.
MOV CX, 10 ; Set loop count to 10
loop_start:
; Do something
LOOP loop_start ; Decrement CX, jump if not zeroDX, datarekisteri
DX-rekisterillä (Data) on muutamia erityisiä käyttötarkoituksia. Se toimii usein yhdessä AX-rekisterin kanssa suurissa laskutoimituksissa, kuten 32-bittisessä kertolaskussa tai jakolaskussa.
Sitä käytetään yleisesti myös I/O-porttien käsittelyssä.
MOV AX, 1000h ; Value 1
MOV DX, 0 ; Clear DX for multiplication
MOV BX, 10h ; Value 2
MUL BX ; AX * BX. Result (DX:AX) = 10000hIndeksi- ja osoitinrekisterit
AX-, BX-, CX- ja DX-rekisterien lisäksi käytettävissä on erityisiin tarkoituksiin varattuja GPR-rekistereitä:
- SI (Source Index): toimii merkkijono-operaatioissa lähdetietojen osoittimena.
- DI (Destination Index): toimii merkkijono-operaatioissa kohdetietojen osoittimena.
- BP (Base Pointer): osoittaa nykyisen pinokehysalueen alkuun, joten sitä voidaan käyttää funktion argumenttien ja paikallisten muuttujien käsittelyyn.
- SP (Stack Pointer): osoittaa aina pinon huipulle. Se on keskeinen funktiokutsujen ja paikallisten tietojen hallinnassa.
Käskyosoitin (IP)
Käskyosoitin (IP), josta käytetään 32- ja 64-bittisissä tiloissa myös nimityksiä EIP (Extended Instruction Pointer) ja RIP (Relative Instruction Pointer), on hyvin erityinen rekisteri.
- Se sisältää aina seuraavaksi suoritettavan käskyn muistiosoitteen.
IP-rekisteriä ei voi muuttaa suoraan. Sen arvo muuttuu esimerkiksiJMP- (hyppykäsky) taiCALL-käskyllä (proseduurikutsu).- Se määrää ohjelman suorituksen kulun!
Lippurekisteri
Lippurekisteri (FLAGS, EFLAGS tai RFLAGS) on kokoelma yksibittisiä lippuja, jotka kuvaavat suorittimen tilaa operaation jälkeen tai ohjaavat sen toimintaa.
Keskeisiä lippuja ovat:
- ZF (Zero Flag): asetetaan, jos operaation tulos on nolla.
- CF (Carry Flag): asetetaan, jos laskutoimitus tuotti yliviennin tai lainauksen.
- SF (Sign Flag): asetetaan, jos tulos on negatiivinen.
- OF (Overflow Flag): asetetaan, jos laskutoimitus aiheutti ylivuodon.
Nämä liput ovat keskeisiä ehdollisissa hypyissä!
Testaa rekisteritietosi
Mitä x86-rekisteriä käytetään ensisijaisesti silmukoiden laskurina?
Kertaus: rekisterit
Hienoa työtä! Opitte tuntemaan x86:n keskeiset rekisterit:
- GPR-rekisterit (AX, BX, CX, DX) yleiseen tietojen käsittelyyn.
- Indeksi- ja osoitinrekisterit (SI, DI, BP, SP) muistin ja pinon hallintaan.
- Ohjelman suorituksen kulun kannalta välttämätön käskyosoitin (IP).
- Lippurekisteri suorittimen tilan ja ehdollisen suorituksen hallintaan.
Näiden rekisterien ymmärtäminen on tärkeää tehokkaan assembly-koodin kirjoittamisessa. Seuraavaksi tutustumme siihen, miten nämä rekisterit toimivat vuorovaikutuksessa muistin kanssa!
Opi Assembly tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”x86-rekisterit selkeästi” ilmainen?
Kyllä – oppitunnin ”x86-rekisterit selkeästi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssin, päivitä CoddyKit PROhon. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”x86-rekisterit selkeästi”?
Ymmärtäkää yleiskäyttöisten, segmentti-, käskyosoitin- ja lippurekisterien tarkoitus ja toiminta x86-arkkitehtuurissa. Harjoittelet Assembly-kieli ja x86-tason järjestelmäohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Assembly-kieli ja x86-tason järjestelmäohjelmointi-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”x86-rekisterit selkeästi”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunnilla?
Kyllä. Jokainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- x86-rekisterit selkeästi
- Muistin osoitustavat
- Datan esitysmuodot ja tyypit
- FLAGS-rekisteri ja tilabitit