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.