Consente di tornare a un giorno precedente, quando le cose erano semplici.
Consente di tornare ai giorni del MOS 6502 che alimentava Atari, Apple II e molti altri sistemi da alla fine degli anni '70. È ancora possibile trovarlo nei sistemi embedded e apparentemente è ancora prodotto in volumi di centinaia di milioni (mentre questa è vecchia tecnologia, non è obsoleto). Comprendendo come funzionava questo sistema, diventa più facile capire come funzionano i sistemi più moderni e complessi.
Il 6502 aveva solo pochi registri:
- Contatore programmi
- Puntatore dello stack
- Accumulatore (questo è l''importante')
- X e Y 'indice' registri
- Stato del processore (questa è l'altra "importante" in questa situazione)
-
C
Carry flag
-
Z
Zero flag (imposta se l'ultima operazione ha avuto un risultato di 0
)
-
D
Modalità decimale
-
I
Abilita / disabilita interput
-
B
Break
-
V
Overflow
-
S
Segno (l'insieme del risultato di un'operazione è negativo - a volte è indicato come N
come negativo)
Quando hai fatto un CMP #$44
questo confrontava l'Accumulatore con il valore 0x44. In tal modo, imposterà le flag ZCS
in modo appropriato. C
è impostato se l'Accumulatore è maggiore o uguale al valore e Z
è impostato se i due sono uguali. Questo non era molto più che fare A - M
dove M è il valore (letto dalla memoria, o un valore strong), imposta i flag e butta via il risultato (confronta con SBC
che memorizzerebbe il risultato nell'accumulatore) .
A questo punto, hai impostato il registro di stato, ma devi fare qualcosa con esso. C'erano due istruzioni per questo. BEQ
(diramazione se EQual) e BNE
(diramazione se non uguale). Queste due istruzioni testerebbero ogni Z
del registro di stato - BNE
si diramerebbe se Z
era 0, BEQ
si diramerebbe se Z
era 1. Mentre CMP
fa imposta più flag, BEQ
e BNE
non ti interessano, solo Z
.
E davvero, questo è il modo in cui i condizionali funzionano quando sei giù a quel livello. C'è un registro di stato che gira da qualche parte molte volte. Questo registro non esiste quando entrate nei processori pipeline, superscalari e speculativi. Questi tendono ad avere istruzioni di diramazione più esplicite o usano registri arbitrari per il risultato dello stato piuttosto che un registro dedicato (vedi il set di istruzioni MIPS e guarda bgt
, blt
, beqz
e simili).
Per inciso, se stai curiosando su macchine virtuali e assemblaggi, approfondisci un po ' Core War e la macchina virtuale MARS.