Lippurekisteri

Lippurekisteri tai  prosessorin tilasana (CSP) on erikoisrekisteri , joka kuvastaa prosessorin nykyistä tilaa.

x86-arkkitehtuuri

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.

Aktiiviset tilan liput

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

Ohjauslippu

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ä

Järjestelmäliput ja IOPL-kenttä ohjaavat käyttöympäristöä, eikä niitä ole tarkoitettu käytettäväksi sovellusohjelmissa.

Prosessorin tunniste

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 → 80286

Myö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) → 80386

Samoin 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 80486

Katso myös

Muistiinpanot

  1. 3.4.3. EFLAGS-rekisteri // IA-32 Intel Architecture Software Developer's Manual. - Intel , 2004. - T. 1: Perusarkkitehtuuri . Tilausnumero: 253665-013
  2. 1 2 Ohje CPUIDlisättiin 80486-prosessorin ja Pentium-prosessorin myöhempiin versioihin. Katso: CPUID - CPU Identification // IA-32 Intel Architecture Software Developer's Manual. - Intel , 2004. - V. 2A: Instruction Set Reference, AM . Tilausnumero: 253666-013
  3. 8.1.3. Haaroittuminen ja ehdolliset siirrot ehtokoodeihin // IA-32 Intel Architecture Software Developer's Manual. - Intel , 2004. - Osa 1: Perusarkkitehtuuri. Tilausnumero: 253665-013
  4. P6 - arkkitehtuurissa otettiin käyttöön ohjeita jne ., jotka vertailun tuloksena asettivat liput suoraan lippurekisteriin. Aikaisemmin tämä ei ollut mahdollista, koska apuprosessori toteutettiin erillisellä sirulla, ja vasta 80486DX:stä alkaen apuprosessoria alettiin rakentaa prosessoriin.FCOMIFCOMIP