2016-08-26 11 views
-1

私はコンパイラを書くことにしたので、OS APIがどのように動作するのか不思議でした。 C/C++で何かをしているなら、おそらくAPIを呼び出すでしょう。 C/C++では非常に上手く見えますが、アセンブリ時にどのようにコンパイルされているかは非常に混乱しています。彼らは割り込みを発行し、メモリアドレスに書き込み、レジスタに書き込んだり割り込みを発行しますか(BIOS APIの仕組み、OS APIがそうであればわかりません)低レベルのOS APIはどのように機能しますか?

+0

あなたの質問悲しいことに、低レベルのプログラミングに基本的な知識の偉大な欠如を意味します。自分のコンパイラを書くことを検討する前に、このトピックに関する良い本または2点を得て、これらのトピックについて学ぶことをお勧めします。 –

+0

ここで関連する用語は、「呼び出し規約」です(関数の引数がどのように渡され、戻り値が返され、どのレジスタがclobberedで、どのレジスタがそうでないかについて)。より一般的には、ABI(APIのようにBinary)は、物事がどのように組み立てて相互作用するかを記述します。 [x86タグwiki](http://stackoverflow.com/tags/x86/info)には、ABIとは何かに関する良いリンクがあり、x86/x86-64で使用される一般的な仕様の公式仕様へのリンクWindowsとは異なり、安定していて、通常のglibcラッパーなしで直接使用できるLinuxシステムコールABIのようなもの) –

+0

実際にWindowsに興味があることはわかっていますが、それは最も関連性の高い重複のようです。呼び出し規約が設計されている理由の説明については、http://stackoverflow.com/questions/8335582/why-does-ia-32-have-a-non-intuitive-caller-and-callee-register-saving-conventionを参照してください。彼らのやり方。また、SO docsの[x86 Linux 32ビットアセンブリHello World、純粋なシステムコール(libcなし)を参照](http://stackoverflow.com/documentation/x86/1164/introduction-to-x86/19078/x86-linux) -hello-world-example)を使用します。 –

答えて

2

自分の質問に答えるために申し訳ありませんが、私は私の書いている場合ことを意味し、単に標準C呼び出しです私は(少なくともWindowsの場合)

どうやらOSのAPIを探していたましたコンパイラ私は自分自身のAPIシステムを実装する必要があります。

出典:https://social.msdn.microsoft.com/Forums/en-US/61b11104-98c1-43aa-be19-91378561bab4/calling-win32-api-from-assembly-language?forum=netfxtoolsdev

+2

あなた自身の質問に答えるのは大丈夫です。 – fuz

+0

さて、よく自分の質問に答えることについて謝罪している誰かを見つけたので、私はそれをやろうと思っていた –

関連する問題