RL78/G23 CS+,E2-Liteでデバッグを行っています。HLレジスタで指定したアドレスに転送出ません。

Nitarouです。RL78/G23でアセンブラでプログラム作成し、デバッグを行っています。

REGAのデータをBCD変換してREGBに転送するプログラムをデバッグしています。

HLレジスタでREGBのアドレスを指定してAレジスタの内容を書き込みたいのですが、転送できません。解決方法をご存じでしたらご教示ください。

Parents
  • チョコです。

    どうも、935行目の「MOVW HL,」命令のオペランドの記述が「!REGB」となっていますが、これは間違いです。

    ここは、「#LOWW REGB」とすべきです。

    以上

  • チョコさん、ご指摘の命令を書き換えましたらHLレジスタで指定したアドレスに書き込めました。

    ありがとうございました。

  • チョコです。

    ところで、928行目にも同じ命令がありますが、これは無意味ではないでしょうか。

    (今回の935行目の命令で上書きされてしまうので)

    以上

  • チョコです。

    折角なので、なぜ「#LOWW」にする必要があるかを解説(?)します。

    今回の「REGB」はビルドが完了した時点で、イミディエートなアドレスの値が割り当てられています。

    これをHLレジスタに設定するには、イミディエートな値である「#」を付ける必要があります。

    さらに「REGB」にアドレスは20ビットの大きさを持つので、そのままではHLに設定できません。

    「REGB」はRAMをさすので、上位4ビットが0xFに場合にはその下位16ビットを抽出してnear領域で

    アクセスできるので、下位16ビットを抽出するために#LOWWを付けて、「#LOWW REGB」とすればいいのです。

    ちなみにオリジナルの「!」はメモリの内容を指すために使うもので、「!REGB」はREGB番地の内容を示します。

    「!」は、2ndSFRやsaddr領域以外のメモリ領域の内容をアクセスする場合に使用します。つまり、

    「MOVW  HL, !REGB」は、REGBに格納されている内容をHLに設定しています。

    以上

  • チョコさん、詳しく解説していただきましてありがとうございます。

    大変感謝しています。

Reply Children
No Data