1

私は 6502 用のエミュレーターを作成していますが、基本的に、レジスターの 1 つ (主に X と Y) にオフセットが保存されている命令がいくつかあり、分岐命令は符号付き 8 ビット整数を使用するため、レジスタは値を 8 ビット符号付きのままにしますか? これを意味する:

switch(opcode) { 
    //Bunch of opcodes
    case 0xD5: 
    //Read the memory area with final address being address + x offset
    int rempResult = a - readMemory(address + x); 
    //Comparing some things, setting/disabling flags
    //Incrementing program counter and cycles/ticks
    break; 
    //More opcodes
}

この状況で x = 0xEE としましょう。通常のバイナリでは、これは x = 238 を意味します。ただし、6502 では、分岐命令はメモリ アドレスへのジャンプに符号付きオフセットを使用するため、この場合 238 は -18 として解釈されるのか、それとも単に通常の符号なし 8 ビット値?

4

2 に答える 2

0

「符号」は、単に 8 ビット バイトの最上位 (別名ビット 7) の値です。

6502 は、次の方法で符号付きの値をサポートしています。

  • Nビットイン- しかし、.P実際には、最後の命令がメモリ位置またはレジスタのビット 7 をオンまたはオフにしたかどうかを示しているだけです。BPL/を使用BMIして、フラグまたは「ブール値」のような使用のためにメモリ位置のビット 7 に基づいて何かを行うのが一般的でした。
  • 「2 つの正の数を加算した結果がオーバーフローして負になる場合と、2 つの負の数を加算した結果がオーバーフローして正になる場合」のVビット.P反転します。
  • もちろん、相対分岐命令の符号ビットのみに従うと、たとえばBEQビット 7 が設定された値を使用すると、上位のメモリ位置ではなく、下位のメモリ位置に移動します。

それを超えて、そのビットが何かを意味するかどうかは、完全にあなたとあなたのプログラム次第です。数字を実際に符号付きまたは符号なしにするのは、数字の表示方法です。

上記のリンクされた記事では、1 の補数と 2 の補数とは何か、および 6502 が記号をあまり気にせずに数学を機能させる方法について説明しています。

于 2016-12-13T19:32:25.097 に答える