我正在查看NES的Javascript emulator,試圖瞭解它是如何工作的。爲什麼操作地址增加2?
addr = this.load(opaddr+2);
操作碼是由兩個遞增。然而,documentation(見附錄E)我讀說:
零頁尋址使用一個單一的操作數在零頁($ 0000- $ 00FF),其中的數據作爲指針 一個地址被操作 就可以找到。通過使用零頁尋址,操作數只需要一個字節 ,因此與使用兩個操作數的尋址模式相比,指令更短,因此執行速度更快。 零頁指令的一個例子是AND $ 12。
因此,如果操作數的參數只有一個字節,它不應該直接出現在它之後,而是+1而不是+2?爲什麼是+2?
這是我認爲它的工作原理,這可能是不正確的。假設我們的記憶中的樣子:
-------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | <- index
-------------------------
| a | b | c | d | e | f | <- memory
-------------------------
^
\
PC
,我們的PC是0
,指向a
。對於這個週期,我們說的操作碼:
var pc= 0; //for example's sake
var opcode= memory[pc]; //a
所以不應該第一個操作數是一個時隙,即b
?
var first_operand = memory[pc + 1]; //b
操作碼有多寬? –
@PlatinumAzure個人電腦是16位,我認爲操作碼是8位 –
我認爲@PlatinumAzure是在正確的軌道上。另外是跳過操作碼以獲得單字節操作數。 –