1

私は最初 (助けを求めて)、2 つの n バイト整数を追加する 6502 ペット エミュレーターで BASIC プログラムを作成しました。ただし、私のフィードバックは、2 つの 16 ビット整数を追加するだけであるというものでした (n バイト整数を追加するのではありません)。

私のコードを見てこのフィードバックを理解し、2 つの n バイト整数を追加するプログラムを作成するための正しい方向を教えてくれる人はいますか?

コラボありがとう!

ドキュメント: 絶対インデックス アドレッシングを使用して 2 つの n バイト整数を追加します。加数はメモリ位置 $0600、$0700 から始まり、答えは $0800 にあります。整数のバイト長は $0600 です (¢ —> 256)

Machine Code:

18  a2  00  ac  00  06  bd  00
07  7d  00  08  9d  00  09  e8
00  88  00      d0

オペコード、ドキュメント、変数:

A1 = $0600
B1 = $0700
B2 = $0800
Z1 = $0900

[START] = $0500

            CLC                 18             // loads x with 0
            LDX                 A2  00     // loads length on Y                     
            LDY         A1      AC  00  06     // load first operand                    
loop:       LDA         B1, x   BD  00  07     // adds second operand       
            ADC         B2, x   7D  00  08     // store result  
            STA         Z1, x   9D  00  09     // go to next byte       
            INX                 E8  00     // count how many are left       
            DEY                 88  00         // do more if needed         
            BNE    loop         D0
4

1 に答える 1

3

あなたのコードはあなたが主張しているように見えました-2つのNバイトオペランドをリトルエンディアンのバイトオーダーで追加します。私は 6502 のさまざまなアドレッシング モードをぼんやりとした青春時代からぼんやりと覚えていましたが、コードは問題ないようです。X は 2 つの数値から現在のバイトのインデックスを作成するために使用されます。Y はオペランドの長さ (バイト単位) のカウンターであり、アドレス 0x0700 および 0x0800 に格納されているこれらのバイトをループし、結果をアドレス 0x0900 に書き込みます。

コモドール 64 を屋根裏部屋から取り出して試すのではなく、オンラインの仮想 6502 シミュレーターを使用しました。このサイトでは、メモリ アドレスを設定し、バイト値を読み込むことができます。オペコードを組み立てるためのページにリンクすることもできます。したがって、メモリ位置 0x0600 を「04」に設定し、0x0700 と 0x0800 の両方を「04 03 02 01」に設定すると、このコードがこれら 2 つの 32 ビット値 (0x01020304 + 0x01020304 == 0x02040608) を追加することがわかります。

PC レジスタをクリックして 0x0500 に設定し、シングル ステップでコードをステップ実行すると、マシン コードにバグがあることがわかります。E8 にコンパイルされる INX の後、終了する偽の 0x00 値 (BRK) にヒットします。以下のように修正されたコードは最後まで実行され、0x0900 のメモリを読み取ると期待値が表示されます。

0000        CLC             18
0001        LDX #$00        A2 00
0003        LDY $0600       AC 00 06
0006 LOOP:  LDA $0700,X     BD 00 07
0009        ADC $0800,X     7D 00 08
000C        STA $0900,X     9D 00 09
000F        INX             E8
0010        DEY             88
0011        BNE LOOP:       D0 F3

メモリ ダンプ:

:0900  08 06 04 02 00 00 00 00
:0908  00 00 00 00 00 00 00 00
于 2014-02-21T09:54:34.027 に答える