Sto guardando un Javascript emulator di un NES per cercare di capire come funziona.Perché l'indirizzo operativo è incrementato di due?
In this line:
addr = this.load(opaddr+2);
Il codice operativo è incrementato di due. Tuttavia, il documentation (vedi Appendice E) Sto leggendo dice:
Zero pagina riguardante gli usi un singolo operando che funge da puntatore a un indirizzo a pagina zero ($ 0000- $ 00FF) in cui i dati essere gestito su può essere trovato. Usando l'indirizzamento della pagina zero, solo un byte è necessario per l'operando, quindi l'istruzione è più breve e, pertanto, più veloce da eseguire rispetto alle modalità di indirizzamento che accettano due operandi. Un esempio di istruzione a pagina zero è AND $ 12.
Quindi se l'argomento dell'operando è solo un byte, non dovrebbe apparire immediatamente dopo di esso ed essere + 1 invece di + 2? Perché +2?
Questo è come penso che funzioni, il che potrebbe essere errato. Supponiamo che la nostra memoria si presenta come:
-------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | <- index
-------------------------
| a | b | c | d | e | f | <- memory
-------------------------
^
\
PC
e il nostro PC è 0
, indicando a
. Per questo ciclo, diciamo che il codice operativo:
var pc= 0; //for example's sake
var opcode= memory[pc]; //a
Quindi non dovrebbe essere il primo operando slot successivo, vale a dire b
?
var first_operand = memory[pc + 1]; //b
Quanto è ampio l'opcode? –
@PlatinumAzure il PC è a 16 bit, penso che l'opcode sia 8 bit –
Penso che @PlatinumAzure sia sulla strada giusta. L'aggiunta è saltare l'opcode per ottenere l'operando a byte singolo. –