[新連載開始]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
前へ
ホームページトップへ戻る