C言語からのアセンブラ関数呼び出しについて

いつもお世話になっております。

far領域(00000H~017DFFH)のRomデータを取得して加算するプログラムをC言語で作成したのですが、010000H以上のアクセスができませんでした。逆アセンブリをみたところ、ESレジスタの記述が見つからず、そこで、データ取得処理をアセンブラで記述してみました。

アセンブラ関数は、

16ビットアドレスのfar領域アクセス用関数(ES=0x00)と、20ビットアドレスのfar領域アクセス用関数(ES=0x01)を

2つ用意して、共に引数をunsigned short アドレスとして、戻り値をunsigned charでデータとしました。

Cソースファイルからアセンブラ関数を呼び出して、指定アドレスのデータを取得したいのですが、取得出来ません。

ステップ実行で確認すると、アセンブラ関数では指定のアドレスデータを取得できて、戻り値としてAレジスタにセットしてリターンしているのですが、C側に戻ると取得データは格納されておらず、逆アセンブリを見てみると、別のアドレスを指していました。

C言語からアセンブラ関数を呼び出す際の注意点などありましたら、教えていただきたく、宜しくお願いいたします。

【環境】

 マイコン  :RL78/G13(S2コア)

 開発環境  :e2studio ver 2022-04 (22.4.0)

 コンパイラ :GCC for Renesas RL78 ver 4.9.2.202201  最適化 -o1

 プロジェクト:C++、C混在

  • adu様

    元はアセンブラ関数呼び出しについて質問しまして(マニュアルを見つけられず、、、⇒解決)、

    その後、アセンブラに至った経緯がCで同等の処理が出来ないことからだったので、Cで解決する方法に対して、ご対応いただきました(⇒解決)。

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

    また、分からないことがあれば、質問したいと思います。