CC-RL78で64K-1にコードが置けない

アセンブラでFFFDh番地にBR $!命令を(EE,FD,FF)を配置しようとすると、以下のエラーが出て配置できません。

(E) E0562325 E0562325:Section ".text_ATFFFD" steps over the border of "64K-1"

0xFFFF番地に命令を置いちゃだめなんでしったけ?
CAではできていたので、CCコンパイラのバグなのかな?(-no-warning_num 62325つけてもダメみたいですね)

↓再現プログラム

TES .CSEG AT 0xFFFD
MAIN:
           BR $!MAIN

Parents
  • Kirinさん、こんにちは。NoMaYです。

    一応、.CSEG ATによるセクションもリンカオプションでエラーにしないようには出来ますね。ただ、どうしてそのチェック機能があるのか、理由がとっさに思い浮かばないですけど、、、

    画面コピー




     

  • NoMaYさん

    ありがとうございます。大変助かりました。
    教えていただいた「-CHECK_64K_ONLY」を付けたら大丈夫になりました!

    RL78は64Kをまたいで命令を配置しても大丈夫なのになぜ境界をチェックするのか、64K-1とかもっと謎ですよね。
    いざとなったら、リロケータブルに作って後でアドレス付け替えようかと思っていたところです。

    なんかCC-RLのアセンブラっていろいろ機能が削減されて使いにくいですね。
    定数式内でラベル同士を計算させるとすぐにオーバーフローして計算結果がおかしくなったりするし、AND疑似命令とかも使いたいし。。。T_T

  • > RL78は64Kをまたいで命令を配置しても大丈夫なのになぜ境界をチェックするのか、64K-1とかもっと謎ですよね。
    16bit分岐命令が +0 ~ +FFFF (64K-1)の範囲しか指定できないから、64K-1にしておけば16bit分岐命令一択でセクションのどこでも分岐できて都合が良かった、とかじゃないですかね。思い切り勝手な推測ですが。

  • ほやさん

    なるほど。
    でもBR !命令でFFFFh番地に配置した命令にはジャンプできるので64K-1のチェックは不要ですよねぇ?

    そうか!
    ffffh番地にFFを置いて、未定義ベクタ(FFFFh)にジャンプしたらリセットを発生させる使い方の場合に役立ちそうですね^^

Reply
  • ほやさん

    なるほど。
    でもBR !命令でFFFFh番地に配置した命令にはジャンプできるので64K-1のチェックは不要ですよねぇ?

    そうか!
    ffffh番地にFFを置いて、未定義ベクタ(FFFFh)にジャンプしたらリセットを発生させる使い方の場合に役立ちそうですね^^

Children
No Data