2026.7.28
前へ

ホームページトップへ戻る


[新連載開始]W65C02マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
私としてはW65C02をさわるのは全く初めてです。何から何まで未経験です。さてどうなりますでしょうか。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第26回]



●BRA(4)ラベル機能(前方へのジャンプ)

今までBRA命令のオペランドを手計算で算出してその値を検証してきました。
相対ジャンプ命令のオペランド値を手計算で求めるのはなかなかに面倒な作業です。
はっきり言ってとてもやってられないなあという作業です。
ここはやっぱりラベル機能が欲しいところです。
手計算でも大変なのですからそれをアセンブラに組み込むのはさらに大変な作業です。
でもこれはやらないわけにはいきませんでしょう。
ということで。
今回はラベルを使ったBRA命令の検証です。
下がW65C02アセンブラに組み込んだ相対ジャンプ命令のラベル機能を確認するために作成したテストプログラム(ソースプログラム)です。
        ;w65c02test5 26.7.23
        ;
        org $8000
;
        lda #$00
        bra jp1
        inc
        inc
        inc
        inc
        inc
jp1:
        inc
        sta $12
        stp
;end

ラベルを使用することでプログラムは分かり易いものになりました。
これは一見すると絶対ジャンプ命令のように見えます。
果たしてうまく相対ジャンプ命令のオペランド値として正しく計算してくれるでしょうか。
下はW65C02アセンブラによって生成されたアセンブルリストです。
0000           ;w65c02test5 26.7.23
0000            ;
8000            org $8000
8000        ;
8000 A900       lda #$00
8002 8005       bra jp1
8004 1A         inc
8005 1A         inc
8006 1A         inc
8007 1A         inc
8008 1A         inc
8009        jp1:
8009 1A         inc
800A 8512       sta $12
800C DB         stp
800D        ;end

BRA命令を読み込んだ直後のPCの値は8004です。
ジャンプ先のアドレスは8009です。
BRA命令のオペランドに入れるべき値は8009−8004=5になります。
確かにアセンブルリストのその値は05になっています。
W65C02アセンブラは正しい計算をしてくれたようです。
念のためにプログラムを実行して確かめてみました。

上のテストプログラムはアキュムレータに00を入れた後8009にジャンプしてそこでINC命令を1回実行したあと結果の値を0012に書いてSTOPします。
最初に0012の値を確認するつもりで思い違いをして/CM 0010にしてしまいました。
あらためて/CM 0012を実行しました。
0012の値は04でした。
テストプログラム65c02test9.binをロードして/runを実行しました。
その後/CMで0012の値を確認しました。
0012の値は01に変わっていました。
W65C02アセンブラがラベルを使ったBRA命令を正しいバイナリコードに変換することが確かめられました。

W65C02マイコンボードの製作[第26回]
2026.7.28 upload

前へ

ホームページトップへ戻る