いつもお世話になっております。
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で解決する方法に対して、ご対応いただきました(⇒解決)。
ご対応ありがとうございました。
また、分からないことがあれば、質問したいと思います。