Lippurekisteri tai prosessorin tilasana (CSP) on erikoisrekisteri , joka kuvastaa prosessorin nykyistä tilaa.
Intel 8086 -mikroprosessoreissa sitä kutsutaan FLAGSiksi ja se on 16-bittinen . Laajennetut rekisterit EFLAGS ja RFLAGS, jotka otettiin käyttöön IA-32 ( 80386 -prosessorit ) ja x86-64 -arkkitehtuureissa , ovat 32-bittisiä ja 64-bittisiä. Laajennetut rekisterit ovat taaksepäin yhteensopivia.
Lippurekisteri sisältää ryhmän tilalippuja, ohjauslipun ja ryhmän järjestelmälippuja [1] :
Intel x86 lippurekisteri | |||||
---|---|---|---|---|---|
Vähän, ei. | Nimitys | Nimi | Kuvaus | lipun tyyppi | Kun esiteltiin |
LIPUT | |||||
0 | CF | Kanna lippua | Kanna lippua | Osavaltio | |
yksi | yksi | Varattu | |||
2 | PF | Pariteetin lippu | Pariteetin lippu | Osavaltio | |
3 | 0 | Varattu | |||
neljä | AF | Ylimääräinen kantolippu | Ylimääräinen kantolippu | Osavaltio | |
5 | 0 | Varattu | |||
6 | ZF | Nolla lippu | Nolla lippu | Osavaltio | |
7 | SF | Merkki lippu | merkki lippu | Osavaltio | |
kahdeksan | TF | Trap lippu | Jäljityslippu (askelee) | Järjestelmällinen | |
9 | JOS | Keskeytä käyttöön -lippu | Keskeytysaktivointimerkki | Järjestelmällinen | |
kymmenen | D.F. | Suunta Lippu | Suunta lippu | Manager | |
yksitoista | OF | Ylivuoto lippu | ylivuoto lippu | Osavaltio | |
12 | IOPL | I/O-oikeustaso | I/O-prioriteettitaso | Järjestelmällinen | 80286 |
13 | |||||
neljätoista | NT | Sisäkkäinen tehtävä | Tehtävän sisäkkäinen lippu | Järjestelmällinen | 80286 |
viisitoista | 0 | Varattu | |||
LIPUT | |||||
16 | RF | Jatka lippu | Jatka lippu | Järjestelmällinen | 80386 |
17 | VM | Virtuaalinen-8086-tila | 8086 virtuaalinen prosessoritila | Järjestelmällinen | 80386 |
kahdeksantoista | AC | Kohdistustarkastus | Kohdistuksen tarkistus | Järjestelmällinen | 80486SX _ |
19 | VIF | Virtuaalinen keskeytyslippu | Virtuaalisen keskeytyksen sallimislippu | Järjestelmällinen | Pentium |
kaksikymmentä | VIP | Virtuaalinen keskeytys odottaa | Odottaa virtuaalista keskeytystä | Järjestelmällinen | Pentium |
21 | ID | ID-lippu | Tarkistaa ohjeiden saatavuudenCPUID | Järjestelmällinen | Myöhäinen 80486 [2] |
22 | 0 | varattu | |||
… | |||||
31 | |||||
RFLAGS | |||||
32 | 0 | varattu | |||
… | |||||
63 |
Joidenkin lippurekisterin lippujen arvoa voidaan muuttaa suoraan erityisohjeiden avulla (esim. CLDsuuntalipun nollaus), mutta ei ole ohjeita, joiden avulla lippurekisteriin pääsee (tarkistaa tai muuttaa) tavallisena rekisterinä. . On kuitenkin mahdollista tallentaa lippurekisteri pinoon tai (E)AX -rekisteriin ja palauttaa lippurekisteri niistä komennoilla LAHF, SAHF, PUSHF, PUSHFD, POPFja POPFD.
Kun tehtävä on keskeytetty (käyttämällä prosessorin moniajo-ominaisuuksia), prosessori tallentaa automaattisesti rekisterilipun arvon TSS:ään (task state segment), kun uusi tehtävä aktivoituu, prosessori lataa lippurekisterin TSS:stä. uudesta tehtävästä.
Kun keskeytyskäsittelijä tai poikkeuskäsittelijä on aktivoitu , prosessori tallentaa automaattisesti lippurekisterin arvon nykyiseen pinoon.
Tilaliput (bitit 0, 2, 4, 6, 7 ja 11) kuvastavat aritmeettisten käskyjen, kuten ADD, SUB, MUL, , suorittamisen tulosta DIV.
Listatuista lipuista vain CF-lippu voidaan muuttaa suoraan STC, CLCja -komennoilla CMC. Myös bittiohjeet ( BT, BTS, BTRja BTC) kopioivat määritetyn bitin CF-lippuun.
Tilaliput sallivat saman aritmeettisen käskyn tuottaa kolmen eri tyypin tuloksen: etumerkitön, etumerkillinen ja binäärikoodattu desimaalikokonaisluku (BCD). Jos tulosta pidetään etumerkittömänä lukuna, CF-lippu näyttää ylivuotoehdon (carry tai borrow), etumerkitylle tulokselle ( kahden komplementissa ) carry tai borrow näyttää OF-lippua ja BCD-tuloksesta carry/ lainaa näyttää AF-lippua. SF-lippu heijastaa etumerkillisen tuloksen etumerkkiä, ZF-lippu heijastaa sekä etumerkitöntä että etumerkillistä nollatulosta.
Pitkän kokonaisluvun aritmetiikassa CF-lippua käytetään lisäys- ja lainaus- ( ADC)- ja vähennys- ja laina- SBBkäskyjen ( ) kanssa siirtämään siirto- tai lainaus pitkän luvun lasketusta bitistä toiseen.
Ehdolliset hyppyohjeet (hyppy cc -ehtoon - esim . hypätä, jos tulos ei ole nolla), (asettaa tulostavun arvon cc -ehdon mukaan ), (silmukka) ja (ehdollinen kopio) käyttävät yhtä tai useampaa tilalippua termien tarkistamiseen. Esimerkiksi hyppykäsky (hyppää, jos pienempi tai yhtä suuri - hyppää, jos "pienempi tai yhtä suuri", ≤) tarkistaa ehdon "ZF=1 tai SF ≠ OF". JccJNZSETccLOOPccCMOVccJLE
PF-lippu otettiin käyttöön yhteensopivuuden vuoksi muiden mikroprosessoriarkkitehtuurien kanssa, ja sitä käytetään harvoin aiottuun tarkoitukseen. On yleisempää käyttää sitä yhdessä muiden tilalippujen kanssa liukulukuaritmetiikassa [3] : matemaattisen apuprosessorin vertailukäskyt ( FCOMjne FCOMP.) asettavat siihen ehtoliput C0, C1, C2 ja C3 ja nämä liput. voidaan kopioida lippurekisteriin. Tätä varten on suositeltavaa käyttää käskyä tallentaa apuprosessorin tilasana AX -rekisteriin ja käskyä kopioida AH -rekisterin sisältö myöhemmin lippurekisterin 8 alempaan bittiin [4] , kun taas C0 menee CF-lippu, C2 PF:ksi ja C3 ZF:ksi. C2-lippu asetetaan esimerkiksi vertaamattomien argumenttien (NaN tai ei-tuettu muoto) tapauksessa FUCOM-vertailukäskyssä. FSTSW AXSAHF
Suuntalippu (DF, lippurekisterin bitti 10) ohjaa merkkijonokäskyjä ( MOVS, CMPS, SCAS, LODSja STOS): lipun asettaminen saa osoitteet pienenemään (prosessoi rivit korkeista osoitteista alhaisiin), nollaus saa osoitteita kasvamaan. STDJa ohjeet CLDasettavat ja nollaavat DF-lipun.
Järjestelmäliput ja IOPL-kenttä ohjaavat käyttöympäristöä, eikä niitä ole tarkoitettu käytettäväksi sovellusohjelmissa.
Myöhemmissä 80486-prosessorin versioissa ilmestyi CPUID -käsky , jonka avulla voit tunnistaa prosessorin, jossa ohjelma on käynnissä. Aiemmissa prosessoreissa tunnistamista varten on tarpeen analysoida käskyjen käyttäytymistä, mukaan lukien lippurekisteri.
Esimerkiksi prosessoreissa 8086 ja 80186 lippurekisterin bitit 12-15 asetetaan aina, 80286 :ssa ja uudemmissa prosessoreissa bitit 12-14 sisältävät IOPL-kentän ja NT-lipun, ja ne tyhjennetään aina reaalitilassa . Tämä tekee mahdolliseksi erottaa 808x/8018x, 80286 ja 80386 (ja uudemmat) prosessorit 16-bittisessä koodissa:
MASM - kokoonpanokielikoodi , joka erottaa 8086 - 80386 prosessorit pushf ; (Pidä alkuperäinen lippurekisterin tila) pushf ; Kopioi lippukotelo... pop ax ; ...rekisteröimään AX xor ah , 11110000 b ; Muuta korkean 4 bitin push ax :n arvoa ; Kopioi rekisteri AX popf ; ... lippurekisteriin pushf ; Kopioi lippukotelo... pop bx ; ...rekisteröimään BX popf ; (Nollaa lippurekisteri) xor ah , bh ; AH=0 (lippurekisterin bittejä ei muutettu) → 808x-80286, muuten 80386+ ja bh , 11110000 b ; BH=F0h (kaikki 4 bittiä asetettu) → 808x/8018x, 0 → 80286Myös 80486 :ssa käyttöön otettu AC-lippu (bitti 18) tyhjennetään aina 80386:ssa, mikä mahdollistaa näiden prosessorien erottamisen:
MASM - kokoonpanokielikoodi, jolla erotetaan 80386- ja 80486-prosessorit ja sp , ei 3 ; Kohdista pino niin, ettei siihen kohdistu kohdistusvirheitä pushfd ; (Pidä lippurekisterin alkutila) pushfd ; Kopioi lippukotelo... pop eax ; ...rekisteröidä EAX xor eax , 40000 h ; Muuta bitin 18 arvoa (AC lippu) push eax ; Kopioi rekisteri EAX popfd ; ... lippurekisteriin pushfd ; Kopioi rekisterin liput... pop ecx ; ...ECX-rekisteriin popfd ; (Nollaa lippurekisteri) xor eax , ecx ; EAX=0 (bittiä lippurekisterissä ei muutettu) → 80386Samoin vanhemmissa 80486-malleissa, joissa käskyä CPUIDei ole vielä annettu, ID-lippu (bitti 21) tyhjennetään aina, mikä mahdollistaa 80386-prosessorien ja vanhempien 80486-mallien tunnistamisen:
MASM - kokoonpanokielikoodi vanhan 80486:n määrittelemiseksi pushfd ; (Pidä lippurekisterin alkutila) pushfd ; Kopioi lippukotelo... pop eax ; ...eax- rekisteriin mov ecx , eax ; ...ja rekisteriin ECX tai eax , 200000 h ; Aseta bitti 21 (ID-lippu) push eax ; Kopioi rekisteri EAX popfd ; ... lippurekisteriin pushfd ; Kopioi lippukotelo... pop eax ; ...EAX-rekisteriin popfd ; (Nollaa lippurekisteri) xor eax , ecx ; EAX=0 (bittiä lippurekisterissä ei asetettu) → 80386/vanha 80486prosessoritekniikat | Digitaaliset|||||||||
---|---|---|---|---|---|---|---|---|---|
Arkkitehtuuri | |||||||||
Ohjesarjan arkkitehtuuri | |||||||||
koneen sana |
| ||||||||
Rinnakkaisuus |
| ||||||||
Toteutukset | |||||||||
Komponentit | |||||||||
Virranhallinta |