我正在製作一個6502仿真器(之後我會模仿其他NES組件來創建一個功能齊全的NES仿真器),並且我遇到了分支條件指令(相對)。現在,我想知道的是,被認爲保存爲二進制補碼的字節還是常規的負字節?這就是我的意思是:帶符號字節的6502分支條件指令?
在6502個文件之一(當然非官方)也給出了這樣的例子:
BEQ $A7 ;Branch-on-equal with value 0xA7
$F0 $A7 ;Translation into hex
在該文件中,它說,0xA7應視爲-39,並表示像這樣:
1 0 1 0 0 1 1 1 ;-39 dec
如果7 bith(從0開始)將是0,這純粹是39:
0 0 1 0 0 1 1 1 ;39 dec
我想知道,是這個文件正確,或者我應該使用二進制補碼,這意味着:
1 0 1 0 0 1 1 1
實際上是-89?
我在問這是因爲我在Java中編程仿真器,字節被解釋爲二進制補碼,我在很多指令中都看到了這種方式,現在我正在被混亂。
這裏有一些關於此的討論:http://forums.nesdev.com/viewtopic.php?t = 102。結論似乎是錯的;它應該是2的補碼。 –
我對處理器瞭解不多,但之前我讀過一個CPU可以很容易地用二進制補碼跟蹤二進制數,這就是爲什麼我問這個問題的原因。一會兒我想刪除它,認爲文檔是由非常有經驗的人制作的,即不太可能是不正確的,但幸運的是我沒有,否則我的整個CPU都毫無價值。謝謝。諷刺的是,我也注意到了重複的0x60操作碼錯誤,這就是爲什麼我(幸運地)使用多個資源作爲參考。看起來即使是最好的也很容易出錯。 – ZimZim
偉大的項目承擔。祝你好運。 :) – alex