eVC4のヘルプにアセンブラ周りの基本的な部分が載っていますね。関数呼び出しの時のレジスタの使い方など。
evc4help.chmのMicrosoft eMbedded Visual C++ Guide/Microprocessor Referenceあたりです。
というわけで、まずはアセンブラで関数を書いてみるところから。
CODE32 AREA |.text|, CODE, ARM EXPORT |get| |get| PROC mov r0, #10 mov pc, lr ENDP END
とりあえずこれを、armasm.exeでobjにして、C++からこんな感じで呼び出すのには成功しました。
extern "C" int get(); printf("%d\n", get());
C++のコードをアセンブラに落として調べているのですが、メンバ関数を呼び出すときには、r0にthisをセットしてから関数にジャンプすれば良い模様です。
なんだか例外処理と関係なくなって、ARMのアセンブラ入門みたいになっちゃってますね^^;;。
catchブロックを呼び出すと、r0に継続用のアドレスが入れられるようです。そしてフレームポインタはr11なので、r11を元に戻してからr0に返されたアドレスに戻れば良さそうです。
ついでにunwind用の処理もr11を基準に生成されていて、lrをスタックにつんで終わったらその値をpcに戻しているので、unwindするときもr11を戻してからunwind用のアドレスをblで呼び出せば良さそうです。