アセンブラヽ(`Д´)ノモルァ
■ このスレッドは過去ログ倉庫に格納されています
0463デフォルトの名無しさん
NGNG/* 32bit segment func */
void __far func(ushort sel,ulong num);
/* メイン関数は16bit セグメント上にあるものとする */
void main(){
void (__far *pFunc)();
ushort sel = AllocateSel();/*セレクタ値の取得*/
/* これがわからん */
pFunc = (void (__far*)())(((ulong)sel<<16 + (ushort)func);
RealToProto(); // real mode to protect mode
aFunc(a,b); // 32ビットセグメント上の関数を呼ぶ。
ProtoToReal();// protect mode to real mode
}
MSDOSのC言語処理系だと、__far 属性の関数は
従来どおりにセグメントアドレスとオフセットアドレスで指定
するから、それに対応するため、16bit セグメントから
32bit セグメントのコードをcall するための
テクニックなんだそうだが、よくわかんないです。
とくにこの部分。
pFunc = (void (__far*)())(((ulong)sel<<16 + (ushort)func);
関数ポインタに「セレクタ値:オフセットアドレス」
をセットしておくための処理らしいのだが、よくわからんです。
どなたか、ご教授ください。お願いします。
■ このスレッドは過去ログ倉庫に格納されています