Conditiecode

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

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]

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 slchts 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]

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]

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]

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]

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 overeen komt 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  

Zie ook[bewerken]