2013-06-01 72 views
1

我正在製作一個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中編程仿真器,字節被解釋爲二進制補碼,我在很多指令中都看到了這種方式,現在我正在被混亂。

+1

這裏有一些關於此的討論:http://forums.nesdev.com/viewtopic.php?t = 102。結論似乎是錯的;它應該是2的補碼。 –

+0

我對處理器瞭解不多,但之前我讀過一個CPU可以很容易地用二進制補碼跟蹤二進制數,這就是爲什麼我問這個問題的原因。一會兒我想刪除它,認爲文檔是由非常有經驗的人制作的,即不太可能是不正確的,但幸運的是我沒有,否則我的整個CPU都毫無價值。謝謝。諷刺的是,我也注意到了重複的0x60操作碼錯誤,這就是爲什麼我(幸運地)使用多個資源作爲參考。看起來即使是最好的也很容易出錯。 – ZimZim

+0

偉大的項目承擔。祝你好運。 :) – alex

回答

2

哇,設置這個迴路機!在過去的70年代和80年代,我曾經在'02家族的程序集中編程Atari VCS,電腦系列和投幣式街機遊戲。好吧,我記得所有BEQ(分支平等)指令所做的是檢查「零標誌」和分支的狀態(如果已設置)。零標誌根據比較和數學函數設置/清除。因爲你在'02上詢問+/-數字,你可能想要BPL(分支如果加上)或BMI(分支如果減去),它們是基於符號'N'標誌,基本上只是第7位的累加器。所以遞減0會讓你$ ff並設置減號'N'標誌。你會把這個$ ff解釋爲-1,意思是2的補碼。

更新: 是的,我的答案可能有點兒回合。所以,是的,它是2的補碼,並且偏移量是下一個將被提取的操作碼的地址,意思是-2或$ fe會讓你回到你的'BEQ'。因此,$ F0 $ A7實際上會從BEQ地址之前的2個字節向後分支89個字節。

+0

但是根據OP的questin,在操作碼字段的上下文中呢? –

+0

如果我理解正確,他的最後一行給出了答案:「你會將此$ ff解釋爲-1,這意味着2的補碼。」他在談論BPL和'N'標誌的結合,所以我認爲這確實是在操作碼字段的背景下。 – ZimZim

+1

是的,我的回答可能是一個小圓點。所以,是的,它是2的補碼,偏移量是下一個將被提取的操作碼的地址,意思是-2或$ fe會讓你回到你的'BEQ'。所以$ F0 $ A7實際上會從BEQ地址前面2個字節的地址向後分支89個字節...... – Baratong