Conditiecode
De conditiecode is de inhoud van een bepaald register in de processor van een computer.
Wordt er een instructie uitgevoerd, bijvoorbeeld een optelling, dan krijgt automatisch de conditiecode een waarde. Meestal wordt de conditiecode genegeerd, maar het is mogelijk dat het programma een voorwaardelijke sprong uitvoert, afhankelijk van de toestand van de conditiecode.
Er zijn ook instructies, zoals de vergelijkingen, die geen enkel effect hebben, behalve het zetten van de conditiecode.
IBM 360
[bewerken | brontekst bewerken]Bij de architectuur van de IBM 360 is de conditiecode onderdeel van het Program Status Word, dat 64 bits omvat. De conditiecode zelf bestaat uit slechts twee bits. De conditiecode heeft dus vier mogelijkheden, te weten:
bits | na vergelijking | na berekening | na de instructie TM | sprongopdrachten | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
na vergelijking | na berekening | na TM | |||||||||||||
B | NOP | BH (high) |
BL (low) |
BE (equal) |
BP (plus) |
BM (minus) |
BZ (zero) |
BO (overflow) |
BO (ones) |
BM (mixed) |
BZ (zeroes) | ||||
00 | gelijk | nul | nullen | X | - | - | - | X | - | - | X | - | - | - | X |
10 | kleiner | negatief | gemengd | X | - | - | X | - | - | X | - | - | - | X | - |
01 | groter | positief | X | - | X | - | - | X | - | - | - | - | - | - | |
11 | overflow | enen | X | - | - | - | - | - | - | - | X | X | - | - |
Connecties met de assembleertaal
[bewerken | brontekst bewerken]Bij het ontwerp van de architectuur is rekening gehouden met de assembleertaal. Daardoor kan de sprongopdracht BM gebruikt worden na een berekening (Branch if Minus) maar ook na TM (Branch if Mixed). Het maakt voor de assembler niet uit of de M 'mixed' of 'minus' betekent. Hetzelfde geldt voor de sprongopdracht BO (Branch if Overflow of Branch if Ones).
Moderne microprocessoren: het FLAGS-register
[bewerken | brontekst bewerken]Bij moderne microprocessoren bestaat de conditiecode uit veel meer bits. Deze werken meer onafhankelijk van elkaar. De afzonderlijke bits worden ook wel flags genoemd en gezamenlijk heten ze dan ook wel FLAGS-register.
Intel 8080
[bewerken | brontekst bewerken]De conditiecode heet hier Flags-register en bestaat uit acht bits, die niet allemaal een betekenis hebben. Een van de bits is het interruptbit, waarmee wordt aangegeven of interrupts geaccepteerd moeten worden of niet. Dit bit is eigenlijk geen conditiecode.
De accumulator (register A) en het Flags-register worden samen PSW genoemd, van Program Status Word.
Intel x86-processors
[bewerken | brontekst bewerken]Het FLAGS-register is een register in de Intel x86 microprocessor dat de staat bevat waar de processor zich in bevindt. Dit register is 16 bits breed. De opvolgers, de EFLAGS and RFLAGS registers, zijn respectievelijk 32 en 64 bits breed. De bredere registers zijn compatibel met de smallere registers, doordat het lage gedeelte van deze bredere registers steeds overeenkomt met de smallere registers.
Intel x86 FLAGS Register | |||
---|---|---|---|
Bit # | Afkorting | Beschrijving | Categorie |
FLAGS | |||
0 | CF | Carry flag | Status flag |
1 | 1 | Gereserveerd | |
2 | PF | Parity flag | Status flag |
3 | 0 | Gereserveerd | |
4 | AF | Adjust flag | Status flag |
5 | 0 | Gereserveerd | |
6 | ZF | Zero flag | Status flag |
7 | SF | Sign flag | Status flag |
8 | TP | Trap flag (single step) | System flag |
9 | IF | Interrupt enable flag | System flag |
10 | DF | Direction flag | Control flag |
11 | OF | Overflow flag | Status flag |
12, 13 | IOPL | I/O privilege level (vanaf 286) | System flag |
14 | NT | Nested task flag (vanaf 286) | System flag |
15 | 0 | Gereserveerd | |
EFLAGS | |||
16 | RF | Resume flag (vanaf 386) | System flag |
17 | VM | Virtual-8086 mode flag (vanaf 386) | System flag |
18 | AC | Alignment check (vanaf 486SX) | System flag |
19 | VIF | Virtual interrupt flag (Pentium+) | System flag |
20 | VIP | Virtual interrupt pending (Pentium+) | System flag |
21 | ID | Identification (Pentium+) | System flag |
22 | 0 | Gereserveerd | |
23 | 0 | Gereserveerd | |
24 | 0 | Gereserveerd | |
25 | 0 | Gereserveerd | |
26 | 0 | Gereserveerd | |
27 | 0 | Gereserveerd | |
28 | 0 | Gereserveerd | |
29 | 0 | Gereserveerd | |
30 | 0 | Gereserveerd | |
31 | 0 | Reserved | |
RFLAGS | |||
32-63 | 0 | Gereserveerd |